├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── examples ├── boarding.html ├── css │ ├── boarding.css │ ├── invision.css │ └── netflix.css ├── cssdevconf.html ├── curve.html ├── expand.html ├── invision.html ├── scale.html ├── scss │ ├── boarding.scss │ ├── invision.scss │ └── netflix.scss ├── simple-css.html ├── stones.html └── todo.html ├── index.html ├── package-lock.json ├── package.json ├── rollup.config.js ├── src └── index.ts ├── test └── flipping.test.ts ├── tsconfig.json ├── tslint.json ├── typings.json ├── typings ├── globals │ └── mocha │ │ ├── index.d.ts │ │ └── typings.json ├── index.d.ts └── modules │ └── chai │ ├── index.d.ts │ └── typings.json ├── webpack.config.js ├── webpack.config.prod.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .vscode/ 3 | dist/ 4 | .awcache/ 5 | lib/ 6 | 7 | index.html 8 | _src/ 9 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | node_modules 3 | examples 4 | test 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 David Khourshid 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flipping 2 | 3 | A library (and collection of adapters) for [implementing FLIP transitions](https://css-tricks.com/animating-layouts-with-the-flip-technique/). 4 | 5 | For more information about the FLIP technique, view the flipping slides: 6 | - [CSS Dev Conf 2017](https://slides.com/davidkhourshid/flipping) 7 | - [CSSConf AU 2018](https://slides.com/davidkhourshid/illusions) 8 | 9 | ## Examples 10 | - https://codepen.io/davidkpiano/pen/xLKBpM 11 | - https://codepen.io/davidkpiano/pen/vmXErw 12 | - https://codepen.io/davidkpiano/pen/xPVJwm 13 | - https://codepen.io/davidkpiano/pen/RjaBpW 14 | - https://codepen.io/davidkpiano/pen/zWrRye 15 | 16 | ## Installation 17 | ``` 18 | npm install flipping@latest --save 19 | ``` 20 | 21 | Or grab the files directly: 22 | - https://unpkg.com/flipping@latest/dist/flipping.js (core) 23 | - https://unpkg.com/flipping@latest/dist/flipping.web.js (WAAPI adapter) 24 | - 🔜 https://unpkg.com/flipping@latest/dist/flipping.css.js (CSS adapter - WIP!) 25 | 26 | ## Quick Start 27 | 28 | In your HTML, add the `data-flip-key="..."` attribute to shared elements (see HTML example below). 29 | 30 | ```js 31 | import Flipping from 'flipping'; 32 | 33 | const flipping = new Flipping(); 34 | 35 | // Before a layout change happens 36 | flipping.read(); 37 | 38 | // Any effect that changes the layout 39 | doSomething(); 40 | 41 | // After a layout change happens 42 | // With an adapter, this will start the FLIP animation 43 | flipping.flip(); 44 | ``` 45 | 46 | ```html 47 | 48 | 59 | 60 | 61 |
62 |
63 | 64 |
65 |

66 | Lorem ipsum dolor sit amet... 67 |

68 |
69 | ``` 70 | 71 | ## API 72 | 73 | ### `new Flipping(options?)` 74 | 75 | Creates a new `Flipping` instance. This is the thing that keeps track of all the changes made, and determines if any elements changed positions or size. 76 | 77 | **Parameters for `options`** 78 | 79 | For greater control and custom animations, you can pass in the following parameters (all optional): 80 | 81 | - `selector?: (parent: Element) => Element[];` - Selects all "flippable" elements. Defaults to all elements that have a `[data-flip-key]` attribute. 82 | - `activeSelector: (element) => Element[];` - Selects the currently active "flippable" elements. Defaults to selecting the visible flippable elements. 83 | - `onFlip?: (state: IFlipStateMap) => void;` - Event listener. Called with the entire state map of tracked flippable elements whenever `.flip()` is called. 84 | - `onRead?: (state: IFlipStateMap) => void;` - Event listener. Called with the entire state map of tracked flippable elements whenever `.read()` is called. 85 | - `onEnter?: (state: IFlipStateMap) => void;` - Event listener. Called with the state map of elements that enter (that is, not previously tracked). 86 | - `onLeave?: (state: IFlipStateMap) => void;` - Event listener. Called with the state map of elements that leave (that is, previously tracked but no longer active). 87 | - `parent?: Element;` - The root element to query all flippable elements. Defaults to the ``. 88 | - `plugins?: FlipPlugin[];` - An array of plugins that transform the state map before being emitted. 89 | - `duration?: number` - Animation duration in ms. Defaults to 300. 90 | - `easing?: string` - Easing function name e.g. `ease-in-out`. Defaults to `cubic-bezier(.5, 0, .5, 1)`. 91 | 92 | ### `flipping.read(): void` 93 | 94 | Queries all the flippable selectors and reads their bounds (position and size). This must be called before layout changes are made. 95 | 96 | Will call any `onRead()` event listeners with the entire state map. 97 | 98 | ### `flipping.flip(): void` 99 | 100 | Queries all the flippable selectors and reads their bounds (position and size), and then determines the deltas (changes in position and/or size) 101 | 102 | Will call any `onFlip()` event listeners with the entire state map. 103 | 104 | ### `flipping.wrap(fn): void` 105 | 106 | 1. Calls `flipping.read()` 107 | 2. Calls the wrapped `fn()` 108 | 3. Returns the result of the wrapped `fn()` 109 | 4. Calls `flipping.flip()` 110 | 111 | It's a nice shorthand. Use it. 112 | 113 | ### `data-flip-key="..."` 114 | 115 | HTML data-attribute that tracks the same/shared elements and identifies them as the "same" element. 116 | 117 | ### `data-flip-no-scale` 118 | 119 | HTML data-attribute that prevents the Flipping adapters from trying to apply `scale()` to a transformed element. 120 | 121 | - https://codepen.io/davidkpiano/pen/RjaBpW 122 | - https://codepen.io/davidkpiano/pen/xLKBpM 123 | -------------------------------------------------------------------------------- /examples/boarding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Boarding 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | 25 | 68 | 69 | -------------------------------------------------------------------------------- /examples/css/boarding.css: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: border-box; 5 | position: relative; } 6 | 7 | html, 8 | body { 9 | height: 100%; 10 | width: 100%; } 11 | 12 | body { 13 | display: flex; 14 | justify-content: center; 15 | align-items: center; } 16 | 17 | #app { 18 | height: 90vh; 19 | width: 45vh; 20 | outline: 1px solid black; 21 | padding: 1rem; } 22 | 23 | .layer { 24 | position: absolute; 25 | top: 0; 26 | left: 0; 27 | width: 100%; 28 | height: 100%; } 29 | .layer:not([data-active]) { 30 | display: none; } 31 | 32 | .-bg:before { 33 | content: ''; 34 | display: block; 35 | position: absolute; 36 | top: 0; 37 | left: 0; 38 | height: 100%; 39 | width: 100%; 40 | background-color: var(--bg); } 41 | 42 | .ticket { 43 | --bg: blue; 44 | padding: 1rem; 45 | border-radius: 1rem; 46 | color: white; 47 | display: grid; 48 | grid-template-columns: 1fr 5rem; } 49 | .ticket > .qrcode { 50 | grid-column: 2 / 3; } 51 | 52 | .full-ticket { 53 | --bg: blue; 54 | height: 100%; 55 | width: 100%; 56 | display: grid; 57 | grid-template-rows: 50% 50%; } 58 | .full-ticket > .qrcode { 59 | grid-row: 2 /3; 60 | height: 8rem; 61 | width: 8rem; } 62 | 63 | .qrcode { 64 | border: 2px solid black; 65 | background-color: white; 66 | height: 3rem; 67 | width: 3rem; 68 | align-self: center; 69 | justify-self: center; 70 | transition: transform 1s; 71 | transform-origin: 0 0; } 72 | .qrcode[data-flip-state='pre-move'] { 73 | transition: none; 74 | transform: var(--flip-curve); } 75 | .qrcode[data-flip-state='move'] { 76 | transform: var(--flip-fcurve); } 77 | -------------------------------------------------------------------------------- /examples/css/invision.css: -------------------------------------------------------------------------------- 1 | #app { 2 | outline: 1px solid; 3 | width: 280px; 4 | height: 500px; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: space-between; 8 | overflow: hidden; } 9 | 10 | .ui-card { 11 | width: 225px; 12 | display: grid; 13 | grid-template-columns: 100%; 14 | grid-template-rows: 220px 1fr; 15 | border-radius: .25rem; } 16 | .ui-card + .ui-card { 17 | margin-left: 1rem; } 18 | .ui-card .ui-feature { 19 | grid-row: 1 / 2; } 20 | .ui-card .ui-content { 21 | grid-row: 2 / 3; 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | align-items: flex-start; 26 | padding: 1rem; 27 | z-index: 1; } 28 | .ui-card > .ui-bg { 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | width: 100%; 33 | height: 100%; 34 | display: grid; 35 | grid-template-columns: inherit; 36 | grid-template-rows: inherit; 37 | z-index: 0; } 38 | .ui-card > .ui-bg .ui-bg-color { 39 | position: absolute; 40 | top: 0; 41 | left: 0; 42 | right: 0; 43 | bottom: 0; 44 | background-color: white; 45 | box-shadow: 0 0 1rem rgba(0, 0, 0, 0.2); 46 | border-radius: .25rem; 47 | border-top-left-radius: 0; 48 | border-top-right-radius: 0; } 49 | .ui-card > .ui-bg > .ui-bg-img { 50 | grid-row: 1 / 2; 51 | background-color: black; 52 | border-radius: .25rem; 53 | border-bottom-left-radius: 0; 54 | border-bottom-right-radius: 0; } 55 | 56 | .ui-title, .ui-subtitle { 57 | font-size: .75rem; 58 | display: inline-block; } 59 | 60 | [data-state="a"] #app .ui-items { 61 | position: absolute; 62 | top: 100%; 63 | animation: fade-out .2s both; } 64 | 65 | @keyframes fade-out { 66 | from { 67 | opacity: 1; } 68 | to { 69 | opacity: 0; } } 70 | 71 | [data-state="a"] #app .ui-content { 72 | height: 90px; } 73 | 74 | .ui-cards { 75 | font-family: Proxima Nova, sans-serif; 76 | display: flex; 77 | flex-direction: row; 78 | overflow-x: auto; 79 | overflow-y: hidden; 80 | padding: 1rem; } 81 | .ui-cards[data-flip-state="active"] { 82 | overflow: visible; } 83 | .ui-cards > .ui-card { 84 | flex-shrink: 0; } 85 | 86 | [data-state="b"] #app .ui-cards, [data-state="b"] #app .ui-card.active { 87 | position: absolute; 88 | top: 0; 89 | left: 0; 90 | width: 100%; 91 | height: 100%; 92 | margin: 0; } 93 | 94 | [data-state="b"] #app .ui-card.active .ui-content { 95 | justify-content: flex-start; } 96 | 97 | [data-state="b"] #app .ui-card:not(.active) { 98 | display: none; } 99 | 100 | [data-state="b"] #app .ui-items { 101 | display: block; 102 | animation: fade-in .2s .2s both; } 103 | 104 | @keyframes fade-in { 105 | from { 106 | opacity: 0; } 107 | to { 108 | opacity: 1; } } 109 | 110 | .ui-layer { 111 | position: absolute; 112 | top: 0; 113 | left: 0; 114 | width: 100%; 115 | height: 100%; } 116 | 117 | body { 118 | display: flex; 119 | justify-content: center; 120 | align-items: center; } 121 | 122 | html, body { 123 | width: 100%; 124 | height: 100%; 125 | margin: 0; 126 | padding: 0; } 127 | 128 | *, *:before, *:after { 129 | box-sizing: border-box; 130 | position: relative; } 131 | -------------------------------------------------------------------------------- /examples/css/netflix.css: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: border-box; 5 | position: relative; } 6 | 7 | body, 8 | html { 9 | height: 100%; 10 | width: 100%; 11 | margin: 0; 12 | padding: 0; } 13 | 14 | body { 15 | background-color: #f6f6f2; 16 | color: #26241f; } 17 | 18 | .scene { 19 | display: none; 20 | position: absolute; 21 | top: 0; 22 | left: 0; 23 | width: 100%; 24 | height: 100%; 25 | justify-content: center; 26 | align-items: center; } 27 | .scene:nth-child(2) h1 { 28 | display: grid; 29 | grid-template-columns: 1fr; 30 | grid-template-rows: 1fr; } 31 | .scene:nth-child(2) h1 > div { 32 | grid-area: 1 / 1; } 33 | 34 | [data-word] { 35 | transition: all 0.3s ease; } 36 | 37 | [data-state='1'] .scene:nth-child(1) { 38 | display: flex; } 39 | 40 | [data-state='2'] .scene:nth-child(2), 41 | [data-state='3'] .scene:nth-child(2), 42 | [data-state='4'] .scene:nth-child(2) { 43 | display: flex; } 44 | 45 | [data-state='2'] .scene:nth-child(2) .first [data-word] { 46 | opacity: 0; 47 | transition-delay: calc(var(--word-index) * 200ms); } 48 | 49 | span { 50 | display: inline-block; } 51 | 52 | .whitespace { 53 | width: 0.5ch; } 54 | -------------------------------------------------------------------------------- /examples/cssdevconf.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 114 | 115 | 116 |

117 | C S 118 | S 119 |

120 |

121 | Dev 122 | Conference 123 |

124 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /examples/curve.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 59 | 60 | 61 | 62 |
63 |
64 |
65 |
66 |
67 |
68 | 69 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /examples/expand.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 67 | 68 | 69 |
70 | 71 |
72 |
73 | 74 |
75 |
76 | 77 | 201 | 202 | 203 | -------------------------------------------------------------------------------- /examples/invision.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 |
17 |
22 |
23 |
24 | InVision iOS 25 |
26 |
31 | 24 Documents 32 |
33 |
    34 |
  • Something 1
  • 35 |
  • Something 2
  • 36 |
  • Something 3
  • 37 |
  • Something 4
  • 38 |
  • Something 5
  • 39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 47 |
48 |
53 |
54 |
55 | InVision iOS 56 |
57 |
62 | 24 Documents 63 |
64 |
    65 |
  • Something 1
  • 66 |
  • Something 2
  • 67 |
  • Something 3
  • 68 |
  • Something 4
  • 69 |
  • Something 5
  • 70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | 79 |
80 | 81 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /examples/scale.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Document 9 | 10 | 52 | 53 | 54 | 55 |
56 | Hello! 57 |
58 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /examples/scss/boarding.scss: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: border-box; 5 | position: relative; 6 | } 7 | 8 | html, 9 | body { 10 | height: 100%; 11 | width: 100%; 12 | } 13 | 14 | body { 15 | display: flex; 16 | justify-content: center; 17 | align-items: center; 18 | } 19 | 20 | #app { 21 | height: 90vh; 22 | width: 45vh; 23 | outline: 1px solid black; 24 | padding: 1rem; 25 | } 26 | 27 | .layer { 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | width: 100%; 32 | height: 100%; 33 | 34 | &:not([data-active]) { 35 | display: none; 36 | } 37 | } 38 | 39 | .-bg:before { 40 | content: ''; 41 | display: block; 42 | position: absolute; 43 | top: 0; 44 | left: 0; 45 | height: 100%; 46 | width: 100%; 47 | background-color: var(--bg); 48 | } 49 | 50 | .ticket { 51 | --bg: blue; 52 | padding: 1rem; 53 | border-radius: 1rem; 54 | color: white; 55 | display: grid; 56 | grid-template-columns: 1fr 5rem; 57 | 58 | > .qrcode { 59 | grid-column: 2 / 3; 60 | } 61 | } 62 | 63 | .full-ticket { 64 | --bg: blue; 65 | height: 100%; 66 | width: 100%; 67 | display: grid; 68 | grid-template-rows: 50% 50%; 69 | 70 | > .qrcode { 71 | grid-row: 2 /3; 72 | height: 8rem; 73 | width: 8rem; 74 | } 75 | } 76 | 77 | .qrcode { 78 | border: 2px solid black; 79 | background-color: white; 80 | height: 3rem; 81 | width: 3rem; 82 | align-self: center; 83 | justify-self: center; 84 | transition: transform 1s; 85 | transform-origin: 0 0; 86 | 87 | &[data-flip-state='pre-move'] { 88 | transition: none; 89 | transform: var(--flip-curve); 90 | } 91 | &[data-flip-state='move'] { 92 | transform: var(--flip-fcurve); 93 | // transition-delay: 1s; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /examples/scss/invision.scss: -------------------------------------------------------------------------------- 1 | #app { 2 | outline: 1px solid; 3 | width: 280px; 4 | height: 500px; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: space-between; 8 | overflow: hidden; 9 | } 10 | 11 | .ui-card { 12 | width: 225px; 13 | // height: 310px; 14 | display: grid; 15 | grid-template-columns: 100%; 16 | grid-template-rows: 220px 1fr; 17 | border-radius: .25rem; 18 | 19 | + .ui-card { 20 | margin-left: 1rem; 21 | } 22 | 23 | .ui-feature { 24 | grid-row: 1 / 2; 25 | } 26 | 27 | .ui-content { 28 | grid-row: 2 / 3; 29 | display: flex; 30 | flex-direction: column; 31 | justify-content: center; 32 | align-items: flex-start; 33 | padding: 1rem; 34 | z-index: 1; 35 | } 36 | 37 | > .ui-bg { 38 | position: absolute; 39 | top: 0; 40 | left: 0; 41 | width: 100%; 42 | height: 100%; 43 | display: grid; 44 | grid-template-columns: inherit; 45 | grid-template-rows: inherit; 46 | z-index: 0; 47 | 48 | .ui-bg-color { 49 | position: absolute; 50 | top: 0; 51 | left: 0; 52 | right: 0; 53 | bottom: 0; 54 | background-color: white; 55 | box-shadow: 0 0 1rem rgba(black, .2); 56 | border-radius: .25rem; 57 | border-top-left-radius: 0; 58 | border-top-right-radius: 0; 59 | } 60 | 61 | > .ui-bg-img { 62 | grid-row: 1 / 2; 63 | background-color: black; 64 | border-radius: .25rem; 65 | border-bottom-left-radius: 0; 66 | border-bottom-right-radius: 0; 67 | } 68 | } 69 | } 70 | 71 | .ui-title, .ui-subtitle { 72 | font-size: .75rem; 73 | display: inline-block; 74 | } 75 | 76 | [data-state="a"] #app { 77 | .ui-items { 78 | position: absolute; 79 | top: 100%; 80 | animation: fade-out .2s both; 81 | @keyframes fade-out { 82 | from { 83 | opacity: 1; 84 | } 85 | to { 86 | opacity: 0; 87 | } 88 | } 89 | } 90 | 91 | .ui-content { 92 | height: 90px; 93 | } 94 | } 95 | 96 | .ui-cards { 97 | font-family: Proxima Nova, sans-serif; 98 | display: flex; 99 | flex-direction: row; 100 | overflow-x: auto; 101 | overflow-y: hidden; 102 | padding: 1rem; 103 | 104 | &[data-flip-state="active"] { 105 | overflow: visible; 106 | } 107 | 108 | > .ui-card { 109 | flex-shrink: 0; 110 | } 111 | } 112 | 113 | [data-state="b"] #app { 114 | .ui-cards, .ui-card.active { 115 | position: absolute; 116 | top: 0; 117 | left: 0; 118 | width: 100%; 119 | height: 100%; 120 | margin: 0; 121 | } 122 | 123 | .ui-card.active .ui-content { 124 | justify-content: flex-start; 125 | } 126 | 127 | .ui-card:not(.active) { 128 | display: none; 129 | } 130 | 131 | .ui-items { 132 | display: block; 133 | animation: fade-in .2s .2s both; 134 | @keyframes fade-in { 135 | from { opacity: 0; } 136 | to { opacity: 1; } 137 | } 138 | } 139 | } 140 | 141 | .ui-layer { 142 | position: absolute; 143 | top: 0; 144 | left: 0; 145 | width: 100%; 146 | height: 100%; 147 | } 148 | 149 | body { 150 | display: flex; 151 | justify-content: center; 152 | align-items: center; 153 | } 154 | 155 | html, body { 156 | width: 100%; 157 | height: 100%; 158 | margin: 0; 159 | padding: 0; 160 | } 161 | 162 | *, *:before, *:after { 163 | box-sizing: border-box; 164 | position: relative; 165 | } 166 | -------------------------------------------------------------------------------- /examples/scss/netflix.scss: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: border-box; 5 | position: relative; 6 | } 7 | 8 | body, 9 | html { 10 | height: 100%; 11 | width: 100%; 12 | margin: 0; 13 | padding: 0; 14 | } 15 | 16 | body { 17 | background-color: #f6f6f2; 18 | color: #26241f; 19 | } 20 | 21 | .scene { 22 | display: none; 23 | position: absolute; 24 | top: 0; 25 | left: 0; 26 | width: 100%; 27 | height: 100%; 28 | justify-content: center; 29 | align-items: center; 30 | 31 | &:nth-child(2) { 32 | h1 { 33 | display: grid; 34 | grid-template-columns: 1fr; 35 | grid-template-rows: 1fr; 36 | 37 | > div { 38 | grid-area: 1 / 1; 39 | } 40 | } 41 | } 42 | } 43 | 44 | [data-word] { 45 | transition: all 0.3s ease; 46 | } 47 | 48 | [data-state='1'] .scene:nth-child(1) { 49 | display: flex; 50 | } 51 | 52 | [data-state='2'] .scene:nth-child(2), 53 | [data-state='3'] .scene:nth-child(2), 54 | [data-state='4'] .scene:nth-child(2) { 55 | display: flex; 56 | } 57 | 58 | [data-state='2'] .scene:nth-child(2) { 59 | .first [data-word] { 60 | opacity: 0; 61 | transition-delay: calc(var(--word-index) * 200ms); 62 | } 63 | } 64 | 65 | span { 66 | display: inline-block; 67 | } 68 | 69 | // Splitting 70 | .whitespace { 71 | width: 0.5ch; 72 | } 73 | -------------------------------------------------------------------------------- /examples/simple-css.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 42 | 43 | 44 |

Click this page as fast as you can!

45 |
46 | C 47 | S 48 | S 49 |
50 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /examples/stones.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 185 | 186 | 187 | 188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 | 310 | 311 | 312 | -------------------------------------------------------------------------------- /examples/todo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | 12 | Document 13 | 14 | 390 | 391 | 392 | 393 |
394 |
395 |
396 |
397 |
398 |
399 |
TODO
400 |
401 |
402 |
403 |
404 |
405 |
406 |
bk
407 |
New Task
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
Hello, Jane.
416 |

417 | You have 3 tasks to do today. 418 |

419 | Sunday March 11, 2018 420 |
421 |
422 |
423 |
424 |
425 |
426 |
9 Tasks
427 |
Personal
428 |
429 |
430 |
83%
431 |
432 |
433 |
434 |
435 |
9 Tasks
436 |
Personal
437 |
438 |
439 |
83%
440 |
441 |
442 |
443 |
444 |
9 Tasks
445 |
Personal
446 |
447 |
448 |
83%
449 |
450 |
451 |
452 |
453 |
9 Tasks
454 |
Personal
455 |
456 |
457 |
83%
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
9 Tasks
467 |
Personal
468 |
469 |
470 |
83%
471 |
472 |
473 |
Today
474 |
    475 |
  • 476 | 480 |
  • 481 |
  • 482 | 486 |
  • 487 |
  • 488 | 492 |
  • 493 |
  • 494 | 498 |
  • 499 |
500 |
Tomorrow
501 |
    502 |
  • 503 | 507 |
  • 508 |
  • 509 | 513 |
  • 514 |
  • 515 | 519 |
  • 520 |
  • 521 | 525 |
  • 526 |
  • 527 | 531 |
  • 532 |
533 |
534 |
535 |
536 |
537 |
What task are you planning to do?
538 | 539 | 549 |
550 | 551 | 555 |
556 | 557 | 558 | 608 | 609 | 610 | 611 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Document 6 | 92 | 93 | 94 |
95 |
96 |
A
97 |
C
98 |
D
99 |
B
100 |
101 |
102 |
103 |
104 |
C
105 |
A
106 |
B
107 |
D
108 |
109 |
110 | 111 | 112 | 113 | 114 | 115 | 159 | 160 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flipping", 3 | "version": "2.0.0-3", 4 | "description": "Flipping awesome animations.", 5 | "main": "lib/index.js", 6 | "types": "lib/index.d.ts", 7 | "scripts": { 8 | "start": "npm run build:watch", 9 | "test": "NODE_ENV=test && mocha -r ts-node/register test/**.test.ts", 10 | "build": "tsc && npm run build:prod", 11 | "build:prod": "rollup -c", 12 | "build:watch": "rollup -cw", 13 | "examples": "node-sass -w examples/scss -o examples/css", 14 | "prepublish": "npm run build:prod" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/davidkpiano/flipping.git" 19 | }, 20 | "keywords": [ 21 | "flip", 22 | "animation", 23 | "transition" 24 | ], 25 | "author": "David ", 26 | "license": "MIT", 27 | "bugs": { 28 | "url": "https://github.com/davidkpiano/flipping/issues" 29 | }, 30 | "homepage": "https://github.com/davidkpiano/flipping#readme", 31 | "devDependencies": { 32 | "@types/mocha": "^7.0.2", 33 | "@types/node": "^14.0.14", 34 | "rollup": "^2.18.1", 35 | "rollup-plugin-cleanup": "^3.1.1", 36 | "rollup-plugin-filesize": "^9.0.1", 37 | "rollup-plugin-replace": "^2.2.0", 38 | "rollup-plugin-terser": "^6.1.0", 39 | "rollup-plugin-typescript2": "^0.27.1", 40 | "typescript": "^3.9.5" 41 | }, 42 | "dependencies": {} 43 | } 44 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from 'rollup-plugin-typescript2'; 2 | import { terser } from 'rollup-plugin-terser'; 3 | import rollupReplace from 'rollup-plugin-replace'; 4 | import fileSize from 'rollup-plugin-filesize'; 5 | import cleanup from 'rollup-plugin-cleanup'; 6 | 7 | const createConfig = ({ input, output }) => ({ 8 | input, 9 | output, 10 | plugins: [ 11 | rollupReplace({ 12 | 'process.env.NODE_ENV': JSON.stringify('production'), 13 | }), 14 | typescript({ 15 | clean: true, 16 | tsconfigOverride: { 17 | compilerOptions: { 18 | declaration: false, 19 | }, 20 | }, 21 | }), 22 | terser(), 23 | 24 | fileSize(), 25 | ], 26 | }); 27 | 28 | export default { 29 | input: 'src/index.ts', 30 | output: { 31 | file: 'dist/flipping.js', 32 | format: 'umd', 33 | name: 'Flipping', 34 | }, 35 | plugins: [ 36 | typescript({ 37 | clean: true, 38 | tsconfigOverride: { 39 | compilerOptions: { 40 | declaration: false, 41 | }, 42 | external: ['tslib'], 43 | }, 44 | }), 45 | terser(), 46 | cleanup({ 47 | comments: 'none', 48 | }), 49 | fileSize(), 50 | ], 51 | }; 52 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | interface StyleMap { 2 | readonly [key: string]: string | number; 3 | } 4 | interface Rect extends ClientRect { 5 | readonly top: number; 6 | readonly bottom: number; 7 | readonly left: number; 8 | readonly right: number; 9 | readonly width: number; 10 | readonly height: number; 11 | readonly transform?: string; 12 | } 13 | 14 | export function getRect(element: HTMLElement, ancestor?: HTMLElement): Rect { 15 | const { 16 | top, 17 | bottom, 18 | left, 19 | right, 20 | width, 21 | height 22 | } = element.getBoundingClientRect(); 23 | 24 | const parentRect = ancestor ? ancestor.getBoundingClientRect() : undefined; 25 | 26 | return { 27 | top: top - (parentRect ? parentRect.top : 0), 28 | bottom, 29 | left: left - (parentRect ? parentRect.left : 0), 30 | right, 31 | width, 32 | height, 33 | get transform() { 34 | return getComputedStyle(element).transform || undefined; 35 | } 36 | }; 37 | } 38 | 39 | export function getStyles(element: HTMLElement): StyleMap { 40 | const computedStyle = getComputedStyle(element); 41 | 42 | return { 43 | radius: computedStyle.borderRadius || 0 44 | }; 45 | } 46 | 47 | interface Delta extends Rect { 48 | x: number; 49 | y: number; 50 | widthRatio: number; 51 | heightRatio: number; 52 | } 53 | 54 | const NO_DELTA: Delta = { 55 | x: 0, 56 | y: 0, 57 | top: 0, 58 | bottom: 0, 59 | left: 0, 60 | right: 0, 61 | width: 0, 62 | height: 0, 63 | widthRatio: 1, 64 | heightRatio: 1 65 | }; 66 | 67 | export function getDelta(firstRect: Rect, lastRect: Rect): Delta { 68 | const dx = lastRect.left - firstRect.left; 69 | const dy = lastRect.top - firstRect.top; 70 | const dw = lastRect.width - firstRect.width; 71 | const dh = lastRect.height - firstRect.height; 72 | 73 | return { 74 | x: dx, 75 | y: dy, 76 | top: dy, 77 | bottom: lastRect.bottom - firstRect.bottom, 78 | left: dx, 79 | right: lastRect.right - firstRect.right, 80 | width: dw, 81 | height: dh, 82 | widthRatio: lastRect.width / firstRect.width, 83 | heightRatio: lastRect.height / firstRect.height 84 | }; 85 | } 86 | 87 | export function getInverse(delta: Delta): Delta { 88 | return { 89 | x: -1 * delta.x, 90 | y: -1 * delta.y, 91 | top: -1 * delta.top, 92 | bottom: -1 * delta.bottom, 93 | left: -1 * delta.left, 94 | right: -1 * delta.right, 95 | width: -1 * delta.width, 96 | height: -1 * delta.height, 97 | widthRatio: 1 / delta.widthRatio, 98 | heightRatio: 1 / delta.heightRatio 99 | }; 100 | } 101 | type FlipData = { 102 | state: 103 | | 'read' 104 | | 'pre-enter' 105 | | 'enter' 106 | | 'pre-move' 107 | | 'move' 108 | | 'pre-exit' 109 | | 'exit'; 110 | key: string; 111 | element: HTMLElement | undefined; 112 | rect: Rect | undefined; 113 | styles: StyleMap | undefined; 114 | delta: Delta; 115 | inverse: Delta; 116 | previous: FlipData | undefined; 117 | }; 118 | 119 | type FlipElementMap = Record; 120 | 121 | type FlipListener = (data: FlipData) => void; 122 | 123 | export function isVisible(element?: HTMLElement) { 124 | if (!element) { 125 | return false; 126 | } 127 | 128 | const { width, height } = getRect(element); 129 | 130 | return !(width === 0 && height === 0); 131 | } 132 | 133 | interface FlippingConfig { 134 | getKey: ((element: HTMLElement) => string | null | undefined) | string; 135 | } 136 | export class Flipping { 137 | public data: Record = {}; 138 | public listeners: Map = new Map(); 139 | public globalListeners: Set = new Set(); 140 | public config: FlippingConfig; 141 | public static prefix = 'flip'; 142 | public static keyAttr = 'data-flip-key'; 143 | 144 | public static defaultConfig = { 145 | getKey(element: Element): string { 146 | const key = element.getAttribute(Flipping.keyAttr); 147 | 148 | if (!key) { 149 | // tslint:disable-next-line:no-console 150 | console.error(`No flip key found for element:`, element); 151 | throw new Error(`Missing flip key for element`); 152 | } 153 | 154 | return key; 155 | } 156 | }; 157 | 158 | public static create(config: FlippingConfig = Flipping.defaultConfig) { 159 | return new Flipping(config); 160 | } 161 | 162 | constructor(config: FlippingConfig = Flipping.defaultConfig) { 163 | this.config = { 164 | ...Flipping.defaultConfig, 165 | ...config 166 | }; 167 | } 168 | 169 | public onFlip(globalListener: FlipListener): void { 170 | this.globalListeners.add(globalListener); 171 | } 172 | 173 | private findAncestor(element: HTMLElement): HTMLElement | undefined { 174 | let currentParent = element.parentElement; 175 | 176 | while (currentParent && !currentParent.hasAttribute(Flipping.keyAttr)) { 177 | currentParent = currentParent.parentElement; 178 | } 179 | 180 | return currentParent || undefined; 181 | } 182 | 183 | private set(key: string, data: FlipData): void { 184 | this.data[key] = data; 185 | 186 | this.globalListeners.forEach(listener => { 187 | listener(data); 188 | }); 189 | 190 | if (data.element) { 191 | data.element.dataset.flipState = data.state; 192 | } else if (data.previous && data.previous.element) { 193 | data.previous.element.dataset.flipState = data.state; 194 | } 195 | if (!data.rect || !data.styles) { 196 | return; 197 | } 198 | 199 | const distX = Math.abs(data.delta.left); 200 | const distY = Math.abs(data.delta.top); 201 | 202 | // const h = Math.hypot(distX, distY); 203 | // const arm = h / 2 / Math.cos(Math.atan(distX / distY)); 204 | // const arm2 = (distX + distY) / 2; 205 | // const armRatio = arm / distY; 206 | // const theta = Math.asin(h / 2 / arm) * 2; 207 | 208 | const inverseXY = `translate(${data.inverse.left}px, ${ 209 | data.inverse.top 210 | }px)`; 211 | const inverseScale = `scale(${data.inverse.widthRatio}, ${ 212 | data.inverse.heightRatio 213 | })`; 214 | 215 | // const s = `translateY(${data.inverse.top * 216 | // armRatio}px) rotate(${-theta}rad) translateY(${data.delta.top * 217 | // armRatio}px) rotate(${theta}rad)`; 218 | 219 | // const ss = `translateY(${data.inverse.top * 220 | // armRatio}px) rotate(0deg) translateY(${data.delta.top * 221 | // armRatio}px) rotate(0deg)`; 222 | 223 | const a = `translate(${data.inverse.left + data.inverse.top}px, ${ 224 | data.inverse.top 225 | }px) rotate(-90deg) translateY(${ 226 | data.delta.top 227 | }px) rotate(90deg) ${inverseScale}`; 228 | const aa = `translate(${data.inverse.left + data.inverse.top}px, ${ 229 | data.inverse.top 230 | }px) rotate(0deg) translate(${data.delta.left + data.delta.top}px, ${ 231 | data.delta.top 232 | }px) rotate(0deg) scale(1)`; 233 | 234 | Flipping.style( 235 | data, 236 | { 237 | // position 238 | x: data.rect.left, 239 | y: data.rect.top, 240 | // delta 241 | dx: data.delta.left, 242 | dy: data.delta.top, 243 | // inverse delta 244 | ix: data.inverse.left, 245 | iy: data.inverse.top, 246 | 'inverse-xy': inverseXY, 247 | // scale 248 | iw: data.inverse.width, 249 | ih: data.inverse.height, 250 | 'iw-ratio': data.inverse.widthRatio, 251 | 'ih-ratio': data.inverse.heightRatio, 252 | 'inverse-scale': inverseScale, 253 | // distance 254 | 'distance-x': distX, 255 | 'distance-y': distY, 256 | distance: Math.hypot(distX, distY), 257 | // radius 258 | 'inverse-radius-x': `calc((${data.styles.radius} * ${ 259 | data.delta.widthRatio 260 | }))`, 261 | 'inverse-radius-y': `calc((${data.styles.radius} * ${ 262 | data.delta.heightRatio 263 | }))`, 264 | 'inverse-radius': `var(--flip-inverse-radius-x) / var(--flip-inverse-radius-y)`, 265 | // curve 266 | curve: a, 267 | fcurve: aa 268 | }, 269 | { px: true } 270 | ); 271 | } 272 | 273 | public static style( 274 | data: FlipData, 275 | styles: Record, 276 | options?: Partial<{ px: boolean }> // TODO 277 | ): void { 278 | const { element } = data; 279 | 280 | if (!element) { 281 | return; 282 | } 283 | 284 | const resolvedOptions = { px: true, ...options }; 285 | 286 | Object.keys(styles).forEach(property => { 287 | const fullProperty = `--${Flipping.prefix + '-' + property}`; 288 | const value = `${styles[property]}`; 289 | element.style.setProperty(fullProperty, value); 290 | 291 | if (resolvedOptions.px && !isNaN(+fullProperty)) { 292 | element.style.setProperty(`${fullProperty}-px`, `${value}px`); 293 | } 294 | }); 295 | } 296 | 297 | private toElementMap( 298 | elements: HTMLElement[] | FlipElementMap | undefined 299 | ): FlipElementMap { 300 | if (!elements) { 301 | elements = (Array.from( 302 | document.querySelectorAll(`[${Flipping.keyAttr}]`) 303 | ) as HTMLElement[]).filter(el => isVisible(el)); 304 | } 305 | const map: FlipElementMap = {}; 306 | 307 | if (Array.isArray(elements)) { 308 | elements.forEach(element => { 309 | const key = 310 | typeof this.config.getKey === 'string' 311 | ? element.getAttribute(this.config.getKey) 312 | : this.config.getKey(element); 313 | 314 | if (!key) { 315 | return; 316 | } 317 | 318 | map[key] = element; 319 | }); 320 | 321 | return map; 322 | } 323 | 324 | return elements; 325 | } 326 | 327 | public read(elements?: HTMLElement[] | FlipElementMap): void { 328 | const elementMap = this.toElementMap(elements); 329 | Object.keys(elementMap).forEach(key => { 330 | const element = elementMap[key]; 331 | const previous = this.data[key]; 332 | 333 | if (!element) { 334 | return; 335 | } 336 | 337 | this.set(key, { 338 | key, 339 | element, 340 | state: 'read', 341 | rect: getRect(element, this.findAncestor(element)), 342 | styles: getStyles(element), 343 | delta: NO_DELTA, 344 | inverse: NO_DELTA, 345 | previous 346 | }); 347 | }); 348 | } 349 | 350 | public flip(elements?: HTMLElement[]) { 351 | const elementMap = this.toElementMap(elements); 352 | const allKeys = new Set( 353 | Object.keys(this.data).concat(Object.keys(elementMap)) 354 | ); 355 | 356 | allKeys.forEach(key => { 357 | const element = elementMap[key]; 358 | let data: FlipData; 359 | const existingData = this.data[key]; 360 | 361 | const visible = isVisible(element); 362 | 363 | if (!element || !visible) { 364 | data = { 365 | key, 366 | element, 367 | state: 'exit', 368 | rect: undefined, 369 | styles: undefined, 370 | delta: NO_DELTA, 371 | inverse: NO_DELTA, 372 | previous: existingData 373 | }; 374 | } else if (!existingData && element && visible) { 375 | data = { 376 | key, 377 | element, 378 | state: 'enter', 379 | rect: getRect(element, this.findAncestor(element)), 380 | styles: getStyles(element), 381 | delta: NO_DELTA, 382 | inverse: NO_DELTA, 383 | previous: undefined 384 | }; 385 | } else if (existingData && element && visible) { 386 | const delta = existingData.rect 387 | ? getDelta( 388 | existingData.rect, 389 | getRect(element, this.findAncestor(element)) 390 | ) 391 | : NO_DELTA; 392 | // console.log(existingData, getRect(element), delta); 393 | data = { 394 | key, 395 | element, 396 | state: 397 | existingData.state === 'exit' 398 | ? visible 399 | ? 'enter' 400 | : 'exit' 401 | : visible 402 | ? 'move' 403 | : 'exit', 404 | rect: getRect(element, this.findAncestor(element)), 405 | styles: getStyles(element), 406 | delta, 407 | inverse: getInverse(delta), 408 | previous: existingData 409 | }; 410 | } 411 | 412 | requestAnimationFrame(() => { 413 | this.set(key, { 414 | ...data, 415 | state: `pre-${data.state}` as 'pre-enter' | 'pre-move' | 'pre-exit' 416 | }); 417 | 418 | requestAnimationFrame(() => { 419 | this.set(key, data); 420 | }); 421 | }); 422 | }); 423 | } 424 | public wrap( 425 | fn: (...args: any[]) => T, 426 | elements?: HTMLElement[] 427 | ): (...args: any[]) => T { 428 | return (...args) => { 429 | this.read(elements); 430 | const result = fn.apply(null, args) as T; 431 | this.flip(elements); 432 | return result; 433 | }; 434 | } 435 | public applyDefaultStyles() { 436 | const styles = ` 437 | [data-flip-state] { 438 | will-change: transform; 439 | } 440 | [data-flip-state="read"] { 441 | transition: none; 442 | } 443 | [data-flip-state="pre-move"] { 444 | transition: none; 445 | transform: var(--flip-inverse-xy); 446 | --clip-path: polygon(0% 0%, calc(var(--flip-iw-ratio) * 100%) 0, calc(var(--flip-iw-ratio) * 100%) calc(var(--flip-ih-ratio) * 100%), 0 calc(var(--flip-ih-ratio) * 100%)); 447 | } 448 | [data-flip-state="move"] { 449 | transition: all .6s ease; 450 | transform: none; 451 | --clip-path: polygon(0% 0%, 100% 0, 100% 100%, 0 100%); 452 | } 453 | `; 454 | 455 | const elStyle = document.createElement('style'); 456 | elStyle.innerHTML = styles; 457 | document.head.appendChild(elStyle); 458 | } 459 | } 460 | 461 | export const create = Flipping.create; 462 | -------------------------------------------------------------------------------- /test/flipping.test.ts: -------------------------------------------------------------------------------- 1 | import Flipping from '../src/flipping'; 2 | import { assert } from 'chai'; 3 | 4 | (global as any).getComputedStyle = () => ({}); 5 | 6 | declare type Element = { 7 | getAttribute: (attr: string) => string; 8 | hasAttribute: (attr: string) => boolean; 9 | getBoundingClientRect: () => IRect; 10 | _setRect: (rect: IRect) => void; 11 | }; 12 | 13 | function mockGetBounds(element: Element) { 14 | return { 15 | ...element.getBoundingClientRect() 16 | }; 17 | } 18 | 19 | interface IRect { 20 | top: number; 21 | left: number; 22 | width: number; 23 | height: number; 24 | } 25 | 26 | function createMockElement(key: string, rect: IRect): Element { 27 | let currentRect = rect; 28 | 29 | return { 30 | getAttribute() { 31 | return key; 32 | }, 33 | hasAttribute() { 34 | return false; 35 | }, 36 | getBoundingClientRect() { 37 | return currentRect; 38 | }, 39 | _setRect(newRect: IRect) { 40 | currentRect = newRect; 41 | } 42 | }; 43 | } 44 | 45 | function createMockFlip(element: Element, options) { 46 | return new Flipping({ 47 | selector: () => [element as Element], 48 | getBounds: mockGetBounds, 49 | parent: createMockElement('parent', { 50 | top: 0, 51 | left: 0, 52 | width: 1000, 53 | height: 1000 54 | }), 55 | ...options 56 | }); 57 | } 58 | 59 | describe('Flipping', () => { 60 | it('should exist', () => { 61 | assert.isFunction(Flipping); 62 | }); 63 | 64 | describe('reading', () => { 65 | it('should provide the current bounds of the element', done => { 66 | const mockElement = createMockElement('test', { 67 | top: 0, 68 | left: 0, 69 | width: 10, 70 | height: 10 71 | }); 72 | const MockFlip = createMockFlip(mockElement, { 73 | onRead: states => { 74 | assert.deepEqual( 75 | states.test.bounds, 76 | mockElement.getBoundingClientRect() 77 | ); 78 | done(); 79 | } 80 | }); 81 | 82 | MockFlip.read(); 83 | }); 84 | }); 85 | 86 | describe('flipping', () => { 87 | it('should provide the correct first, last and delta of the element', done => { 88 | const mockElement = createMockElement('test', { 89 | top: 0, 90 | left: 0, 91 | width: 100, 92 | height: 100 93 | }); 94 | const MockFlip = createMockFlip(mockElement, { 95 | onFlip: states => { 96 | assert.deepEqual( 97 | states.test.previous.bounds, 98 | { 99 | top: 0, 100 | left: 0, 101 | height: 100, 102 | width: 100 103 | }, 104 | 'previous bounds should be correct' 105 | ); 106 | assert.deepEqual( 107 | states.test.bounds, 108 | { 109 | top: 20, 110 | left: 30, 111 | height: 200, 112 | width: 400 113 | }, 114 | 'bounds should be correct' 115 | ); 116 | assert.deepEqual( 117 | states.test.delta, 118 | { 119 | top: -20, 120 | left: -30, 121 | height: 0.5, 122 | width: 0.25 123 | }, 124 | 'delta should be correct' 125 | ); 126 | done(); 127 | } 128 | }); 129 | 130 | MockFlip.read(); 131 | 132 | mockElement._setRect({ 133 | top: 20, 134 | left: 30, 135 | height: 200, 136 | width: 400 137 | }); 138 | 139 | MockFlip.flip(); 140 | }); 141 | }); 142 | 143 | describe('progress', () => { 144 | it('should calculate fractional delta', () => { 145 | const delta = { 146 | top: 10, 147 | left: 20, 148 | width: 2, 149 | height: 3 150 | }; 151 | const halfProgress = Flipping.progress(delta, 0.5); 152 | assert.deepEqual(halfProgress, { 153 | top: 5, 154 | left: 10, 155 | width: 1, 156 | height: 1.5 157 | }); 158 | }); 159 | 160 | it('should return zero delta if not moved', () => { 161 | const halfProgress = Flipping.progress(undefined, 0.5); 162 | assert.deepEqual(halfProgress, { 163 | top: 0, 164 | left: 0, 165 | width: 1, 166 | height: 1 167 | }); 168 | }); 169 | }); 170 | }); 171 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "ES2015", 4 | "declaration": true, 5 | "lib": ["es2015", "dom", "dom.iterable"], 6 | "types": ["mocha", "node"], 7 | "target": "es5", 8 | "noUnusedLocals": true, 9 | "noUnusedParameters": true, 10 | "strictNullChecks": true, 11 | "outDir": "./lib", 12 | "esModuleInterop": true 13 | }, 14 | "include": ["src/**/*"] 15 | } 16 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-unused-expression": true, 4 | "no-duplicate-variable": true, 5 | "no-unused-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": ["always"], 9 | "triple-equals": true, 10 | "no-console": [ 11 | true 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /typings.json: -------------------------------------------------------------------------------- 1 | { 2 | "globalDependencies": { 3 | "mocha": "registry:dt/mocha#2.2.5+20170311011848" 4 | }, 5 | "dependencies": { 6 | "chai": "registry:npm/chai#3.5.0+20160723033700" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /typings/globals/mocha/index.d.ts: -------------------------------------------------------------------------------- 1 | // Generated by typings 2 | // Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/82878f6116d4b7a56f070c59cbc022ce17fe4fdd/mocha/index.d.ts 3 | interface MochaSetupOptions { 4 | //milliseconds to wait before considering a test slow 5 | slow?: number; 6 | 7 | // timeout in milliseconds 8 | timeout?: number; 9 | 10 | // ui name "bdd", "tdd", "exports" etc 11 | ui?: string; 12 | 13 | //array of accepted globals 14 | globals?: any[]; 15 | 16 | // reporter instance (function or string), defaults to `mocha.reporters.Spec` 17 | reporter?: any; 18 | 19 | // bail on the first test failure 20 | bail?: boolean; 21 | 22 | // ignore global leaks 23 | ignoreLeaks?: boolean; 24 | 25 | // grep string or regexp to filter tests with 26 | grep?: any; 27 | } 28 | 29 | declare var mocha: Mocha; 30 | declare var describe: Mocha.IContextDefinition; 31 | declare var xdescribe: Mocha.IContextDefinition; 32 | // alias for `describe` 33 | declare var context: Mocha.IContextDefinition; 34 | // alias for `describe` 35 | declare var suite: Mocha.IContextDefinition; 36 | declare var it: Mocha.ITestDefinition; 37 | declare var xit: Mocha.ITestDefinition; 38 | // alias for `it` 39 | declare var test: Mocha.ITestDefinition; 40 | declare var specify: Mocha.ITestDefinition; 41 | 42 | // Used with the --delay flag; see https://mochajs.org/#hooks 43 | declare function run(): void; 44 | 45 | interface MochaDone { 46 | (error?: any): any; 47 | } 48 | 49 | declare function setup(callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 50 | declare function teardown(callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 51 | declare function suiteSetup(callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 52 | declare function suiteTeardown(callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 53 | declare function before(callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 54 | declare function before(description: string, callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 55 | declare function after(callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 56 | declare function after(description: string, callback: (this: Mocha.IHookCallbackContext, done: MochaDone) => any): void; 57 | declare function beforeEach(callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 58 | declare function beforeEach(description: string, callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 59 | declare function afterEach(callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 60 | declare function afterEach(description: string, callback: (this: Mocha.IBeforeAndAfterContext, done: MochaDone) => any): void; 61 | 62 | declare class Mocha { 63 | currentTest: Mocha.ITestDefinition; 64 | constructor(options?: { 65 | grep?: RegExp; 66 | ui?: string; 67 | reporter?: string; 68 | timeout?: number; 69 | reporterOptions?: any; 70 | slow?: number; 71 | bail?: boolean; 72 | }); 73 | 74 | /** Setup mocha with the given options. */ 75 | setup(options: MochaSetupOptions): Mocha; 76 | bail(value?: boolean): Mocha; 77 | addFile(file: string): Mocha; 78 | /** Sets reporter by name, defaults to "spec". */ 79 | reporter(name: string): Mocha; 80 | /** Sets reporter constructor, defaults to mocha.reporters.Spec. */ 81 | reporter(reporter: (runner: Mocha.IRunner, options: any) => any): Mocha; 82 | ui(value: string): Mocha; 83 | grep(value: string): Mocha; 84 | grep(value: RegExp): Mocha; 85 | invert(): Mocha; 86 | ignoreLeaks(value: boolean): Mocha; 87 | checkLeaks(): Mocha; 88 | /** 89 | * Function to allow assertion libraries to throw errors directly into mocha. 90 | * This is useful when running tests in a browser because window.onerror will 91 | * only receive the 'message' attribute of the Error. 92 | */ 93 | throwError(error: Error): void; 94 | /** Enables growl support. */ 95 | growl(): Mocha; 96 | globals(value: string): Mocha; 97 | globals(values: string[]): Mocha; 98 | useColors(value: boolean): Mocha; 99 | useInlineDiffs(value: boolean): Mocha; 100 | timeout(value: number): Mocha; 101 | slow(value: number): Mocha; 102 | enableTimeouts(value: boolean): Mocha; 103 | asyncOnly(value: boolean): Mocha; 104 | noHighlighting(value: boolean): Mocha; 105 | /** Runs tests and invokes `onComplete()` when finished. */ 106 | run(onComplete?: (failures: number) => void): Mocha.IRunner; 107 | } 108 | 109 | // merge the Mocha class declaration with a module 110 | declare namespace Mocha { 111 | interface ISuiteCallbackContext { 112 | timeout(ms: number): this; 113 | retries(n: number): this; 114 | slow(ms: number): this; 115 | } 116 | 117 | interface IHookCallbackContext { 118 | skip(): this; 119 | timeout(ms: number): this; 120 | [index: string]: any; 121 | } 122 | 123 | 124 | interface ITestCallbackContext { 125 | skip(): this; 126 | timeout(ms: number): this; 127 | retries(n: number): this; 128 | slow(ms: number): this; 129 | [index: string]: any; 130 | } 131 | 132 | /** Partial interface for Mocha's `Runnable` class. */ 133 | interface IRunnable { 134 | title: string; 135 | fn: Function; 136 | async: boolean; 137 | sync: boolean; 138 | timedOut: boolean; 139 | } 140 | 141 | /** Partial interface for Mocha's `Suite` class. */ 142 | interface ISuite { 143 | parent: ISuite; 144 | title: string; 145 | 146 | fullTitle(): string; 147 | } 148 | 149 | /** Partial interface for Mocha's `Test` class. */ 150 | interface ITest extends IRunnable { 151 | parent: ISuite; 152 | pending: boolean; 153 | state: 'failed'|'passed'|undefined; 154 | 155 | fullTitle(): string; 156 | } 157 | 158 | interface IBeforeAndAfterContext extends IHookCallbackContext { 159 | currentTest: ITest; 160 | } 161 | 162 | 163 | /** Partial interface for Mocha's `Runner` class. */ 164 | interface IRunner { } 165 | 166 | interface IContextDefinition { 167 | (description: string, callback: (this: ISuiteCallbackContext) => void): ISuite; 168 | only(description: string, callback: (this: ISuiteCallbackContext) => void): ISuite; 169 | skip(description: string, callback: (this: ISuiteCallbackContext) => void): void; 170 | timeout(ms: number): void; 171 | } 172 | 173 | interface ITestDefinition { 174 | (expectation: string, callback?: (this: ITestCallbackContext, done: MochaDone) => any): ITest; 175 | only(expectation: string, callback?: (this: ITestCallbackContext, done: MochaDone) => any): ITest; 176 | skip(expectation: string, callback?: (this: ITestCallbackContext, done: MochaDone) => any): void; 177 | timeout(ms: number): void; 178 | state: "failed" | "passed"; 179 | } 180 | 181 | export module reporters { 182 | export class Base { 183 | stats: { 184 | suites: number; 185 | tests: number; 186 | passes: number; 187 | pending: number; 188 | failures: number; 189 | }; 190 | 191 | constructor(runner: IRunner); 192 | } 193 | 194 | export class Doc extends Base { } 195 | export class Dot extends Base { } 196 | export class HTML extends Base { } 197 | export class HTMLCov extends Base { } 198 | export class JSON extends Base { } 199 | export class JSONCov extends Base { } 200 | export class JSONStream extends Base { } 201 | export class Landing extends Base { } 202 | export class List extends Base { } 203 | export class Markdown extends Base { } 204 | export class Min extends Base { } 205 | export class Nyan extends Base { } 206 | export class Progress extends Base { 207 | /** 208 | * @param options.open String used to indicate the start of the progress bar. 209 | * @param options.complete String used to indicate a complete test on the progress bar. 210 | * @param options.incomplete String used to indicate an incomplete test on the progress bar. 211 | * @param options.close String used to indicate the end of the progress bar. 212 | */ 213 | constructor(runner: IRunner, options?: { 214 | open?: string; 215 | complete?: string; 216 | incomplete?: string; 217 | close?: string; 218 | }); 219 | } 220 | export class Spec extends Base { } 221 | export class TAP extends Base { } 222 | export class XUnit extends Base { 223 | constructor(runner: IRunner, options?: any); 224 | } 225 | } 226 | } 227 | 228 | declare module "mocha" { 229 | export = Mocha; 230 | } 231 | -------------------------------------------------------------------------------- /typings/globals/mocha/typings.json: -------------------------------------------------------------------------------- 1 | { 2 | "resolution": "main", 3 | "tree": { 4 | "src": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/82878f6116d4b7a56f070c59cbc022ce17fe4fdd/mocha/index.d.ts", 5 | "raw": "registry:dt/mocha#2.2.5+20170311011848", 6 | "typings": "https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/82878f6116d4b7a56f070c59cbc022ce17fe4fdd/mocha/index.d.ts" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /typings/index.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /typings/modules/chai/index.d.ts: -------------------------------------------------------------------------------- 1 | // Generated by typings 2 | // Source: https://raw.githubusercontent.com/typed-typings/npm-assertion-error/105841317bd2bdd5d110bfb763e49e482a77230d/main.d.ts 3 | declare module '~chai~assertion-error/main' { 4 | // Type definitions for assertion-error 1.0.0 5 | // Project: https://github.com/chaijs/assertion-error 6 | // Definitions by: Bart van der Schoor 7 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 8 | 9 | export class AssertionError implements Error { 10 | constructor(message: string, props?: any, ssf?: Function); 11 | public name: string; 12 | public message: string; 13 | public showDiff: boolean; 14 | public stack: string; 15 | 16 | /** 17 | * Allow errors to be converted to JSON for static transfer. 18 | * 19 | * @param {Boolean} include stack (default: `true`) 20 | * @return {Object} object that can be `JSON.stringify` 21 | */ 22 | public toJSON(stack: boolean): Object; 23 | } 24 | } 25 | 26 | // Generated by typings 27 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Assert.d.ts 28 | declare module '~chai/lib/Assert' { 29 | export interface AssertStatic extends Assert { 30 | } 31 | 32 | export interface Assert { 33 | /** 34 | * @param expression Expression to test for truthiness. 35 | * @param message Message to display on error. 36 | */ 37 | (expression: any, message?: string): void; 38 | (expression: any, messageCallback: () => string): void; 39 | 40 | fail(actual?: any, expected?: any, msg?: string, operator?: string): void; 41 | 42 | ok(val: any, msg?: string): void; 43 | isOk(val: any, msg?: string): void; 44 | notOk(val: any, msg?: string): void; 45 | isNotOk(val: any, msg?: string): void; 46 | 47 | equal(act: any, exp: any, msg?: string): void; 48 | notEqual(act: any, exp: any, msg?: string): void; 49 | 50 | strictEqual(act: any, exp: any, msg?: string): void; 51 | notStrictEqual(act: any, exp: any, msg?: string): void; 52 | 53 | deepEqual(act: any, exp: any, msg?: string): void; 54 | notDeepEqual(act: any, exp: any, msg?: string): void; 55 | 56 | isTrue(val: any, msg?: string): void; 57 | isFalse(val: any, msg?: string): void; 58 | 59 | isNotTrue(val: any, msg?: string): void; 60 | isNotFalse(val: any, msg?: string): void; 61 | 62 | isNull(val: any, msg?: string): void; 63 | isNotNull(val: any, msg?: string): void; 64 | 65 | isUndefined(val: any, msg?: string): void; 66 | isDefined(val: any, msg?: string): void; 67 | 68 | isNaN(val: any, msg?: string): void; 69 | isNotNaN(val: any, msg?: string): void; 70 | 71 | isAbove(val: number, abv: number, msg?: string): void; 72 | isBelow(val: number, blw: number, msg?: string): void; 73 | 74 | isAtLeast(val: number, atlst: number, msg?: string): void; 75 | isAtMost(val: number, atmst: number, msg?: string): void; 76 | 77 | isFunction(val: any, msg?: string): void; 78 | isNotFunction(val: any, msg?: string): void; 79 | 80 | isObject(val: any, msg?: string): void; 81 | isNotObject(val: any, msg?: string): void; 82 | 83 | isArray(val: any, msg?: string): void; 84 | isNotArray(val: any, msg?: string): void; 85 | 86 | isString(val: any, msg?: string): void; 87 | isNotString(val: any, msg?: string): void; 88 | 89 | isNumber(val: any, msg?: string): void; 90 | isNotNumber(val: any, msg?: string): void; 91 | 92 | isBoolean(val: any, msg?: string): void; 93 | isNotBoolean(val: any, msg?: string): void; 94 | 95 | typeOf(val: any, type: string, msg?: string): void; 96 | notTypeOf(val: any, type: string, msg?: string): void; 97 | 98 | instanceOf(val: any, type: Function, msg?: string): void; 99 | notInstanceOf(val: any, type: Function, msg?: string): void; 100 | 101 | include(exp: string, inc: any, msg?: string): void; 102 | include(exp: any[], inc: any, msg?: string): void; 103 | include(exp: Object, inc: Object, msg?: string): void; 104 | 105 | notInclude(exp: string, inc: any, msg?: string): void; 106 | notInclude(exp: any[], inc: any, msg?: string): void; 107 | 108 | match(exp: any, re: RegExp, msg?: string): void; 109 | notMatch(exp: any, re: RegExp, msg?: string): void; 110 | 111 | property(obj: Object, prop: string, msg?: string): void; 112 | notProperty(obj: Object, prop: string, msg?: string): void; 113 | deepProperty(obj: Object, prop: string, msg?: string): void; 114 | notDeepProperty(obj: Object, prop: string, msg?: string): void; 115 | 116 | propertyVal(obj: Object, prop: string, val: any, msg?: string): void; 117 | propertyNotVal(obj: Object, prop: string, val: any, msg?: string): void; 118 | 119 | deepPropertyVal(obj: Object, prop: string, val: any, msg?: string): void; 120 | deepPropertyNotVal(obj: Object, prop: string, val: any, msg?: string): void; 121 | 122 | lengthOf(exp: any, len: number, msg?: string): void; 123 | 124 | throw(fn: Function, msg?: string): void; 125 | throw(fn: Function, regExp: RegExp): void; 126 | throw(fn: Function, errType: Function, msg?: string): void; 127 | throw(fn: Function, errType: Function, regExp: RegExp): void; 128 | 129 | throws(fn: Function, msg?: string): void; 130 | throws(fn: Function, regExp: RegExp): void; 131 | throws(fn: Function, errType: Function, msg?: string): void; 132 | throws(fn: Function, errType: Function, regExp: RegExp): void; 133 | 134 | Throw(fn: Function, msg?: string): void; 135 | Throw(fn: Function, regExp: RegExp): void; 136 | Throw(fn: Function, errType: Function, msg?: string): void; 137 | Throw(fn: Function, errType: Function, regExp: RegExp): void; 138 | 139 | doesNotThrow(fn: Function, msg?: string): void; 140 | doesNotThrow(fn: Function, regExp: RegExp): void; 141 | doesNotThrow(fn: Function, errType: Function, msg?: string): void; 142 | doesNotThrow(fn: Function, errType: Function, regExp: RegExp): void; 143 | 144 | operator(val: any, operator: string, val2: any, msg?: string): void; 145 | closeTo(act: number, exp: number, delta: number, msg?: string): void; 146 | approximately(act: number, exp: number, delta: number, msg?: string): void; 147 | 148 | sameMembers(set1: any[], set2: any[], msg?: string): void; 149 | sameDeepMembers(set1: any[], set2: any[], msg?: string): void; 150 | includeMembers(superset: any[], subset: any[], msg?: string): void; 151 | includeDeepMembers(superset: any[], subset: any[], msg?: string): void; 152 | 153 | ifError(val: any, msg?: string): void; 154 | 155 | isExtensible(obj: {}, msg?: string): void; 156 | extensible(obj: {}, msg?: string): void; 157 | isNotExtensible(obj: {}, msg?: string): void; 158 | notExtensible(obj: {}, msg?: string): void; 159 | 160 | isSealed(obj: {}, msg?: string): void; 161 | sealed(obj: {}, msg?: string): void; 162 | isNotSealed(obj: {}, msg?: string): void; 163 | notSealed(obj: {}, msg?: string): void; 164 | 165 | isFrozen(obj: Object, msg?: string): void; 166 | frozen(obj: Object, msg?: string): void; 167 | isNotFrozen(obj: Object, msg?: string): void; 168 | notFrozen(obj: Object, msg?: string): void; 169 | 170 | oneOf(inList: any, list: any[], msg?: string): void; 171 | 172 | changes(fn: Function, obj: {}, property: string): void; 173 | doesNotChange(fn: Function, obj: {}, property: string): void; 174 | increases(fn: Function, obj: {}, property: string): void; 175 | doesNotIncrease(fn: Function, obj: {}, property: string): void; 176 | 177 | decreases(fn: Function, obj: {}, property: string): void; 178 | doesNotDecrease(fn: Function, obj: {}, property: string): void; 179 | } 180 | } 181 | declare module 'chai/lib/Assert' { 182 | export * from '~chai/lib/Assert'; 183 | } 184 | 185 | // Generated by typings 186 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Assertion.d.ts 187 | declare module '~chai/lib/Assertion' { 188 | export interface AssertionStatic { 189 | (target?: any, message?: string, stack?: Function): Assertion; 190 | new (target?: any, message?: string, stack?: Function): Assertion; 191 | } 192 | 193 | export interface Assertion extends LanguageChains, NumericComparison, TypeComparison { 194 | not: Assertion; 195 | deep: Deep; 196 | any: KeyFilter; 197 | all: KeyFilter; 198 | a: TypeComparison; 199 | an: TypeComparison; 200 | include: Include; 201 | includes: Include; 202 | contain: Include; 203 | contains: Include; 204 | ok: Assertion; 205 | true: Assertion; 206 | false: Assertion; 207 | null: Assertion; 208 | undefined: Assertion; 209 | NaN: Assertion; 210 | exist: Assertion; 211 | empty: Assertion; 212 | arguments: Assertion; 213 | Arguments: Assertion; 214 | equal: Equal; 215 | equals: Equal; 216 | eq: Equal; 217 | eql: Equal; 218 | eqls: Equal; 219 | property: Property; 220 | ownProperty: OwnProperty; 221 | haveOwnProperty: OwnProperty; 222 | ownPropertyDescriptor: OwnPropertyDescriptor; 223 | haveOwnPropertyDescriptor: OwnPropertyDescriptor; 224 | length: Length; 225 | lengthOf: Length; 226 | match: Match; 227 | matches: Match; 228 | string(str: string, message?: string): Assertion; 229 | keys: Keys; 230 | key(str: string): Assertion; 231 | throw: Throw; 232 | throws: Throw; 233 | Throw: Throw; 234 | respondTo: RespondTo; 235 | respondsTo: RespondTo; 236 | itself: Assertion; 237 | satisfy: Satisfy; 238 | satisfies: Satisfy; 239 | closeTo: CloseTo; 240 | approximately: CloseTo; 241 | members: Members; 242 | increase: PropertyChange; 243 | increases: PropertyChange; 244 | decrease: PropertyChange; 245 | decreases: PropertyChange; 246 | change: PropertyChange; 247 | changes: PropertyChange; 248 | extensible: Assertion; 249 | sealed: Assertion; 250 | frozen: Assertion; 251 | oneOf(list: any[], message?: string): Assertion; 252 | } 253 | 254 | export interface LanguageChains { 255 | to: Assertion; 256 | be: Assertion; 257 | been: Assertion; 258 | is: Assertion; 259 | that: Assertion; 260 | which: Assertion; 261 | and: Assertion; 262 | has: Assertion; 263 | have: Assertion; 264 | with: Assertion; 265 | at: Assertion; 266 | of: Assertion; 267 | same: Assertion; 268 | } 269 | 270 | export interface NumericComparison { 271 | above: NumberComparer; 272 | gt: NumberComparer; 273 | greaterThan: NumberComparer; 274 | least: NumberComparer; 275 | gte: NumberComparer; 276 | below: NumberComparer; 277 | lt: NumberComparer; 278 | lessThan: NumberComparer; 279 | most: NumberComparer; 280 | lte: NumberComparer; 281 | within(start: number, finish: number, message?: string): Assertion; 282 | } 283 | 284 | export interface NumberComparer { 285 | (value: number, message?: string): Assertion; 286 | } 287 | 288 | export interface TypeComparison { 289 | (type: string, message?: string): Assertion; 290 | instanceof: InstanceOf; 291 | instanceOf: InstanceOf; 292 | } 293 | 294 | export interface InstanceOf { 295 | (constructor: Object, message?: string): Assertion; 296 | } 297 | 298 | export interface CloseTo { 299 | (expected: number, delta: number, message?: string): Assertion; 300 | } 301 | 302 | export interface Deep { 303 | equal: Equal; 304 | equals: Equal; 305 | eq: Equal; 306 | include: Include; 307 | property: Property; 308 | members: Members; 309 | } 310 | 311 | export interface KeyFilter { 312 | keys: Keys; 313 | } 314 | 315 | export interface Equal { 316 | (value: any, message?: string): Assertion; 317 | } 318 | 319 | export interface Property { 320 | (name: string, value?: any, message?: string): Assertion; 321 | } 322 | 323 | export interface OwnProperty { 324 | (name: string, message?: string): Assertion; 325 | } 326 | 327 | export interface OwnPropertyDescriptor { 328 | (name: string, descriptor: PropertyDescriptor, message?: string): Assertion; 329 | (name: string, message?: string): Assertion; 330 | } 331 | 332 | export interface Length extends LanguageChains, NumericComparison { 333 | (length: number, message?: string): Assertion; 334 | } 335 | 336 | export interface Include { 337 | (value: Object, message?: string): Assertion; 338 | (value: string, message?: string): Assertion; 339 | (value: number, message?: string): Assertion; 340 | string(value: string, message?: string): Assertion; 341 | keys: Keys; 342 | members: Members; 343 | any: KeyFilter; 344 | all: KeyFilter; 345 | } 346 | 347 | export interface Match { 348 | (regexp: RegExp | string, message?: string): Assertion; 349 | } 350 | 351 | export interface Keys { 352 | (...keys: any[]): Assertion; 353 | (keys: any[]): Assertion; 354 | (keys: Object): Assertion; 355 | } 356 | 357 | export interface Throw { 358 | (): Assertion; 359 | (expected: string, message?: string): Assertion; 360 | (expected: RegExp, message?: string): Assertion; 361 | (constructor: Error, expected?: string, message?: string): Assertion; 362 | (constructor: Error, expected?: RegExp, message?: string): Assertion; 363 | (constructor: Function, expected?: string, message?: string): Assertion; 364 | (constructor: Function, expected?: RegExp, message?: string): Assertion; 365 | } 366 | 367 | export interface RespondTo { 368 | (method: string, message?: string): Assertion; 369 | } 370 | 371 | export interface Satisfy { 372 | (matcher: Function, message?: string): Assertion; 373 | } 374 | 375 | export interface Members { 376 | (set: any[], message?: string): Assertion; 377 | } 378 | 379 | export interface PropertyChange { 380 | (object: Object, prop: string, msg?: string): Assertion; 381 | } 382 | } 383 | declare module 'chai/lib/Assertion' { 384 | export * from '~chai/lib/Assertion'; 385 | } 386 | 387 | // Generated by typings 388 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Expect.d.ts 389 | declare module '~chai/lib/Expect' { 390 | import {AssertionStatic} from '~chai/lib/Assertion'; 391 | 392 | export interface ExpectStatic extends AssertionStatic { 393 | fail(actual?: any, expected?: any, message?: string, operator?: string): void; 394 | } 395 | } 396 | declare module 'chai/lib/Expect' { 397 | export * from '~chai/lib/Expect'; 398 | } 399 | 400 | // Generated by typings 401 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Should.d.ts 402 | declare module '~chai/lib/Should' { 403 | export interface Should extends ShouldAssertion { 404 | not: ShouldAssertion; 405 | fail(actual: any, expected: any, message?: string, operator?: string): void; 406 | } 407 | 408 | export interface ShouldAssertion { 409 | Throw: ShouldThrow; 410 | throw: ShouldThrow; 411 | equal(value1: any, value2: any, message?: string): void; 412 | exist(value: any, message?: string): void; 413 | } 414 | 415 | export interface ShouldThrow { 416 | (actual: Function): void; 417 | (actual: Function, expected: string | RegExp, message?: string): void; 418 | (actual: Function, constructor: Error | Function, expected?: string | RegExp, message?: string): void; 419 | } 420 | } 421 | declare module 'chai/lib/Should' { 422 | export * from '~chai/lib/Should'; 423 | } 424 | 425 | // Generated by typings 426 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Config.d.ts 427 | declare module '~chai/lib/Config' { 428 | export interface Config { 429 | includeStack: boolean; 430 | showDiff: boolean; 431 | truncateThreshold: number; 432 | } 433 | } 434 | declare module 'chai/lib/Config' { 435 | export * from '~chai/lib/Config'; 436 | } 437 | 438 | // Generated by typings 439 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Utils.d.ts 440 | declare module '~chai/lib/Utils' { 441 | import {Assertion} from '~chai/lib/Assertion'; 442 | 443 | export interface PathInfo { 444 | parent: any; 445 | name: number|string; 446 | value: any; 447 | exists: boolean; 448 | } 449 | 450 | export interface Utils { 451 | addChainableMethod(ctx: any, name: string, chainingBehavior: (value: any) => void): void; 452 | addMethod(ctx: any, name: string, method: (value: any) => void): void; 453 | addProperty(ctx: any, name: string, getter: () => void): void; 454 | expectTypes(obj: Object, types: string[]): void; 455 | flag(obj: Object, key: string, value?: any): any; 456 | getActual(obj: Object, actual?: any): any; 457 | getEnumerableProperties(obj: Object): string[]; 458 | getMessage(obj: Object, params: any[]): string; 459 | getMessage(obj: Object, message: string, negateMessage: string): string; 460 | getName(func: Function): string; 461 | getPathInfo(path: string, obj: Object): PathInfo; 462 | getPathValue(path: string, obj: Object): any; 463 | getProperties(obj: Object): string[]; 464 | hasProperty(obj: Object, name: string): boolean; 465 | transferFlags(assertion: Assertion | any, obj: Object, includeAll?: boolean): void; 466 | inspect(obj: any): any; 467 | } 468 | } 469 | declare module 'chai/lib/Utils' { 470 | export * from '~chai/lib/Utils'; 471 | } 472 | 473 | // Generated by typings 474 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/lib/Chai.d.ts 475 | declare module '~chai/lib/Chai' { 476 | import * as AE from '~chai~assertion-error/main'; 477 | 478 | import * as Assert from '~chai/lib/Assert'; 479 | import * as A from '~chai/lib/Assertion'; 480 | import * as Expect from '~chai/lib/Expect'; 481 | import * as Should from '~chai/lib/Should'; 482 | import * as Config from '~chai/lib/Config'; 483 | import * as Utils from '~chai/lib/Utils'; 484 | 485 | namespace chai { 486 | export interface AssertionStatic extends A.AssertionStatic {} 487 | export class AssertionError extends AE.AssertionError {} 488 | export var Assertion: A.AssertionStatic; 489 | export var expect: Expect.ExpectStatic; 490 | export var assert: Assert.AssertStatic; 491 | export var config: Config.Config; 492 | export var util: Utils.Utils; 493 | export function should(): Should.Should; 494 | export function Should(): Should.Should; 495 | /** 496 | * Provides a way to extend the internals of Chai 497 | */ 498 | export function use(fn: (chai: any, utils: Utils.Utils) => void): typeof chai; 499 | } 500 | 501 | export = chai; 502 | 503 | /* tslint:disable:no-internal-module */ 504 | global { 505 | interface Object { 506 | should: A.Assertion; 507 | } 508 | } 509 | } 510 | declare module 'chai/lib/Chai' { 511 | import main = require('~chai/lib/Chai'); 512 | export = main; 513 | } 514 | 515 | // Generated by typings 516 | // Source: https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/index.d.ts 517 | declare module 'chai' { 518 | // Type definitions for chai 3.4.0 519 | // Project: http://chaijs.com/ 520 | // Original Definitions by: Jed Mao , 521 | // Bart van der Schoor , 522 | // Andrew Brown , 523 | // Olivier Chevet , 524 | // Matt Wistrand 525 | 526 | import chai = require('~chai/lib/Chai'); 527 | 528 | export = chai; 529 | } 530 | -------------------------------------------------------------------------------- /typings/modules/chai/typings.json: -------------------------------------------------------------------------------- 1 | { 2 | "resolution": "main", 3 | "tree": { 4 | "src": "https://raw.githubusercontent.com/types/npm-chai/793bee097a6a644e078a033603d88ac89eb7b560/typings.json", 5 | "raw": "registry:npm/chai#3.5.0+20160723033700", 6 | "main": "index.d.ts", 7 | "dependencies": { 8 | "assertion-error": { 9 | "src": "https://raw.githubusercontent.com/typed-typings/npm-assertion-error/105841317bd2bdd5d110bfb763e49e482a77230d/typings.json", 10 | "raw": "github:typed-typings/npm-assertion-error#105841317bd2bdd5d110bfb763e49e482a77230d", 11 | "main": "main.d.ts", 12 | "name": "assertion-error" 13 | } 14 | }, 15 | "name": "chai" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | /* eslint strict:0 */ 2 | var path = require('path'); 3 | 4 | ('use strict'); 5 | 6 | module.exports = { 7 | entry: { 8 | flipping: './src/index' 9 | }, 10 | output: { 11 | library: 'Flipping', 12 | libraryTarget: 'umd', 13 | filename: '[name].js', 14 | path: path.join(__dirname, 'dist/') 15 | }, 16 | resolve: { 17 | extensions: ['.ts', '.js'], 18 | modules: ['node_modules'], 19 | alias: { 20 | mitt: path.resolve(__dirname, './node_modules/mitt/dist/mitt.umd.js') 21 | } 22 | }, 23 | module: { 24 | loaders: [{ test: /\.ts$/, loader: 'ts-loader' }] 25 | }, 26 | devtool: 'inline-source-map' 27 | }; 28 | -------------------------------------------------------------------------------- /webpack.config.prod.js: -------------------------------------------------------------------------------- 1 | /* eslint strict:0 */ 2 | 'use strict'; 3 | 4 | var path = require('path'); 5 | 6 | const webpack = require('webpack'); 7 | const baseConfig = require('./webpack.config'); 8 | 9 | const config = Object.create(baseConfig); 10 | 11 | config.plugins = (config.plugins || []).concat([ 12 | new webpack.DefinePlugin({ 13 | 'process.env.NODE_ENV': JSON.stringify('production'), 14 | }), 15 | new webpack.optimize.UglifyJsPlugin({ 16 | compressor: { 17 | screw_ie8: true, 18 | warnings: false, 19 | }, 20 | output: { 21 | comments: false 22 | } 23 | }), 24 | ]); 25 | 26 | module.exports = config; 27 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.8.3": 6 | version "7.10.3" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" 8 | integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.3" 11 | 12 | "@babel/helper-validator-identifier@^7.10.3": 13 | version "7.10.3" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" 15 | integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== 16 | 17 | "@babel/highlight@^7.10.3": 18 | version "7.10.3" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" 20 | integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.3" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@babel/runtime@^7.9.6": 27 | version "7.10.3" 28 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364" 29 | integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw== 30 | dependencies: 31 | regenerator-runtime "^0.13.4" 32 | 33 | "@npmcli/ci-detect@^1.0.0": 34 | version "1.2.0" 35 | resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" 36 | integrity sha512-JtktVH7ASBVIWsQTFlFpeOzhBJskvoBCTfeeRhhZy7ybATcUvwiwotZ8j5rkqUUyB69lIy/AvboiiiGBjYBKBA== 37 | 38 | "@npmcli/git@^2.0.1": 39 | version "2.0.2" 40 | resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.2.tgz#41d75caf59e4799c62b354a3e4eed3b0e64310c0" 41 | integrity sha512-uv9+EuP5YWluNPgkEOL+iyB/+MVt4U5PMBCfl+I8korKluFdiSp7RxjXYzpWM/wU4wXaROAUFiOiCMmBftonjw== 42 | dependencies: 43 | "@npmcli/promise-spawn" "^1.1.0" 44 | lru-cache "^5.1.1" 45 | mkdirp "^1.0.3" 46 | npm-pick-manifest "^6.0.0" 47 | promise-inflight "^1.0.1" 48 | promise-retry "^1.1.1" 49 | semver "^7.3.2" 50 | unique-filename "^1.1.1" 51 | which "^2.0.2" 52 | 53 | "@npmcli/installed-package-contents@^1.0.5": 54 | version "1.0.5" 55 | resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" 56 | integrity sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A== 57 | dependencies: 58 | npm-bundled "^1.1.1" 59 | npm-normalize-package-bin "^1.0.1" 60 | read-package-json-fast "^1.1.1" 61 | readdir-scoped-modules "^1.1.0" 62 | 63 | "@npmcli/move-file@^1.0.1": 64 | version "1.0.1" 65 | resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" 66 | integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== 67 | dependencies: 68 | mkdirp "^1.0.4" 69 | 70 | "@npmcli/promise-spawn@^1.1.0", "@npmcli/promise-spawn@^1.2.0": 71 | version "1.2.0" 72 | resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.2.0.tgz#167d70b926f771c8bd8b9183bfc8b5aec29d7e45" 73 | integrity sha512-nFtqjVETliApiRdjbYwKwhlSHx2ZMagyj5b9YbNt0BWeeOVxJd47ZVE2u16vxDHyTOZvk+YLV7INwfAE9a2uow== 74 | dependencies: 75 | infer-owner "^1.0.4" 76 | 77 | "@npmcli/run-script@^1.3.0": 78 | version "1.3.1" 79 | resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.3.1.tgz#dc8934646634338b99898614ce083dabcd14edf3" 80 | integrity sha512-9Ea57XJjNLtBFRAaiKqqdoqRrL2QkM0vvCbMjPecljhog5IHupStPtZULbl0CoGN00N3lhLWJ4PaIEC0MGjqJw== 81 | dependencies: 82 | "@npmcli/promise-spawn" "^1.2.0" 83 | infer-owner "^1.0.4" 84 | node-gyp "^6.1.0" 85 | read-package-json-fast "^1.1.3" 86 | 87 | "@rollup/pluginutils@^3.0.8": 88 | version "3.1.0" 89 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 90 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 91 | dependencies: 92 | "@types/estree" "0.0.39" 93 | estree-walker "^1.0.1" 94 | picomatch "^2.2.2" 95 | 96 | "@tootallnate/once@1": 97 | version "1.1.2" 98 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" 99 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== 100 | 101 | "@types/color-name@^1.1.1": 102 | version "1.1.1" 103 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 104 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 105 | 106 | "@types/estree@0.0.39": 107 | version "0.0.39" 108 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 109 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 110 | 111 | "@types/mocha@^7.0.2": 112 | version "7.0.2" 113 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-7.0.2.tgz#b17f16cf933597e10d6d78eae3251e692ce8b0ce" 114 | integrity sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w== 115 | 116 | "@types/node@^14.0.14": 117 | version "14.0.14" 118 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" 119 | integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== 120 | 121 | abbrev@1: 122 | version "1.1.1" 123 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 124 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 125 | 126 | agent-base@6: 127 | version "6.0.0" 128 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" 129 | integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== 130 | dependencies: 131 | debug "4" 132 | 133 | agentkeepalive@^4.1.0: 134 | version "4.1.3" 135 | resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.3.tgz#360a09d743a1f4fde749f9ba07caa6575d08259a" 136 | integrity sha512-wn8fw19xKZwdGPO47jivonaHRTd+nGOMP1z11sgGeQzDy2xd5FG0R67dIMcKHDE2cJ5y+YXV30XVGUBPRSY7Hg== 137 | dependencies: 138 | debug "^4.1.0" 139 | depd "^1.1.2" 140 | humanize-ms "^1.2.1" 141 | 142 | aggregate-error@^3.0.0: 143 | version "3.0.1" 144 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" 145 | integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== 146 | dependencies: 147 | clean-stack "^2.0.0" 148 | indent-string "^4.0.0" 149 | 150 | ajv@^6.5.5: 151 | version "6.12.2" 152 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" 153 | integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== 154 | dependencies: 155 | fast-deep-equal "^3.1.1" 156 | fast-json-stable-stringify "^2.0.0" 157 | json-schema-traverse "^0.4.1" 158 | uri-js "^4.2.2" 159 | 160 | ansi-align@^3.0.0: 161 | version "3.0.0" 162 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 163 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 164 | dependencies: 165 | string-width "^3.0.0" 166 | 167 | ansi-regex@^2.0.0: 168 | version "2.1.1" 169 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 170 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 171 | 172 | ansi-regex@^3.0.0: 173 | version "3.0.0" 174 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 175 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 176 | 177 | ansi-regex@^4.1.0: 178 | version "4.1.0" 179 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 180 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 181 | 182 | ansi-regex@^5.0.0: 183 | version "5.0.0" 184 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 185 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 186 | 187 | ansi-styles@^3.2.1: 188 | version "3.2.1" 189 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 190 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 191 | dependencies: 192 | color-convert "^1.9.0" 193 | 194 | ansi-styles@^4.1.0: 195 | version "4.2.1" 196 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 197 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 198 | dependencies: 199 | "@types/color-name" "^1.1.1" 200 | color-convert "^2.0.1" 201 | 202 | aproba@^1.0.3: 203 | version "1.2.0" 204 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 205 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 206 | 207 | are-we-there-yet@~1.1.2: 208 | version "1.1.5" 209 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 210 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 211 | dependencies: 212 | delegates "^1.0.0" 213 | readable-stream "^2.0.6" 214 | 215 | asap@^2.0.0: 216 | version "2.0.6" 217 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 218 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= 219 | 220 | asn1@~0.2.3: 221 | version "0.2.4" 222 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 223 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 224 | dependencies: 225 | safer-buffer "~2.1.0" 226 | 227 | assert-plus@1.0.0, assert-plus@^1.0.0: 228 | version "1.0.0" 229 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 230 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 231 | 232 | asynckit@^0.4.0: 233 | version "0.4.0" 234 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 235 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 236 | 237 | aws-sign2@~0.7.0: 238 | version "0.7.0" 239 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 240 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 241 | 242 | aws4@^1.8.0: 243 | version "1.10.0" 244 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" 245 | integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== 246 | 247 | balanced-match@^1.0.0: 248 | version "1.0.0" 249 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 250 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 251 | 252 | bcrypt-pbkdf@^1.0.0: 253 | version "1.0.2" 254 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 255 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 256 | dependencies: 257 | tweetnacl "^0.14.3" 258 | 259 | boxen@^4.2.0: 260 | version "4.2.0" 261 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" 262 | integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== 263 | dependencies: 264 | ansi-align "^3.0.0" 265 | camelcase "^5.3.1" 266 | chalk "^3.0.0" 267 | cli-boxes "^2.2.0" 268 | string-width "^4.1.0" 269 | term-size "^2.1.0" 270 | type-fest "^0.8.1" 271 | widest-line "^3.1.0" 272 | 273 | brace-expansion@^1.1.7: 274 | version "1.1.11" 275 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 276 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 277 | dependencies: 278 | balanced-match "^1.0.0" 279 | concat-map "0.0.1" 280 | 281 | brotli-size@4.0.0: 282 | version "4.0.0" 283 | resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" 284 | integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== 285 | dependencies: 286 | duplexer "0.1.1" 287 | 288 | buffer-from@^1.0.0: 289 | version "1.1.1" 290 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 291 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 292 | 293 | builtins@^1.0.3: 294 | version "1.0.3" 295 | resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" 296 | integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= 297 | 298 | cacache@^15.0.0, cacache@^15.0.3: 299 | version "15.0.4" 300 | resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.4.tgz#b2c23cf4ac4f5ead004fb15a0efb0a20340741f1" 301 | integrity sha512-YlnKQqTbD/6iyoJvEY3KJftjrdBYroCbxxYXzhOzsFLWlp6KX4BOlEf4mTx0cMUfVaTS3ENL2QtDWeRYoGLkkw== 302 | dependencies: 303 | "@npmcli/move-file" "^1.0.1" 304 | chownr "^2.0.0" 305 | fs-minipass "^2.0.0" 306 | glob "^7.1.4" 307 | infer-owner "^1.0.4" 308 | lru-cache "^5.1.1" 309 | minipass "^3.1.1" 310 | minipass-collect "^1.0.2" 311 | minipass-flush "^1.0.5" 312 | minipass-pipeline "^1.2.2" 313 | mkdirp "^1.0.3" 314 | p-map "^4.0.0" 315 | promise-inflight "^1.0.1" 316 | rimraf "^3.0.2" 317 | ssri "^8.0.0" 318 | tar "^6.0.2" 319 | unique-filename "^1.1.1" 320 | 321 | camelcase@^5.3.1: 322 | version "5.3.1" 323 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 324 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 325 | 326 | caseless@~0.12.0: 327 | version "0.12.0" 328 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 329 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 330 | 331 | chalk@^2.0.0: 332 | version "2.4.2" 333 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 334 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 335 | dependencies: 336 | ansi-styles "^3.2.1" 337 | escape-string-regexp "^1.0.5" 338 | supports-color "^5.3.0" 339 | 340 | chalk@^3.0.0: 341 | version "3.0.0" 342 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 343 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 344 | dependencies: 345 | ansi-styles "^4.1.0" 346 | supports-color "^7.1.0" 347 | 348 | chownr@^1.1.1: 349 | version "1.1.4" 350 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 351 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 352 | 353 | chownr@^2.0.0: 354 | version "2.0.0" 355 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 356 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 357 | 358 | clean-stack@^2.0.0: 359 | version "2.2.0" 360 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 361 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 362 | 363 | cli-boxes@^2.2.0: 364 | version "2.2.0" 365 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" 366 | integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== 367 | 368 | code-point-at@^1.0.0: 369 | version "1.1.0" 370 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 371 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 372 | 373 | color-convert@^1.9.0: 374 | version "1.9.3" 375 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 376 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 377 | dependencies: 378 | color-name "1.1.3" 379 | 380 | color-convert@^2.0.1: 381 | version "2.0.1" 382 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 383 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 384 | dependencies: 385 | color-name "~1.1.4" 386 | 387 | color-name@1.1.3: 388 | version "1.1.3" 389 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 390 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 391 | 392 | color-name@~1.1.4: 393 | version "1.1.4" 394 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 395 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 396 | 397 | colors@^1.4.0: 398 | version "1.4.0" 399 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 400 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 401 | 402 | combined-stream@^1.0.6, combined-stream@~1.0.6: 403 | version "1.0.8" 404 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 405 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 406 | dependencies: 407 | delayed-stream "~1.0.0" 408 | 409 | commander@^2.20.0: 410 | version "2.20.3" 411 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 412 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 413 | 414 | commondir@^1.0.1: 415 | version "1.0.1" 416 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 417 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 418 | 419 | concat-map@0.0.1: 420 | version "0.0.1" 421 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 422 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 423 | 424 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 425 | version "1.1.0" 426 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 427 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 428 | 429 | core-util-is@1.0.2, core-util-is@~1.0.0: 430 | version "1.0.2" 431 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 432 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 433 | 434 | dashdash@^1.12.0: 435 | version "1.14.1" 436 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 437 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 438 | dependencies: 439 | assert-plus "^1.0.0" 440 | 441 | debug@4, debug@^4.1.0: 442 | version "4.1.1" 443 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 444 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 445 | dependencies: 446 | ms "^2.1.1" 447 | 448 | debuglog@^1.0.1: 449 | version "1.0.1" 450 | resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" 451 | integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= 452 | 453 | delayed-stream@~1.0.0: 454 | version "1.0.0" 455 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 456 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 457 | 458 | delegates@^1.0.0: 459 | version "1.0.0" 460 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 461 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 462 | 463 | depd@^1.1.2: 464 | version "1.1.2" 465 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 466 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 467 | 468 | dezalgo@^1.0.0: 469 | version "1.0.3" 470 | resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" 471 | integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= 472 | dependencies: 473 | asap "^2.0.0" 474 | wrappy "1" 475 | 476 | duplexer@0.1.1, duplexer@^0.1.1: 477 | version "0.1.1" 478 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 479 | integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= 480 | 481 | ecc-jsbn@~0.1.1: 482 | version "0.1.2" 483 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 484 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 485 | dependencies: 486 | jsbn "~0.1.0" 487 | safer-buffer "^2.1.0" 488 | 489 | emoji-regex@^7.0.1: 490 | version "7.0.3" 491 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 492 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 493 | 494 | emoji-regex@^8.0.0: 495 | version "8.0.0" 496 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 497 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 498 | 499 | encoding@^0.1.12: 500 | version "0.1.12" 501 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 502 | integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= 503 | dependencies: 504 | iconv-lite "~0.4.13" 505 | 506 | env-paths@^2.2.0: 507 | version "2.2.0" 508 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" 509 | integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== 510 | 511 | err-code@^1.0.0: 512 | version "1.1.2" 513 | resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" 514 | integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= 515 | 516 | escape-string-regexp@^1.0.5: 517 | version "1.0.5" 518 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 519 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 520 | 521 | estree-walker@^0.6.1: 522 | version "0.6.1" 523 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 524 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 525 | 526 | estree-walker@^1.0.1: 527 | version "1.0.1" 528 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 529 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 530 | 531 | extend@~3.0.2: 532 | version "3.0.2" 533 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 534 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 535 | 536 | extsprintf@1.3.0: 537 | version "1.3.0" 538 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 539 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 540 | 541 | extsprintf@^1.2.0: 542 | version "1.4.0" 543 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 544 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 545 | 546 | fast-deep-equal@^3.1.1: 547 | version "3.1.3" 548 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 549 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 550 | 551 | fast-json-stable-stringify@^2.0.0: 552 | version "2.1.0" 553 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 554 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 555 | 556 | filesize@^6.1.0: 557 | version "6.1.0" 558 | resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" 559 | integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== 560 | 561 | find-cache-dir@^3.3.1: 562 | version "3.3.1" 563 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 564 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 565 | dependencies: 566 | commondir "^1.0.1" 567 | make-dir "^3.0.2" 568 | pkg-dir "^4.1.0" 569 | 570 | find-up@^4.0.0: 571 | version "4.1.0" 572 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 573 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 574 | dependencies: 575 | locate-path "^5.0.0" 576 | path-exists "^4.0.0" 577 | 578 | forever-agent@~0.6.1: 579 | version "0.6.1" 580 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 581 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 582 | 583 | form-data@~2.3.2: 584 | version "2.3.3" 585 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 586 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 587 | dependencies: 588 | asynckit "^0.4.0" 589 | combined-stream "^1.0.6" 590 | mime-types "^2.1.12" 591 | 592 | fs-extra@8.1.0: 593 | version "8.1.0" 594 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 595 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 596 | dependencies: 597 | graceful-fs "^4.2.0" 598 | jsonfile "^4.0.0" 599 | universalify "^0.1.0" 600 | 601 | fs-minipass@^1.2.5: 602 | version "1.2.7" 603 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 604 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 605 | dependencies: 606 | minipass "^2.6.0" 607 | 608 | fs-minipass@^2.0.0, fs-minipass@^2.1.0: 609 | version "2.1.0" 610 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 611 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 612 | dependencies: 613 | minipass "^3.0.0" 614 | 615 | fs.realpath@^1.0.0: 616 | version "1.0.0" 617 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 618 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 619 | 620 | fsevents@~2.1.2: 621 | version "2.1.3" 622 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 623 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 624 | 625 | gauge@~2.7.3: 626 | version "2.7.4" 627 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 628 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 629 | dependencies: 630 | aproba "^1.0.3" 631 | console-control-strings "^1.0.0" 632 | has-unicode "^2.0.0" 633 | object-assign "^4.1.0" 634 | signal-exit "^3.0.0" 635 | string-width "^1.0.1" 636 | strip-ansi "^3.0.1" 637 | wide-align "^1.1.0" 638 | 639 | getpass@^0.1.1: 640 | version "0.1.7" 641 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 642 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 643 | dependencies: 644 | assert-plus "^1.0.0" 645 | 646 | glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 647 | version "7.1.6" 648 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 649 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 650 | dependencies: 651 | fs.realpath "^1.0.0" 652 | inflight "^1.0.4" 653 | inherits "2" 654 | minimatch "^3.0.4" 655 | once "^1.3.0" 656 | path-is-absolute "^1.0.0" 657 | 658 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: 659 | version "4.2.4" 660 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 661 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 662 | 663 | gzip-size@^5.1.1: 664 | version "5.1.1" 665 | resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" 666 | integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== 667 | dependencies: 668 | duplexer "^0.1.1" 669 | pify "^4.0.1" 670 | 671 | har-schema@^2.0.0: 672 | version "2.0.0" 673 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 674 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 675 | 676 | har-validator@~5.1.3: 677 | version "5.1.3" 678 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 679 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 680 | dependencies: 681 | ajv "^6.5.5" 682 | har-schema "^2.0.0" 683 | 684 | has-flag@^3.0.0: 685 | version "3.0.0" 686 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 687 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 688 | 689 | has-flag@^4.0.0: 690 | version "4.0.0" 691 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 692 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 693 | 694 | has-unicode@^2.0.0: 695 | version "2.0.1" 696 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 697 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 698 | 699 | hosted-git-info@^3.0.2: 700 | version "3.0.4" 701 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" 702 | integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== 703 | dependencies: 704 | lru-cache "^5.1.1" 705 | 706 | http-cache-semantics@^4.0.4: 707 | version "4.1.0" 708 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 709 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 710 | 711 | http-proxy-agent@^4.0.1: 712 | version "4.0.1" 713 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" 714 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== 715 | dependencies: 716 | "@tootallnate/once" "1" 717 | agent-base "6" 718 | debug "4" 719 | 720 | http-signature@~1.2.0: 721 | version "1.2.0" 722 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 723 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 724 | dependencies: 725 | assert-plus "^1.0.0" 726 | jsprim "^1.2.2" 727 | sshpk "^1.7.0" 728 | 729 | https-proxy-agent@^5.0.0: 730 | version "5.0.0" 731 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" 732 | integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== 733 | dependencies: 734 | agent-base "6" 735 | debug "4" 736 | 737 | humanize-ms@^1.2.1: 738 | version "1.2.1" 739 | resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" 740 | integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= 741 | dependencies: 742 | ms "^2.0.0" 743 | 744 | iconv-lite@~0.4.13: 745 | version "0.4.24" 746 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 747 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 748 | dependencies: 749 | safer-buffer ">= 2.1.2 < 3" 750 | 751 | ignore-walk@^3.0.3: 752 | version "3.0.3" 753 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" 754 | integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== 755 | dependencies: 756 | minimatch "^3.0.4" 757 | 758 | imurmurhash@^0.1.4: 759 | version "0.1.4" 760 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 761 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 762 | 763 | indent-string@^4.0.0: 764 | version "4.0.0" 765 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 766 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 767 | 768 | infer-owner@^1.0.4: 769 | version "1.0.4" 770 | resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" 771 | integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== 772 | 773 | inflight@^1.0.4: 774 | version "1.0.6" 775 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 776 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 777 | dependencies: 778 | once "^1.3.0" 779 | wrappy "1" 780 | 781 | inherits@2, inherits@~2.0.3: 782 | version "2.0.4" 783 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 784 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 785 | 786 | ip@1.1.5: 787 | version "1.1.5" 788 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 789 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 790 | 791 | is-fullwidth-code-point@^1.0.0: 792 | version "1.0.0" 793 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 794 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 795 | dependencies: 796 | number-is-nan "^1.0.0" 797 | 798 | is-fullwidth-code-point@^2.0.0: 799 | version "2.0.0" 800 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 801 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 802 | 803 | is-fullwidth-code-point@^3.0.0: 804 | version "3.0.0" 805 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 806 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 807 | 808 | is-lambda@^1.0.1: 809 | version "1.0.1" 810 | resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" 811 | integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= 812 | 813 | is-typedarray@~1.0.0: 814 | version "1.0.0" 815 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 816 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 817 | 818 | isarray@~1.0.0: 819 | version "1.0.0" 820 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 821 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 822 | 823 | isexe@^2.0.0: 824 | version "2.0.0" 825 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 826 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 827 | 828 | isstream@~0.1.2: 829 | version "0.1.2" 830 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 831 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 832 | 833 | jest-worker@^26.0.0: 834 | version "26.1.0" 835 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d" 836 | integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ== 837 | dependencies: 838 | merge-stream "^2.0.0" 839 | supports-color "^7.0.0" 840 | 841 | js-tokens@^4.0.0: 842 | version "4.0.0" 843 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 844 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 845 | 846 | jsbn@~0.1.0: 847 | version "0.1.1" 848 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 849 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 850 | 851 | json-parse-even-better-errors@^2.0.1: 852 | version "2.2.0" 853 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" 854 | integrity sha512-2tLgY7LRNZ9Hd6gmCuBG5/OjRHQpSgJQqJoYyLLOhUgn8LdOYrjaZLcxkWnDads+AD/haWWioPNziXQcgvQJ/g== 855 | 856 | json-schema-traverse@^0.4.1: 857 | version "0.4.1" 858 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 859 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 860 | 861 | json-schema@0.2.3: 862 | version "0.2.3" 863 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 864 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 865 | 866 | json-stringify-safe@~5.0.1: 867 | version "5.0.1" 868 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 869 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 870 | 871 | jsonfile@^4.0.0: 872 | version "4.0.0" 873 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 874 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 875 | optionalDependencies: 876 | graceful-fs "^4.1.6" 877 | 878 | jsonparse@^1.3.1: 879 | version "1.3.1" 880 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 881 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 882 | 883 | jsprim@^1.2.2: 884 | version "1.4.1" 885 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 886 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 887 | dependencies: 888 | assert-plus "1.0.0" 889 | extsprintf "1.3.0" 890 | json-schema "0.2.3" 891 | verror "1.10.0" 892 | 893 | locate-path@^5.0.0: 894 | version "5.0.0" 895 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 896 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 897 | dependencies: 898 | p-locate "^4.1.0" 899 | 900 | lru-cache@^5.1.1: 901 | version "5.1.1" 902 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 903 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 904 | dependencies: 905 | yallist "^3.0.2" 906 | 907 | magic-string@^0.25.2: 908 | version "0.25.7" 909 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 910 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 911 | dependencies: 912 | sourcemap-codec "^1.4.4" 913 | 914 | make-dir@^3.0.2: 915 | version "3.1.0" 916 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 917 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 918 | dependencies: 919 | semver "^6.0.0" 920 | 921 | make-fetch-happen@^8.0.7: 922 | version "8.0.7" 923 | resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.7.tgz#7f98e6e75784c541833d0ffe2f82c31418a87ac2" 924 | integrity sha512-rkDA4c1nMXVqLkfOaM5RK2dxkUndjLOCrPycTDZgbkFDzhmaCO3P1dmCW//yt1I/G1EcedJqMsSjWkV79Hh4hQ== 925 | dependencies: 926 | agentkeepalive "^4.1.0" 927 | cacache "^15.0.0" 928 | http-cache-semantics "^4.0.4" 929 | http-proxy-agent "^4.0.1" 930 | https-proxy-agent "^5.0.0" 931 | is-lambda "^1.0.1" 932 | lru-cache "^5.1.1" 933 | minipass "^3.1.3" 934 | minipass-collect "^1.0.2" 935 | minipass-fetch "^1.1.2" 936 | minipass-flush "^1.0.5" 937 | minipass-pipeline "^1.2.2" 938 | promise-retry "^1.1.1" 939 | socks-proxy-agent "^5.0.0" 940 | ssri "^8.0.0" 941 | 942 | merge-stream@^2.0.0: 943 | version "2.0.0" 944 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 945 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 946 | 947 | mime-db@1.44.0: 948 | version "1.44.0" 949 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 950 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 951 | 952 | mime-types@^2.1.12, mime-types@~2.1.19: 953 | version "2.1.27" 954 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 955 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 956 | dependencies: 957 | mime-db "1.44.0" 958 | 959 | minimatch@^3.0.4: 960 | version "3.0.4" 961 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 962 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 963 | dependencies: 964 | brace-expansion "^1.1.7" 965 | 966 | minimist@^1.2.5: 967 | version "1.2.5" 968 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 969 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 970 | 971 | minipass-collect@^1.0.2: 972 | version "1.0.2" 973 | resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" 974 | integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== 975 | dependencies: 976 | minipass "^3.0.0" 977 | 978 | minipass-fetch@^1.1.2: 979 | version "1.2.1" 980 | resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" 981 | integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== 982 | dependencies: 983 | minipass "^3.1.0" 984 | minipass-pipeline "^1.2.2" 985 | minipass-sized "^1.0.3" 986 | minizlib "^2.0.0" 987 | optionalDependencies: 988 | encoding "^0.1.12" 989 | 990 | minipass-flush@^1.0.5: 991 | version "1.0.5" 992 | resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" 993 | integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== 994 | dependencies: 995 | minipass "^3.0.0" 996 | 997 | minipass-json-stream@^1.0.1: 998 | version "1.0.1" 999 | resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" 1000 | integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== 1001 | dependencies: 1002 | jsonparse "^1.3.1" 1003 | minipass "^3.0.0" 1004 | 1005 | minipass-pipeline@^1.2.2: 1006 | version "1.2.3" 1007 | resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz#55f7839307d74859d6e8ada9c3ebe72cec216a34" 1008 | integrity sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ== 1009 | dependencies: 1010 | minipass "^3.0.0" 1011 | 1012 | minipass-sized@^1.0.3: 1013 | version "1.0.3" 1014 | resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" 1015 | integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== 1016 | dependencies: 1017 | minipass "^3.0.0" 1018 | 1019 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 1020 | version "2.9.0" 1021 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 1022 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 1023 | dependencies: 1024 | safe-buffer "^5.1.2" 1025 | yallist "^3.0.0" 1026 | 1027 | minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: 1028 | version "3.1.3" 1029 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" 1030 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== 1031 | dependencies: 1032 | yallist "^4.0.0" 1033 | 1034 | minizlib@^1.2.1: 1035 | version "1.3.3" 1036 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 1037 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 1038 | dependencies: 1039 | minipass "^2.9.0" 1040 | 1041 | minizlib@^2.0.0, minizlib@^2.1.0: 1042 | version "2.1.0" 1043 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" 1044 | integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== 1045 | dependencies: 1046 | minipass "^3.0.0" 1047 | yallist "^4.0.0" 1048 | 1049 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1050 | version "0.5.5" 1051 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1052 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1053 | dependencies: 1054 | minimist "^1.2.5" 1055 | 1056 | mkdirp@^1.0.3, mkdirp@^1.0.4: 1057 | version "1.0.4" 1058 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1059 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1060 | 1061 | ms@^2.0.0, ms@^2.1.1: 1062 | version "2.1.2" 1063 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1064 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1065 | 1066 | node-gyp@^6.1.0: 1067 | version "6.1.0" 1068 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-6.1.0.tgz#64e31c61a4695ad304c1d5b82cf6b7c79cc79f3f" 1069 | integrity sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw== 1070 | dependencies: 1071 | env-paths "^2.2.0" 1072 | glob "^7.1.4" 1073 | graceful-fs "^4.2.2" 1074 | mkdirp "^0.5.1" 1075 | nopt "^4.0.1" 1076 | npmlog "^4.1.2" 1077 | request "^2.88.0" 1078 | rimraf "^2.6.3" 1079 | semver "^5.7.1" 1080 | tar "^4.4.12" 1081 | which "^1.3.1" 1082 | 1083 | nopt@^4.0.1: 1084 | version "4.0.3" 1085 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" 1086 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 1087 | dependencies: 1088 | abbrev "1" 1089 | osenv "^0.1.4" 1090 | 1091 | npm-bundled@^1.1.1: 1092 | version "1.1.1" 1093 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" 1094 | integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== 1095 | dependencies: 1096 | npm-normalize-package-bin "^1.0.1" 1097 | 1098 | npm-install-checks@^4.0.0: 1099 | version "4.0.0" 1100 | resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" 1101 | integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== 1102 | dependencies: 1103 | semver "^7.1.1" 1104 | 1105 | npm-normalize-package-bin@^1.0.1: 1106 | version "1.0.1" 1107 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" 1108 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 1109 | 1110 | npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: 1111 | version "8.0.1" 1112 | resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" 1113 | integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== 1114 | dependencies: 1115 | hosted-git-info "^3.0.2" 1116 | semver "^7.0.0" 1117 | validate-npm-package-name "^3.0.0" 1118 | 1119 | npm-packlist@^2.1.0: 1120 | version "2.1.2" 1121 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.2.tgz#a3045b52aefc37e7a5e86a55e6ca8cb1e909e25a" 1122 | integrity sha512-eByPaP+wsKai0BJX5pmb58d3mfR0zUATcnyuvSxIudTEn+swCPFLxh7srCmqB4hr7i9V24/DPjjq5b2qUtbgXQ== 1123 | dependencies: 1124 | glob "^7.1.6" 1125 | ignore-walk "^3.0.3" 1126 | npm-bundled "^1.1.1" 1127 | npm-normalize-package-bin "^1.0.1" 1128 | 1129 | npm-pick-manifest@^6.0.0: 1130 | version "6.1.0" 1131 | resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" 1132 | integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== 1133 | dependencies: 1134 | npm-install-checks "^4.0.0" 1135 | npm-package-arg "^8.0.0" 1136 | semver "^7.0.0" 1137 | 1138 | npm-registry-fetch@^8.0.3: 1139 | version "8.1.0" 1140 | resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.1.0.tgz#1d5c229b82412414b9c63cde040b51981db76904" 1141 | integrity sha512-RkcugRDye2j6yEiHGMyAdKQoipgp8VToSIjm+TFLhVraXOkC/WU2kjE2URcYBpcJ4hs++VFBKo6+Zg4wmrS+Qw== 1142 | dependencies: 1143 | "@npmcli/ci-detect" "^1.0.0" 1144 | lru-cache "^5.1.1" 1145 | make-fetch-happen "^8.0.7" 1146 | minipass "^3.1.3" 1147 | minipass-fetch "^1.1.2" 1148 | minipass-json-stream "^1.0.1" 1149 | minizlib "^2.0.0" 1150 | npm-package-arg "^8.0.0" 1151 | 1152 | npmlog@^4.1.2: 1153 | version "4.1.2" 1154 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1155 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1156 | dependencies: 1157 | are-we-there-yet "~1.1.2" 1158 | console-control-strings "~1.1.0" 1159 | gauge "~2.7.3" 1160 | set-blocking "~2.0.0" 1161 | 1162 | number-is-nan@^1.0.0: 1163 | version "1.0.1" 1164 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1165 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1166 | 1167 | oauth-sign@~0.9.0: 1168 | version "0.9.0" 1169 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1170 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1171 | 1172 | object-assign@^4.1.0: 1173 | version "4.1.1" 1174 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1175 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1176 | 1177 | once@^1.3.0: 1178 | version "1.4.0" 1179 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1180 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1181 | dependencies: 1182 | wrappy "1" 1183 | 1184 | os-homedir@^1.0.0: 1185 | version "1.0.2" 1186 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1187 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1188 | 1189 | os-tmpdir@^1.0.0: 1190 | version "1.0.2" 1191 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1192 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1193 | 1194 | osenv@^0.1.4: 1195 | version "0.1.5" 1196 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1197 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 1198 | dependencies: 1199 | os-homedir "^1.0.0" 1200 | os-tmpdir "^1.0.0" 1201 | 1202 | p-limit@^2.2.0: 1203 | version "2.3.0" 1204 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1205 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1206 | dependencies: 1207 | p-try "^2.0.0" 1208 | 1209 | p-locate@^4.1.0: 1210 | version "4.1.0" 1211 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1212 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1213 | dependencies: 1214 | p-limit "^2.2.0" 1215 | 1216 | p-map@^4.0.0: 1217 | version "4.0.0" 1218 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 1219 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 1220 | dependencies: 1221 | aggregate-error "^3.0.0" 1222 | 1223 | p-try@^2.0.0: 1224 | version "2.2.0" 1225 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1226 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1227 | 1228 | pacote@^11.1.6: 1229 | version "11.1.10" 1230 | resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.1.10.tgz#cbd56a5a60c9cf472bc8ea7ba87112d749655dd4" 1231 | integrity sha512-xJSSSxcHLo1CZJESvIZ2hbC5/5WP2oDHeUeTV2FvVDPOZG7+ixbxnV0n3TkdaUqlbC0RwnwMQ3wkJ/YywYM0Cg== 1232 | dependencies: 1233 | "@npmcli/git" "^2.0.1" 1234 | "@npmcli/installed-package-contents" "^1.0.5" 1235 | "@npmcli/promise-spawn" "^1.2.0" 1236 | "@npmcli/run-script" "^1.3.0" 1237 | cacache "^15.0.3" 1238 | chownr "^2.0.0" 1239 | fs-minipass "^2.1.0" 1240 | infer-owner "^1.0.4" 1241 | minipass "^3.1.3" 1242 | mkdirp "^1.0.3" 1243 | npm-package-arg "^8.0.1" 1244 | npm-packlist "^2.1.0" 1245 | npm-pick-manifest "^6.0.0" 1246 | npm-registry-fetch "^8.0.3" 1247 | promise-retry "^1.1.1" 1248 | read-package-json-fast "^1.1.3" 1249 | rimraf "^3.0.2" 1250 | ssri "^8.0.0" 1251 | tar "^6.0.1" 1252 | 1253 | path-exists@^4.0.0: 1254 | version "4.0.0" 1255 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1256 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1257 | 1258 | path-is-absolute@^1.0.0: 1259 | version "1.0.1" 1260 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1261 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1262 | 1263 | path-parse@^1.0.6: 1264 | version "1.0.6" 1265 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1266 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1267 | 1268 | performance-now@^2.1.0: 1269 | version "2.1.0" 1270 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1271 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1272 | 1273 | picomatch@^2.2.2: 1274 | version "2.2.2" 1275 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1276 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1277 | 1278 | pify@^4.0.1: 1279 | version "4.0.1" 1280 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1281 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1282 | 1283 | pkg-dir@^4.1.0: 1284 | version "4.2.0" 1285 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1286 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1287 | dependencies: 1288 | find-up "^4.0.0" 1289 | 1290 | process-nextick-args@~2.0.0: 1291 | version "2.0.1" 1292 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1293 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1294 | 1295 | promise-inflight@^1.0.1: 1296 | version "1.0.1" 1297 | resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" 1298 | integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= 1299 | 1300 | promise-retry@^1.1.1: 1301 | version "1.1.1" 1302 | resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" 1303 | integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= 1304 | dependencies: 1305 | err-code "^1.0.0" 1306 | retry "^0.10.0" 1307 | 1308 | psl@^1.1.28: 1309 | version "1.8.0" 1310 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1311 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1312 | 1313 | punycode@^2.1.0, punycode@^2.1.1: 1314 | version "2.1.1" 1315 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1316 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1317 | 1318 | qs@~6.5.2: 1319 | version "6.5.2" 1320 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1321 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1322 | 1323 | randombytes@^2.1.0: 1324 | version "2.1.0" 1325 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1326 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1327 | dependencies: 1328 | safe-buffer "^5.1.0" 1329 | 1330 | read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: 1331 | version "1.1.3" 1332 | resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" 1333 | integrity sha512-MmFqiyfCXV2Dmm4jH24DEGhxdkUDFivJQj4oPZQPOKywxR7HWBE6WnMWDAapfFHi3wm1b+mhR+XHlUH0CL8axg== 1334 | dependencies: 1335 | json-parse-even-better-errors "^2.0.1" 1336 | npm-normalize-package-bin "^1.0.1" 1337 | 1338 | readable-stream@^2.0.6: 1339 | version "2.3.7" 1340 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1341 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1342 | dependencies: 1343 | core-util-is "~1.0.0" 1344 | inherits "~2.0.3" 1345 | isarray "~1.0.0" 1346 | process-nextick-args "~2.0.0" 1347 | safe-buffer "~5.1.1" 1348 | string_decoder "~1.1.1" 1349 | util-deprecate "~1.0.1" 1350 | 1351 | readdir-scoped-modules@^1.1.0: 1352 | version "1.1.0" 1353 | resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" 1354 | integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== 1355 | dependencies: 1356 | debuglog "^1.0.1" 1357 | dezalgo "^1.0.0" 1358 | graceful-fs "^4.1.2" 1359 | once "^1.3.0" 1360 | 1361 | regenerator-runtime@^0.13.4: 1362 | version "0.13.5" 1363 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" 1364 | integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== 1365 | 1366 | request@^2.88.0: 1367 | version "2.88.2" 1368 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1369 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1370 | dependencies: 1371 | aws-sign2 "~0.7.0" 1372 | aws4 "^1.8.0" 1373 | caseless "~0.12.0" 1374 | combined-stream "~1.0.6" 1375 | extend "~3.0.2" 1376 | forever-agent "~0.6.1" 1377 | form-data "~2.3.2" 1378 | har-validator "~5.1.3" 1379 | http-signature "~1.2.0" 1380 | is-typedarray "~1.0.0" 1381 | isstream "~0.1.2" 1382 | json-stringify-safe "~5.0.1" 1383 | mime-types "~2.1.19" 1384 | oauth-sign "~0.9.0" 1385 | performance-now "^2.1.0" 1386 | qs "~6.5.2" 1387 | safe-buffer "^5.1.2" 1388 | tough-cookie "~2.5.0" 1389 | tunnel-agent "^0.6.0" 1390 | uuid "^3.3.2" 1391 | 1392 | resolve@1.15.1: 1393 | version "1.15.1" 1394 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" 1395 | integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== 1396 | dependencies: 1397 | path-parse "^1.0.6" 1398 | 1399 | retry@^0.10.0: 1400 | version "0.10.1" 1401 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" 1402 | integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= 1403 | 1404 | rimraf@^2.6.3: 1405 | version "2.7.1" 1406 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1407 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1408 | dependencies: 1409 | glob "^7.1.3" 1410 | 1411 | rimraf@^3.0.2: 1412 | version "3.0.2" 1413 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1414 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1415 | dependencies: 1416 | glob "^7.1.3" 1417 | 1418 | rollup-plugin-filesize@^9.0.1: 1419 | version "9.0.1" 1420 | resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-9.0.1.tgz#bae2408f008df518ee2bdaab4d234dc4272bc1da" 1421 | integrity sha512-k25SZsoFTaIwNCSbSU7401OyJIO+98Wa8sKtnUxcDiZgw2wGSSJ7+FhEYRpbIu1c2EXnvHJx/DJYGohG4lOmAw== 1422 | dependencies: 1423 | "@babel/runtime" "^7.9.6" 1424 | boxen "^4.2.0" 1425 | brotli-size "4.0.0" 1426 | colors "^1.4.0" 1427 | filesize "^6.1.0" 1428 | gzip-size "^5.1.1" 1429 | pacote "^11.1.6" 1430 | terser "^4.6.12" 1431 | 1432 | rollup-plugin-replace@^2.2.0: 1433 | version "2.2.0" 1434 | resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz#f41ae5372e11e7a217cde349c8b5d5fd115e70e3" 1435 | integrity sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA== 1436 | dependencies: 1437 | magic-string "^0.25.2" 1438 | rollup-pluginutils "^2.6.0" 1439 | 1440 | rollup-plugin-terser@^6.1.0: 1441 | version "6.1.0" 1442 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-6.1.0.tgz#071866585aea104bfbb9dd1019ac523e63c81e45" 1443 | integrity sha512-4fB3M9nuoWxrwm39habpd4hvrbrde2W2GG4zEGPQg1YITNkM3Tqur5jSuXlWNzbv/2aMLJ+dZJaySc3GCD8oDw== 1444 | dependencies: 1445 | "@babel/code-frame" "^7.8.3" 1446 | jest-worker "^26.0.0" 1447 | serialize-javascript "^3.0.0" 1448 | terser "^4.7.0" 1449 | 1450 | rollup-plugin-typescript2@^0.27.1: 1451 | version "0.27.1" 1452 | resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.1.tgz#4f27193408a8f040139eed3e3db7b0c7f3668200" 1453 | integrity sha512-RJl77Bbj1EunAQDC3dK/O2HWuSUX3oJbRGzyLoS5o9W4Hs1Nix3Gavqj1Lzs5Y6Ff4H2xXfmZ1WWUQCYocSbzQ== 1454 | dependencies: 1455 | "@rollup/pluginutils" "^3.0.8" 1456 | find-cache-dir "^3.3.1" 1457 | fs-extra "8.1.0" 1458 | resolve "1.15.1" 1459 | tslib "1.11.2" 1460 | 1461 | rollup-pluginutils@^2.6.0: 1462 | version "2.8.2" 1463 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" 1464 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 1465 | dependencies: 1466 | estree-walker "^0.6.1" 1467 | 1468 | rollup@^2.18.1: 1469 | version "2.18.1" 1470 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.18.1.tgz#1662c679da5dfc89ec6fda75951a2bcca1a4f77d" 1471 | integrity sha512-w4X77ADA+WTGlapC8Z6yggdJtODw3SBl6R2LSkA7ZW5MtdkgcB7sfaSD1UWyx8diXbMcGIb0eI9gCx/dyqOgNQ== 1472 | optionalDependencies: 1473 | fsevents "~2.1.2" 1474 | 1475 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: 1476 | version "5.2.1" 1477 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1478 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1479 | 1480 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1481 | version "5.1.2" 1482 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1483 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1484 | 1485 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1486 | version "2.1.2" 1487 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1488 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1489 | 1490 | semver@^5.7.1: 1491 | version "5.7.1" 1492 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1493 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1494 | 1495 | semver@^6.0.0: 1496 | version "6.3.0" 1497 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1498 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1499 | 1500 | semver@^7.0.0, semver@^7.1.1, semver@^7.3.2: 1501 | version "7.3.2" 1502 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" 1503 | integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== 1504 | 1505 | serialize-javascript@^3.0.0: 1506 | version "3.1.0" 1507 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" 1508 | integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== 1509 | dependencies: 1510 | randombytes "^2.1.0" 1511 | 1512 | set-blocking@~2.0.0: 1513 | version "2.0.0" 1514 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1515 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1516 | 1517 | signal-exit@^3.0.0: 1518 | version "3.0.3" 1519 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1520 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1521 | 1522 | smart-buffer@^4.1.0: 1523 | version "4.1.0" 1524 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" 1525 | integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== 1526 | 1527 | socks-proxy-agent@^5.0.0: 1528 | version "5.0.0" 1529 | resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" 1530 | integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== 1531 | dependencies: 1532 | agent-base "6" 1533 | debug "4" 1534 | socks "^2.3.3" 1535 | 1536 | socks@^2.3.3: 1537 | version "2.4.1" 1538 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.4.1.tgz#cea68a280a3bf7cb6333dbb40cfb243d10725e9d" 1539 | integrity sha512-8mWHeYC1OA0500qzb+sqwm0Hzi8oBpeuI1JugoBVMEJtJvxSgco8xFSK+NRnZcHeeWjTbF82KUDo5sXH22TY5A== 1540 | dependencies: 1541 | ip "1.1.5" 1542 | smart-buffer "^4.1.0" 1543 | 1544 | source-map-support@~0.5.12: 1545 | version "0.5.19" 1546 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1547 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1548 | dependencies: 1549 | buffer-from "^1.0.0" 1550 | source-map "^0.6.0" 1551 | 1552 | source-map@^0.6.0, source-map@~0.6.1: 1553 | version "0.6.1" 1554 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1555 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1556 | 1557 | sourcemap-codec@^1.4.4: 1558 | version "1.4.8" 1559 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1560 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1561 | 1562 | sshpk@^1.7.0: 1563 | version "1.16.1" 1564 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1565 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1566 | dependencies: 1567 | asn1 "~0.2.3" 1568 | assert-plus "^1.0.0" 1569 | bcrypt-pbkdf "^1.0.0" 1570 | dashdash "^1.12.0" 1571 | ecc-jsbn "~0.1.1" 1572 | getpass "^0.1.1" 1573 | jsbn "~0.1.0" 1574 | safer-buffer "^2.0.2" 1575 | tweetnacl "~0.14.0" 1576 | 1577 | ssri@^8.0.0: 1578 | version "8.0.0" 1579 | resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" 1580 | integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== 1581 | dependencies: 1582 | minipass "^3.1.1" 1583 | 1584 | string-width@^1.0.1: 1585 | version "1.0.2" 1586 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1587 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1588 | dependencies: 1589 | code-point-at "^1.0.0" 1590 | is-fullwidth-code-point "^1.0.0" 1591 | strip-ansi "^3.0.0" 1592 | 1593 | "string-width@^1.0.2 || 2": 1594 | version "2.1.1" 1595 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1596 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1597 | dependencies: 1598 | is-fullwidth-code-point "^2.0.0" 1599 | strip-ansi "^4.0.0" 1600 | 1601 | string-width@^3.0.0: 1602 | version "3.1.0" 1603 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1604 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1605 | dependencies: 1606 | emoji-regex "^7.0.1" 1607 | is-fullwidth-code-point "^2.0.0" 1608 | strip-ansi "^5.1.0" 1609 | 1610 | string-width@^4.0.0, string-width@^4.1.0: 1611 | version "4.2.0" 1612 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 1613 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 1614 | dependencies: 1615 | emoji-regex "^8.0.0" 1616 | is-fullwidth-code-point "^3.0.0" 1617 | strip-ansi "^6.0.0" 1618 | 1619 | string_decoder@~1.1.1: 1620 | version "1.1.1" 1621 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1622 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1623 | dependencies: 1624 | safe-buffer "~5.1.0" 1625 | 1626 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1627 | version "3.0.1" 1628 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1629 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1630 | dependencies: 1631 | ansi-regex "^2.0.0" 1632 | 1633 | strip-ansi@^4.0.0: 1634 | version "4.0.0" 1635 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1636 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1637 | dependencies: 1638 | ansi-regex "^3.0.0" 1639 | 1640 | strip-ansi@^5.1.0: 1641 | version "5.2.0" 1642 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1643 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1644 | dependencies: 1645 | ansi-regex "^4.1.0" 1646 | 1647 | strip-ansi@^6.0.0: 1648 | version "6.0.0" 1649 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1650 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1651 | dependencies: 1652 | ansi-regex "^5.0.0" 1653 | 1654 | supports-color@^5.3.0: 1655 | version "5.5.0" 1656 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1657 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1658 | dependencies: 1659 | has-flag "^3.0.0" 1660 | 1661 | supports-color@^7.0.0, supports-color@^7.1.0: 1662 | version "7.1.0" 1663 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 1664 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 1665 | dependencies: 1666 | has-flag "^4.0.0" 1667 | 1668 | tar@^4.4.12: 1669 | version "4.4.13" 1670 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 1671 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 1672 | dependencies: 1673 | chownr "^1.1.1" 1674 | fs-minipass "^1.2.5" 1675 | minipass "^2.8.6" 1676 | minizlib "^1.2.1" 1677 | mkdirp "^0.5.0" 1678 | safe-buffer "^5.1.2" 1679 | yallist "^3.0.3" 1680 | 1681 | tar@^6.0.1, tar@^6.0.2: 1682 | version "6.0.2" 1683 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39" 1684 | integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg== 1685 | dependencies: 1686 | chownr "^2.0.0" 1687 | fs-minipass "^2.0.0" 1688 | minipass "^3.0.0" 1689 | minizlib "^2.1.0" 1690 | mkdirp "^1.0.3" 1691 | yallist "^4.0.0" 1692 | 1693 | term-size@^2.1.0: 1694 | version "2.2.0" 1695 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" 1696 | integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== 1697 | 1698 | terser@^4.6.12, terser@^4.7.0: 1699 | version "4.8.0" 1700 | resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" 1701 | integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== 1702 | dependencies: 1703 | commander "^2.20.0" 1704 | source-map "~0.6.1" 1705 | source-map-support "~0.5.12" 1706 | 1707 | tough-cookie@~2.5.0: 1708 | version "2.5.0" 1709 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1710 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1711 | dependencies: 1712 | psl "^1.1.28" 1713 | punycode "^2.1.1" 1714 | 1715 | tslib@1.11.2: 1716 | version "1.11.2" 1717 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9" 1718 | integrity sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== 1719 | 1720 | tunnel-agent@^0.6.0: 1721 | version "0.6.0" 1722 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1723 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1724 | dependencies: 1725 | safe-buffer "^5.0.1" 1726 | 1727 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1728 | version "0.14.5" 1729 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1730 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1731 | 1732 | type-fest@^0.8.1: 1733 | version "0.8.1" 1734 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1735 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1736 | 1737 | typescript@^3.9.5: 1738 | version "3.9.5" 1739 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" 1740 | integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== 1741 | 1742 | unique-filename@^1.1.1: 1743 | version "1.1.1" 1744 | resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" 1745 | integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== 1746 | dependencies: 1747 | unique-slug "^2.0.0" 1748 | 1749 | unique-slug@^2.0.0: 1750 | version "2.0.2" 1751 | resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" 1752 | integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== 1753 | dependencies: 1754 | imurmurhash "^0.1.4" 1755 | 1756 | universalify@^0.1.0: 1757 | version "0.1.2" 1758 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 1759 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1760 | 1761 | uri-js@^4.2.2: 1762 | version "4.2.2" 1763 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1764 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1765 | dependencies: 1766 | punycode "^2.1.0" 1767 | 1768 | util-deprecate@~1.0.1: 1769 | version "1.0.2" 1770 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1771 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1772 | 1773 | uuid@^3.3.2: 1774 | version "3.4.0" 1775 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1776 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 1777 | 1778 | validate-npm-package-name@^3.0.0: 1779 | version "3.0.0" 1780 | resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" 1781 | integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= 1782 | dependencies: 1783 | builtins "^1.0.3" 1784 | 1785 | verror@1.10.0: 1786 | version "1.10.0" 1787 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1788 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1789 | dependencies: 1790 | assert-plus "^1.0.0" 1791 | core-util-is "1.0.2" 1792 | extsprintf "^1.2.0" 1793 | 1794 | which@^1.3.1: 1795 | version "1.3.1" 1796 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1797 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1798 | dependencies: 1799 | isexe "^2.0.0" 1800 | 1801 | which@^2.0.2: 1802 | version "2.0.2" 1803 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1804 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1805 | dependencies: 1806 | isexe "^2.0.0" 1807 | 1808 | wide-align@^1.1.0: 1809 | version "1.1.3" 1810 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1811 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1812 | dependencies: 1813 | string-width "^1.0.2 || 2" 1814 | 1815 | widest-line@^3.1.0: 1816 | version "3.1.0" 1817 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1818 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1819 | dependencies: 1820 | string-width "^4.0.0" 1821 | 1822 | wrappy@1: 1823 | version "1.0.2" 1824 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1825 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1826 | 1827 | yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: 1828 | version "3.1.1" 1829 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 1830 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 1831 | 1832 | yallist@^4.0.0: 1833 | version "4.0.0" 1834 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1835 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1836 | --------------------------------------------------------------------------------