├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── Runpkg-Hero.png ├── components ├── AlgoliaLogo.js ├── Article.js ├── Editor.js ├── FileIcon.js ├── FileOverview.js ├── FolderIcon.js ├── Footer.js ├── FormidableLogo.js ├── GitHubLogo.js ├── Link.js ├── Main.js ├── Nav.js ├── NotFoundIcon.js ├── NpmLogo.js ├── PackageIcon.js ├── PackageOverview.js ├── PrettierIcon.js ├── RadioGroup.js ├── RegistryOverview.js ├── RunpkgIcon.js ├── SearchIcon.js ├── SearchInput.js ├── Spinner.js ├── Template.js └── TreeView.js ├── favicon.ico ├── index.html ├── index.js ├── netlify.toml ├── package.json ├── reset.css ├── sw.js ├── utils ├── analyzeFile.js ├── es-module-shim.js ├── formatBytes.js ├── globalState.js ├── parseUrl.js └── rplus.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vscode 3 | /node_modules 4 | yarn-error.log 5 | cypress/screenshots -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thank you for looking into contributing to runpkg! 4 | 5 | ## Setup 6 | 7 | ### Clone this repo 8 | 9 | ```bash 10 | # HTTPS 11 | git clone https://github.com/FormidableLabs/runpkg.git && cd runpkg 12 | 13 | # or use SSH 14 | git clone git@github.com:FormidableLabs/runpkg.git && cd runpkg 15 | ``` 16 | 17 | ### Install dev dependencies 18 | 19 | ```bash 20 | yarn 21 | # or 22 | npm i 23 | ``` 24 | 25 | ### Run locally 26 | 27 | After installing the dependencies, you can run the `start` script, which will open the app in your default browser: 28 | 29 | ```bash 30 | yarn start 31 | # or 32 | npm start 33 | ``` 34 | 35 | > Live reload is enabled by default with [servor](https://github.com/lukejacksonn/servor), so when you make changes to your code the browser will automatically reload the tab to reflect the saved changes. 36 | 37 | ## Contributor Covenant Code of Conduct 38 | 39 | ### Our Pledge 40 | 41 | In the interest of fostering an open and welcoming environment, we as 42 | contributors and maintainers pledge to making participation in our project and 43 | our community a harassment-free experience for everyone, regardless of age, body 44 | size, disability, ethnicity, gender identity and expression, level of experience, 45 | nationality, personal appearance, race, religion, or sexual identity and 46 | orientation. 47 | 48 | ### Our Standards 49 | 50 | Examples of behavior that contributes to creating a positive environment 51 | include: 52 | 53 | - Using welcoming and inclusive language 54 | - Being respectful of differing viewpoints and experiences 55 | - Gracefully accepting constructive criticism 56 | - Focusing on what is best for the community 57 | - Showing empathy towards other community members 58 | 59 | Examples of unacceptable behavior by participants include: 60 | 61 | - The use of sexualized language or imagery and unwelcome sexual attention or 62 | advances 63 | - Trolling, insulting/derogatory comments, and personal or political attacks 64 | - Public or private harassment 65 | - Publishing others' private information, such as a physical or electronic 66 | address, without explicit permission 67 | - Other conduct which could reasonably be considered inappropriate in a 68 | professional setting 69 | 70 | ### Our Responsibilities 71 | 72 | Project maintainers are responsible for clarifying the standards of acceptable 73 | behavior and are expected to take appropriate and fair corrective action in 74 | response to any instances of unacceptable behavior. 75 | 76 | Project maintainers have the right and responsibility to remove, edit, or 77 | reject comments, commits, code, wiki edits, issues, and other contributions 78 | that are not aligned to this Code of Conduct, or to ban temporarily or 79 | permanently any contributor for other behaviors that they deem inappropriate, 80 | threatening, offensive, or harmful. 81 | 82 | ### Scope 83 | 84 | This Code of Conduct applies both within project spaces and in public spaces 85 | when an individual is representing the project or its community. Examples of 86 | representing a project or community include using an official project e-mail 87 | address, posting via an official social media account, or acting as an appointed 88 | representative at an online or offline event. Representation of a project may be 89 | further defined and clarified by project maintainers. 90 | 91 | ### Enforcement 92 | 93 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 94 | reported by contacting the project team at coc@formidable.com. All 95 | complaints will be reviewed and investigated and will result in a response that 96 | is deemed necessary and appropriate to the circumstances. The project team is 97 | obligated to maintain confidentiality with regard to the reporter of an incident. 98 | Further details of specific enforcement policies may be posted separately. 99 | 100 | Project maintainers who do not follow or enforce the Code of Conduct in good 101 | faith may face temporary or permanent repercussions as determined by other 102 | members of the project's leadership. 103 | 104 | ### Attribution 105 | 106 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 107 | available at [http://contributor-covenant.org/version/1/4][version] 108 | 109 | [homepage]: http://contributor-covenant.org 110 | [version]: http://contributor-covenant.org/version/1/4/ 111 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Formidable 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 | [![Runpkg — Formidable, We build the modern web](https://raw.githubusercontent.com/FormidableLabs/runpkg/master/Runpkg-Hero.png)](https://formidable.com/open-source/) 2 | 3 | [![Maintenance Status][maintenance-image]](#maintenance-status) 4 | 5 | > the online package explorer 6 | 7 | Runpkg turns a static file into an interactive and informative browsing experience. It lets you navigate any JavaScript package on npm thanks to [unpkg.com](https://unpkg.com), a popular and reliable CDN mirror of the npm registry. You can use this tool to learn more about the inner workings of your project's dependencies; find out how modules work, what they depend on, the size of specific imports as well as other useful metadata. 8 | 9 | --- 10 | 11 | ![runpkg](https://user-images.githubusercontent.com/1457604/69634098-77fdcc00-1049-11ea-82db-c2f23cf87179.gif) 12 | 13 | ## Features 14 | 15 | - 🔭 Navigable project directory listing 16 | - 🎨 Syntax highlighted file contents 17 | - 📝 Insights through static analysis 18 | 19 | ## Usage 20 | 21 | To view a package or module in the browser with runpkg, prepend any unpkg url with: `r`. For example: 22 | 23 | | Source | URL | 24 | | ------ | ---------------------------------------------------------------------------------------------- | 25 | | unpkg | [`https://unpkg.com/es-react@16.8.30/index.js`](https://unpkg.com/es-react@16.8.30/index.js) | 26 | | runpkg | [`https://runpkg.com/es-react@16.8.30/index.js`](https://runpkg.com/es-react@16.8.30/index.js) | 27 | 28 | You will be redirected to runpkg which will display the relevant package and file. You can navigate around the package using the 'Package' panel which contains a directory listing. The 'File' tab will also display any information uncovered during static analysis. 29 | 30 | > Note if browsing a directory then runpkg will ignore the trailing `/` and take you to the entry point. 31 | 32 | ## Development 33 | 34 | See [CONTRIBUTING.md](./CONTRIBUTING.md) for instructions on how to run this project locally, contribute, and to see our code of conduct. 35 | 36 | ## Local URLs 37 | 38 | As we're not using Netlify to redirect URLs locally, you have to pass in the package or file part of the request in as a search param. Notice the `?` in the local URL. For example: 39 | 40 | | Source | URL | 41 | | --------- | -------------------------------------------------- | 42 | | unpkg | `https://unpkg.com/es-react@16.8.30/index.js` | 43 | | localhost | `http://localhost:8080/?es-react@16.8.30/index.js` | 44 | 45 | ## Browsers Supported 46 | 47 | | Browser | Supported | Versions | 48 | | ----------------- | --------- | ----------- | 49 | | Chrome | Yes | 73+ | 50 | | Chrome (Android) | Yes | 73+ | 51 | | Firefox | Yes | 66+ | 52 | | Firefox (Android) | Yes | 66+ | 53 | | Safari | Yes | 11+ | 54 | | Safari (iOS) | Yes | 11+ | 55 | | Opera | Yes | 59+ | 56 | | Edge (Blink) | Yes | Dev, Canary | 57 | | Edge (EdgeHTML) | No | | 58 | | IE 11 | No | | 59 | 60 | ## Testing 61 | 62 | We're currently doing end to end tests via Cypress, you can run them using the following: 63 | 64 | ```bash 65 | yarn test 66 | # or 67 | npm run test 68 | ``` 69 | 70 | ## Maintenance Status 71 | 72 | **Active:** Formidable is actively working on this project, and we expect to continue for work for the foreseeable future. Bug reports, feature requests and pull requests are welcome. 73 | 74 | ## Licence 75 | 76 | MIT 77 | 78 | [maintenance-image]: https://img.shields.io/badge/maintenance-active-green.svg?color=brightgreen&style=flat 79 | -------------------------------------------------------------------------------- /Runpkg-Hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FormidableLabs/runpkg/6344f7c8c0184da2f3d74224dde38d84545ce0ad/Runpkg-Hero.png -------------------------------------------------------------------------------- /components/AlgoliaLogo.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | 3 | const styles = { 4 | algoliaLogo: css` 5 | margin-top: 1em; 6 | height: 1.2em; 7 | `, 8 | }; 9 | 10 | export default html` 11 | 17 | 18 | 22 | 26 | 30 | 34 | 35 | 36 | `; 37 | -------------------------------------------------------------------------------- /components/Article.js: -------------------------------------------------------------------------------- 1 | /* global prettier, prettierPlugins, marked */ 2 | import { html, css } from '../utils/rplus.js'; 3 | 4 | import Editor from './Editor.js'; 5 | import FileIcon from './FileIcon.js'; 6 | import PrettierIcon from './PrettierIcon.js'; 7 | import FormidableLogo from './FormidableLogo.js'; 8 | import RunpkgIcon from './RunpkgIcon.js'; 9 | import NotFoundIcon from './NotFoundIcon.js'; 10 | import { useStateValue } from '../utils/globalState.js'; 11 | 12 | export default () => { 13 | const [{ noUrlPackageFound, request, cache }, dispatch] = useStateValue(); 14 | const fileData = cache['https://unpkg.com/' + request.path] || {}; 15 | return noUrlPackageFound 16 | ? html` 17 |
18 |
19 | 20 | ${FormidableLogo} 21 | 22 | ${NotFoundIcon} 23 |

24 | Please make sure you typed your package name correctly in the url, 25 | or use our Registry search first. 26 |

27 | 28 | 31 | 32 |
33 |
34 | ` 35 | : html` 36 |
37 | ${request.path 38 | ? html` 39 |
40 |

41 | ${FileIcon} 42 | 43 | ${request.path} 44 | 45 |

46 | 66 |
67 | ` 68 | : html` 69 |
70 | 74 | ${FormidableLogo} 75 | 76 | ${RunpkgIcon} 77 |

Search for and select a package to explore its contents

78 | 82 | 85 | 86 |
87 | `} 88 | ${fileData.extension === 'md' 89 | ? html` 90 |
91 |
96 |
97 | ` 98 | : html` 99 | <${Editor} key="editor" /> 100 | `} 101 |
102 | `; 103 | }; 104 | 105 | const styles = { 106 | header: css` 107 | display: flex; 108 | align-items: center; 109 | padding: 1rem 1.38rem; 110 | background: rgba(0, 0, 0, 0.162); 111 | > h1 { 112 | display: flex; 113 | align-items: center; 114 | color: rgba(255, 255, 255, 0.62); 115 | overflow: hidden; 116 | > svg { 117 | flex: none; 118 | width: 1.38rem; 119 | height: 1.38rem; 120 | margin-right: 1rem; 121 | fill: rgba(255, 255, 255, 0.38); 122 | } 123 | > span { 124 | overflow: hidden; 125 | text-overflow: ellipsis; 126 | white-space: nowrap; 127 | } 128 | } 129 | > button { 130 | display: flex; 131 | align-items: center; 132 | background: none; 133 | border: 1px solid rgba(0, 0, 0, 0.2); 134 | padding: 1rem; 135 | margin-left: auto; 136 | color: rgba(255, 255, 255, 0.8); 137 | font-size: 1rem; 138 | > span { 139 | white-space: nowrap; 140 | } 141 | > svg { 142 | width: 1rem; 143 | height: 1rem; 144 | } 145 | > * + * { 146 | margin-left: 0.62rem; 147 | } 148 | } 149 | `, 150 | container: css` 151 | grid-area: article; 152 | overflow: hidden; 153 | flex: 1 0 62%; 154 | display: flex; 155 | flex-direction: column; 156 | 157 | @media screen and (max-width: 800px) { 158 | height: 62vh; 159 | } 160 | 161 | pre { 162 | color: rgba(255, 255, 255, 0.9); 163 | } 164 | `, 165 | welcome: css` 166 | display: flex; 167 | align-items: center; 168 | justify-content: center; 169 | flex-direction: column; 170 | padding: 1rem; 171 | width: 100%; 172 | height: 100%; 173 | color: rgba(255, 255, 255, 0.62); 174 | flex: none; 175 | svg { 176 | margin-bottom: 2rem; 177 | width: calc(10rem + 5vw); 178 | .abbr { 179 | font-size: 230px; 180 | font-family: 'Helvetica'; 181 | } 182 | .desc { 183 | font-size: 44px; 184 | font-family: 'Helvetica-Bold', 'Helvetica', sans-serif; 185 | font-weight: bold; 186 | } 187 | } 188 | p { 189 | font-size: calc(1rem + 0.5vw); 190 | width: 30ex; 191 | text-align: center; 192 | line-height: 138%; 193 | } 194 | `, 195 | formidaLogo: css` 196 | position: absolute; 197 | top: 2vw; 198 | left: 2vw; 199 | fill: rgba(255, 255, 255, 0.1); 200 | svg { 201 | width: calc(5rem + 5vw); 202 | } 203 | `, 204 | netlifyLogo: css` 205 | margin-top: 2rem; 206 | `, 207 | markdown: css` 208 | color: #fff; 209 | line-height: 1.5; 210 | line-height: 1.5; 211 | word-wrap: break-word; 212 | padding: 3rem 3rem 4rem; 213 | width: 100%; 214 | height: 100vh; 215 | margin: 0 auto; 216 | overflow-y: scroll; 217 | -webkit-overflow-scrolling: touch; 218 | color: rgba(255, 255, 255, 0.8); 219 | 220 | > div { 221 | max-width: 960px; 222 | margin: 0 auto; 223 | } 224 | 225 | > div > * + * { 226 | margin-top: 1rem; 227 | } 228 | 229 | @media screen and (max-width: 400px) { 230 | padding: 2rem; 231 | } 232 | 233 | li { 234 | list-style: disc; 235 | list-style-position: inside; 236 | } 237 | h1, 238 | h2, 239 | h3, 240 | h4, 241 | strong { 242 | font-weight: bold; 243 | } 244 | h1 { 245 | text-align: left; 246 | font-size: 2rem; 247 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 248 | padding-bottom: 1rem; 249 | } 250 | h2 { 251 | font-size: 1.62rem; 252 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 253 | padding-bottom: 0.62rem; 254 | margin-bottom: 1rem; 255 | } 256 | h3 { 257 | font-size: 1rem; 258 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 259 | padding-bottom: 0.62rem; 260 | margin-bottom: 1rem; 261 | } 262 | img { 263 | display: block; 264 | max-width: 100%; 265 | } 266 | pre { 267 | background: rgba(0, 0, 0, 0.2); 268 | padding: 1rem; 269 | border-radius: 0.38rem; 270 | overflow-x: scroll; 271 | } 272 | 273 | a { 274 | display: inline-block; 275 | color: #f8b1f1; 276 | margin-top: 0; 277 | } 278 | table { 279 | border-collapse: collapse; 280 | color: inherit; 281 | td, 282 | th, 283 | tr { 284 | border: 1px solid rgba(255, 255, 255, 0.38); 285 | padding: 0.62rem; 286 | } 287 | } 288 | `, 289 | }; 290 | -------------------------------------------------------------------------------- /components/Editor.js: -------------------------------------------------------------------------------- 1 | import { react, html, css } from '../utils/rplus.js'; 2 | import { Prism, Highlight } from 'prism-react-renderer'; 3 | import { useStateValue } from '../utils/globalState.js'; 4 | import Link from './Link.js'; 5 | 6 | const getSelectedLineNumberFromUrl = () => 7 | location.hash && parseInt(location.hash.substr(1), 10); 8 | 9 | const handleLineNumberClick = lineNo => 10 | history.pushState(null, null, `#${lineNo}`); 11 | 12 | const removeQuotes = packageName => packageName.replace(/['"]+/g, ''); 13 | 14 | function useLastGoodState(value) { 15 | const ref = react.useRef(); 16 | react.useEffect(() => { 17 | ref.current = value || ref.current; 18 | }, [value]); 19 | return ref.current; 20 | } 21 | 22 | const languages = { 23 | html: 'markup', 24 | sh: 'bash', 25 | c: 'c', 26 | h: 'c', 27 | cpp: 'cpp', 28 | hpp: 'cpp', 29 | css: 'css', 30 | mjs: 'javascript', 31 | js: 'javascript', 32 | flow: 'javascript', 33 | jsx: 'jsx', 34 | coffee: 'coffeescript', 35 | diff: 'diff', 36 | go: 'go', 37 | gql: 'graphql', 38 | graphql: 'graphql', 39 | hbs: 'handlebars', 40 | json: 'json', 41 | less: 'less', 42 | md: 'markdown', 43 | m: 'objectivec', 44 | ml: 'ocaml', 45 | mli: 'ocaml', 46 | py: 'python', 47 | re: 'reason', 48 | rei: 'reason', 49 | sass: 'sass', 50 | scss: 'scss', 51 | sql: 'sql', 52 | tsx: 'tsx', 53 | ts: 'typescript', 54 | wasm: 'wasm', 55 | yml: 'yaml', 56 | }; 57 | 58 | const UNPKG = 'https://unpkg.com/'; 59 | 60 | export default () => { 61 | const [{ cache, request }] = useStateValue(); 62 | const selectedLine = getSelectedLineNumberFromUrl(); 63 | const container = react.useRef(); 64 | const lastGoodState = useLastGoodState(cache[UNPKG + request.path]); 65 | const fileData = cache[UNPKG + request.path] || lastGoodState; 66 | const loading = !fileData || request.path !== fileData.url.replace(UNPKG, ''); 67 | 68 | const scrollToLine = () => { 69 | const selectedLineEl = document.getElementById(`L-${selectedLine}`); 70 | if (selectedLineEl) { 71 | selectedLineEl.scrollIntoView(); 72 | container.current.scrollBy(0, -38); 73 | } 74 | }; 75 | 76 | react.useEffect(() => { 77 | if (container.current && !loading) { 78 | container.current.scrollTop = 0; 79 | scrollToLine(); 80 | } 81 | }, [loading, container.current]); 82 | 83 | return ( 84 | !!fileData && 85 | html` 86 | <${Highlight} 87 | Prism=${Prism} 88 | code=${fileData.code.slice(0, 100000)} 89 | language=${languages[fileData.extension.split('.').pop()]} 90 | theme=${undefined} 91 | > 92 | ${({ className, style, tokens, getLineProps, getTokenProps }) => html` 93 |
100 |           
101 |         ${tokens.map((line, i) => {
102 |             return html`
103 |               
108 | 113 | ${line.map(token => { 114 | const dep = 115 | fileData.dependencies[removeQuotes(token.content)]; 116 | return dep && typeof dep === 'string' 117 | ? html` 118 | <${Link} 119 | href=${`/?${dep.replace('https://unpkg.com/', '')}`} 120 | className=${styles.link} 121 | > 122 | 123 | 124 | ` 125 | : html` 126 | 127 | `; 128 | })} 129 |
130 | `; 131 | })} 132 |
133 |
134 | `} 135 | 136 | ` 137 | ); 138 | }; 139 | 140 | const styles = { 141 | container: css` 142 | flex: 1; 143 | line-height: 138%; 144 | padding: 2rem 1rem; 145 | transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); 146 | overflow-y: scroll; 147 | overflow-x: auto; 148 | -webkit-overflow-scrolling: touch; 149 | `, 150 | loading: css` 151 | opacity: 0.5; 152 | transition-delay: 0.2s; 153 | `, 154 | link: css` 155 | text-decoration: underline; 156 | text-decoration-color: #f8b1f1; 157 | `, 158 | lineActive: css` 159 | background: #ffff000f; 160 | outline: 1px solid #ffff001c; 161 | `, 162 | lineNo: css` 163 | display: inline-block; 164 | text-align: right; 165 | width: 2rem; 166 | margin-right: 2rem; 167 | opacity: 0.6; 168 | cursor: pointer; 169 | ::before { 170 | content: attr(data-linenumber); 171 | } 172 | `, 173 | code: css` 174 | line-height: 150%; 175 | `, 176 | }; 177 | -------------------------------------------------------------------------------- /components/FileIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | export default html` 3 | 4 | 7 | 10 | 11 | `; 12 | -------------------------------------------------------------------------------- /components/FileOverview.js: -------------------------------------------------------------------------------- 1 | import { react, css, html } from '../utils/rplus.js'; 2 | import Link from './Link.js'; 3 | import formatBytes from '../utils/formatBytes.js'; 4 | import { useStateValue } from '../utils/globalState.js'; 5 | import FileIcon from './FileIcon.js'; 6 | import PackageIcon from './PackageIcon.js'; 7 | import { SearchInput } from './SearchInput.js'; 8 | 9 | const FileList = ({ title, files, packageName, filter }) => html` 10 | <${react.Fragment}> 11 |
12 |

${title}

13 | ${Object.entries(files).length} Files 14 |
15 | 31 | 32 | `; 33 | 34 | export const FileOverview = () => { 35 | const [{ request, cache, dependencySearchTerm }, dispatch] = useStateValue(); 36 | const file = cache['https://unpkg.com/' + request.path]; 37 | return ( 38 | !!file && 39 | html` 40 | <${react.Fragment}> 41 | <${SearchInput} 42 | placeholder="Search for dependencies.." 43 | value=${dependencySearchTerm} 44 | onChange=${val => 45 | dispatch({ type: 'setDependencySearchTerm', payload: val })} 46 | /> 47 |
48 | ${FileIcon} 49 | 50 | ${file.url.split('/').pop()} 51 | 52 | ${formatBytes(file.size)} 53 |
54 |
55 | <${FileList} 56 | title="Dependencies" 57 | files=${file.dependencies} 58 | packageName=${`${request.name}@${request.version}`} 59 | filter=${dependencySearchTerm} 60 | /> 61 |
62 | 63 | ` 64 | ); 65 | }; 66 | 67 | const styles = { 68 | container: css` 69 | > div { 70 | display: flex; 71 | align-items: center; 72 | justify-content: space-between; 73 | padding: 0.62rem 1rem 1.62rem 1rem; 74 | small { 75 | margin-left: auto; 76 | } 77 | } 78 | > * + *, 79 | ul > * + * { 80 | border-top: 1px solid rgba(0, 0, 0, 0.2); 81 | } 82 | > *:empty { 83 | display: none; 84 | } 85 | a { 86 | display: flex; 87 | align-items: center; 88 | padding: 1rem; 89 | color: rgba(255, 255, 255, 0.8); 90 | text-decoration: none; 91 | svg { 92 | flex: none; 93 | width: 1.2rem; 94 | height: 1.2rem; 95 | fill: rgba(255, 255, 255, 0.38); 96 | margin: 0 0.62rem 0 0.2rem; 97 | } 98 | &:hover { 99 | background: rgba(0, 0, 0, 0.1); 100 | } 101 | } 102 | h2 { 103 | font-size: 1.38rem; 104 | font-weight: bold; 105 | color: rgba(255, 255, 255, 0.8); 106 | } 107 | `, 108 | file: css` 109 | padding: 1.38rem; 110 | border: 1px solid rgba(0, 0, 0, 0.2); 111 | display: flex; 112 | align-items: center; 113 | font-size: 1rem; 114 | color: rgba(255, 255, 255, 0.8); 115 | font-weight: bold; 116 | span { 117 | word-break: break-word; 118 | padding-right: 1rem; 119 | line-height: 138%; 120 | } 121 | small { 122 | font-size: 1rem; 123 | font-weight: normal; 124 | margin-left: auto; 125 | white-space: nowrap; 126 | } 127 | svg { 128 | flex: none; 129 | width: 1.62rem; 130 | height: 1.62rem; 131 | fill: rgba(255, 255, 255, 0.38); 132 | margin: 0 1rem 0 0rem; 133 | } 134 | `, 135 | }; 136 | -------------------------------------------------------------------------------- /components/FolderIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | 8 | 11 | 12 | `; 13 | -------------------------------------------------------------------------------- /components/Footer.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | 3 | import FormidableIcon from './FormidableLogo.js'; 4 | import GitHubLogo from './GitHubLogo.js'; 5 | 6 | export default () => html` 7 | 17 | `; 18 | 19 | const styles = css` 20 | background: rgba(0, 0, 0, 0.2); 21 | color: rgba(255, 255, 255, 0.6); 22 | padding: 1.38rem 1.62rem; 23 | display: flex; 24 | align-items: center; 25 | 26 | a { 27 | text-decoration: none; 28 | color: inherit; 29 | display: flex; 30 | align-items: center; 31 | justify-content: space-between; 32 | &:first-child { 33 | width: 100%; 34 | } 35 | } 36 | 37 | svg { 38 | width: 1.62rem; 39 | height: 1.62rem; 40 | fill: currentColor; 41 | margin-left: 1rem; 42 | } 43 | 44 | a > span { 45 | position: absolute; 46 | height: 1px; 47 | width: 1px; 48 | overflow: hidden; 49 | clip: rect(0, 0, 0, 0); 50 | white-space: nowrap; 51 | } 52 | `; 53 | -------------------------------------------------------------------------------- /components/FormidableLogo.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 49 | `; 50 | -------------------------------------------------------------------------------- /components/GitHubLogo.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 10 | `; 11 | -------------------------------------------------------------------------------- /components/Link.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | const pushState = url => history.pushState(null, null, url); 4 | 5 | const getOrigin = loc => 6 | loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port : ''); 7 | 8 | const isExternal = anchorElement => 9 | getOrigin(location) !== getOrigin(anchorElement); 10 | 11 | const shouldPreventDefault = e => { 12 | if ( 13 | e.button !== 0 || 14 | e.altKey || 15 | e.metaKey || 16 | e.ctrlKey || 17 | e.shiftKey || 18 | e.target.target === '_blank' || 19 | isExternal(e.currentTarget) 20 | ) { 21 | return false; 22 | } else { 23 | return true; 24 | } 25 | }; 26 | 27 | export default ({ href, children, ...rest }) => { 28 | return html` 29 | { 32 | if (shouldPreventDefault(e)) { 33 | e.preventDefault(); 34 | if (href.startsWith('/')) { 35 | pushState(`?${href.replace(/^\/\?/, '')}`); 36 | } 37 | } else { 38 | window.location = href; 39 | } 40 | }} 41 | ...${rest} 42 | > 43 | ${children} 44 | 45 | `; 46 | }; 47 | -------------------------------------------------------------------------------- /components/Main.js: -------------------------------------------------------------------------------- 1 | import { react, html, css, npm } from '../utils/rplus.js'; 2 | import { useStateValue } from '../utils/globalState.js'; 3 | import { parseUrl } from '../utils/parseUrl.js'; 4 | 5 | import Nav from './Nav.js'; 6 | import Article from './Article.js'; 7 | 8 | const replaceState = url => history.replaceState(null, null, url); 9 | const worker = new Worker('./utils/analyzeFile.js'); 10 | 11 | export default () => { 12 | const [state, dispatch] = useStateValue(); 13 | const { cache, request, packagesSearchTerm } = state; 14 | 15 | // Update the request on user navigation 16 | react.useEffect(() => { 17 | const updateRequest = () => { 18 | dispatch({ type: 'setRequest', payload: parseUrl() }); 19 | }; 20 | addEventListener('popstate', updateRequest); 21 | const pushState = window.history.pushState; 22 | window.history.pushState = function() { 23 | pushState.apply(history, arguments); 24 | updateRequest(); 25 | }; 26 | worker.addEventListener('message', e => 27 | dispatch({ type: 'setCache', payload: { [e.data.url]: e.data } }) 28 | ); 29 | }, []); 30 | 31 | // Update the page title when the request changes 32 | react.useEffect(() => { 33 | const setTitle = title => (document.title = title); 34 | if (state.fetchError) setTitle('404 | runpkg'); 35 | else if (request.name && request.version) 36 | setTitle(request.name + '@' + request.version + ' | runpkg'); 37 | else setTitle('runpkg | the package explorer'); 38 | }, [request.name, request.version]); 39 | 40 | // Resolve full path for incomplete urls 41 | react.useEffect(() => { 42 | if (request.name && (!request.version || !request.file)) 43 | fetch(`https://unpkg.com/${request.path}`) 44 | .then(response => { 45 | const { ok, url } = response; 46 | dispatch({ type: 'setRequest', payload: parseUrl(url) }); 47 | replaceState( 48 | `/?${url.replace('https://unpkg.com/', '')}${location.hash}` 49 | ); 50 | if (!ok && !request.version) { 51 | dispatch({ type: 'setNoURLPackageFound', payload: true }); 52 | } 53 | }) 54 | .catch(console.error); 55 | }, [request.path]); 56 | 57 | // Fetch directory listings for requested package 58 | react.useEffect(() => { 59 | if (request.name && request.version) 60 | fetch(`https://unpkg.com/${request.name}@${request.version}/?meta`) 61 | .then(res => res.json()) 62 | .then(res => dispatch({ type: 'setDirectory', payload: res })) 63 | .catch(console.error); 64 | }, [request.name, request.version]); 65 | 66 | // Fetch package meta data for all versions 67 | react.useEffect(() => { 68 | if (request.name) { 69 | dispatch({ type: 'setMode', payload: 'package' }); 70 | fetch(`https://registry.npmjs.org/${request.name}/`) 71 | .then(res => res.json()) 72 | .then(json => { 73 | dispatch({ type: 'setVersions', payload: json.versions }); 74 | }) 75 | .catch(console.error); 76 | } 77 | }, [request.name]); 78 | 79 | // Parse dependencies for the current code 80 | react.useEffect(() => { 81 | if (request.file && !cache['https://unpkg.com/' + request.path]) 82 | worker.postMessage('https://unpkg.com/' + request.path); 83 | }, [request.path]); 84 | 85 | // Fetch packages by search term 86 | react.useEffect(() => { 87 | npm 88 | .search([ 89 | { 90 | analyticsTags: ['runpkg'], 91 | indexName: 'npm-search', 92 | attributesToRetrieve: ['name', 'version', 'description'], 93 | params: { query: packagesSearchTerm }, 94 | }, 95 | ]) 96 | .then(res => res.results[0].hits) 97 | .then(res => dispatch({ type: 'setPackages', payload: res })); 98 | }, [packagesSearchTerm]); 99 | 100 | return html` 101 |
102 | <${Article} /> 103 | <${Nav} /> 104 |
105 | `; 106 | }; 107 | 108 | const styles = css` 109 | width: 100%; 110 | min-height: 100vh; 111 | overflow: auto; 112 | background: #2f3138; 113 | @media screen and (min-width: 800px) { 114 | display: grid; 115 | grid-template-columns: 1fr 25rem; 116 | grid-template-areas: 'article nav'; 117 | overflow: hidden; 118 | height: 100vh; 119 | } 120 | @media screen and (min-width: 1000px) { 121 | display: grid; 122 | grid-template-areas: 'article nav'; 123 | grid-template-columns: 1fr 30rem; 124 | overflow: hidden; 125 | height: 100vh; 126 | } 127 | `; 128 | -------------------------------------------------------------------------------- /components/Nav.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | import { RadioGroup } from './RadioGroup.js'; 3 | import { PackageOverview } from './PackageOverview.js'; 4 | import { RegistryOverview } from './RegistryOverview.js'; 5 | import { FileOverview } from './FileOverview.js'; 6 | import { useStateValue } from '../utils/globalState.js'; 7 | 8 | export default () => { 9 | const [{ mode, noUrlPackageFound }, dispatch] = useStateValue(); 10 | const modeOptions = { 11 | registry: mode === 'registry' || noUrlPackageFound, 12 | package: mode === 'package' && !noUrlPackageFound, 13 | file: mode === 'file' && !noUrlPackageFound, 14 | }; 15 | return html` 16 | 35 | `; 36 | }; 37 | 38 | const styles = css` 39 | width: 100%; 40 | grid-area: nav; 41 | background: #26272c; 42 | color: #fff; 43 | padding: 2rem; 44 | overflow-x: hidden; 45 | > * + * { 46 | margin-top: 1.38rem; 47 | } 48 | @media screen and (min-width: 800px) { 49 | height: 100vh; 50 | overflow-y: scroll; 51 | transform: translateX(0%); 52 | } 53 | @media screen and (max-width: 400px) { 54 | padding: 1.38rem; 55 | > * + * { 56 | margin-top: 1rem; 57 | } 58 | } 59 | `; 60 | -------------------------------------------------------------------------------- /components/NotFoundIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | 10 | 15 | 20 | 25 | 32 | 33 | `; 34 | -------------------------------------------------------------------------------- /components/NpmLogo.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | NPM repo link 6 | 10 | 11 | `; 12 | -------------------------------------------------------------------------------- /components/PackageIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | 8 | 11 | 12 | `; 13 | -------------------------------------------------------------------------------- /components/PackageOverview.js: -------------------------------------------------------------------------------- 1 | import { react, html, css } from '../utils/rplus.js'; 2 | import { SearchInput } from './SearchInput.js'; 3 | import FolderIcon from './FolderIcon.js'; 4 | import FileIcon from './FileIcon.js'; 5 | import Link from './Link.js'; 6 | import { useStateValue } from '../utils/globalState.js'; 7 | import { Package } from './RegistryOverview.js'; 8 | import formatBytes from '../utils/formatBytes.js'; 9 | 10 | import { TreeView, TreeItem } from './TreeView.js'; 11 | 12 | const SEARCH_FILES_RENDER_LIMIT = 100; 13 | 14 | const pushState = url => history.pushState(null, null, url); 15 | 16 | const flatten = arr => 17 | arr.reduce( 18 | (acc, cur) => [...acc, ...(cur.files ? flatten(cur.files) : [cur])], 19 | [] 20 | ); 21 | 22 | const File = ({ packageName, packageVersion, meta, displayFullPath = false }) => 23 | html` 24 | <${Link} 25 | href=${`/?${packageName}@${packageVersion}${meta.path}`} 26 | className=${styles.item} 27 | > 28 |
29 | ${FileIcon} 30 | ${meta.path.split('/').pop()} 31 | ${ 32 | displayFullPath 33 | ? html` 34 | ${meta.path.substring(0, meta.path.lastIndexOf('/'))} 37 | ` 38 | : null 39 | } 40 |
41 | ${formatBytes(meta.size)} 42 | 43 | `; 44 | 45 | const Node = ({ meta, packageName, packageVersion }) => { 46 | const directory = meta.type === 'directory'; 47 | 48 | const directoryFileSize = react.useMemo(() => { 49 | if (directory) { 50 | const files = flatten(meta.files); 51 | const totalSize = files.reduce((acc, cur) => acc + cur.size, 0); 52 | return formatBytes(totalSize); 53 | } 54 | }, [directory, meta]); 55 | 56 | return html` 57 | <${TreeItem} 58 | label=${!directory 59 | ? html` 60 | <${File} 61 | packageName=${packageName} 62 | packageVersion=${packageVersion} 63 | meta=${meta} 64 | /> 65 | ` 66 | : html` 67 |
68 |
69 | ${FolderIcon} 70 | ${meta.path.split('/').pop()} 71 |
72 | ${directoryFileSize} (${meta.files.length} Files) 73 |
74 | `} 75 | > 76 | ${directory && 77 | meta.files.map( 78 | node => html` 79 | <${Node} 80 | key=${node.path} 81 | meta=${node} 82 | packageName=${packageName} 83 | packageVersion=${packageVersion} 84 | /> 85 | ` 86 | )} 87 | 88 | `; 89 | }; 90 | 91 | export const PackageOverview = () => { 92 | const [ 93 | { versions, request, directory, fileSearchTerm }, 94 | dispatch, 95 | ] = useStateValue(); 96 | 97 | const [ 98 | searchStringForShowAllResults, 99 | setSearchStringForShowAllResults, 100 | ] = react.useState(null); 101 | 102 | const flatFiles = react.useMemo( 103 | () => (directory && directory.files ? flatten(directory.files) : []), 104 | [directory] 105 | ); 106 | 107 | const search = react.useCallback( 108 | file => 109 | file.path 110 | .toLowerCase() 111 | .match( 112 | fileSearchTerm.toLowerCase().replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1') 113 | ), 114 | [fileSearchTerm] 115 | ); 116 | 117 | react.useEffect(() => { 118 | if ( 119 | searchStringForShowAllResults !== null && 120 | fileSearchTerm !== searchStringForShowAllResults 121 | ) { 122 | setSearchStringForShowAllResults(null); 123 | } 124 | }, [fileSearchTerm, searchStringForShowAllResults]); 125 | 126 | if (!versions || !directory || !versions[request.version] || !directory.files) 127 | return null; 128 | 129 | const { name, version, description } = versions[request.version]; 130 | const handleVersionChange = v => pushState(`?${name}@${v}`); 131 | const VersionOption = x => 132 | html` 133 | 134 | `; 135 | 136 | const matchingFiles = fileSearchTerm ? flatFiles.filter(search) : []; 137 | const expandableFilesCount = matchingFiles.length - SEARCH_FILES_RENDER_LIMIT; 138 | 139 | const canShowMoreSearchFiles = 140 | searchStringForShowAllResults !== fileSearchTerm && 141 | expandableFilesCount > 0; 142 | const searchFilesToRender = canShowMoreSearchFiles 143 | ? matchingFiles.slice(0, SEARCH_FILES_RENDER_LIMIT) 144 | : matchingFiles; 145 | 146 | return html` 147 | <${react.Fragment}> 148 | <${SearchInput} 149 | placeholder="Search for files.." 150 | value=${fileSearchTerm} 151 | onChange=${val => dispatch({ type: 'setFileSearchTerm', payload: val })} 152 | /> 153 | <${Package} name=${name} version=${version} description=${description} /> 154 | 161 | ${ 162 | fileSearchTerm 163 | ? html` 164 |
165 | ${searchFilesToRender.map( 166 | file => html` 167 | <${File} 168 | key=${file.path} 169 | meta=${file} 170 | packageName=${name} 171 | packageVersion=${version} 172 | displayFullPath=${true} 173 | /> 174 | ` 175 | )} 176 | ${canShowMoreSearchFiles 177 | ? html` 178 | 192 | ` 193 | : null} 194 |
195 | ` 196 | : html` 197 | <${TreeView}> 198 | ${directory.files.map( 199 | node => 200 | html` 201 | <${Node} 202 | key=${node.path} 203 | meta=${node} 204 | packageName=${name} 205 | packageVersion=${version} 206 | /> 207 | ` 208 | )} 209 | 210 | ` 211 | } 212 | 213 | `; 214 | }; 215 | 216 | export const styles = { 217 | item: css` 218 | position: relative; 219 | display: flex; 220 | align-items: center; 221 | justify-content: space-between; 222 | width: 100%; 223 | padding: 1rem; 224 | font-size: 1rem; 225 | line-height: 1.38; 226 | color: rgba(255, 255, 255, 0.8); 227 | 228 | text-decoration: none; 229 | background: none; 230 | cursor: pointer; 231 | &:hover, 232 | &:focus { 233 | color: #fff; 234 | } 235 | 236 | svg { 237 | flex: none; 238 | width: 1.2rem; 239 | height: 1.2rem; 240 | fill: rgba(255, 255, 255, 0.38); 241 | margin: 0 0.62rem 0 0.2rem; 242 | } 243 | 244 | div { 245 | display: flex; 246 | align-items: center; 247 | overflow: hidden; 248 | } 249 | 250 | small { 251 | white-space: nowrap; 252 | margin-left: 1rem; 253 | font-size: 1rem; 254 | } 255 | 256 | strong { 257 | font-size: 1rem; 258 | font-weight: bold; 259 | } 260 | 261 | span { 262 | white-space: nowrap; 263 | text-overflow: ellipsis; 264 | overflow: hidden; 265 | 266 | &:nth-of-type(2) { 267 | flex: 1; 268 | margin-left: 0.2rem; 269 | opacity: 0.5; 270 | font-size: 0.9rem; 271 | } 272 | } 273 | `, 274 | }; 275 | -------------------------------------------------------------------------------- /components/PrettierIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | `; 32 | -------------------------------------------------------------------------------- /components/RadioGroup.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | 3 | export const RadioGroup = ({ options, onClick }) => html` 4 |
5 | ${Object.entries(options).map( 6 | ([key, selected]) => html` 7 | 15 | ` 16 | )} 17 |
18 | `; 19 | 20 | const styles = css` 21 | display: flex; 22 | background: rgba(0, 0, 0, 0.1); 23 | border-radius: 0.38rem; 24 | overflow: hidden; 25 | > button { 26 | padding: 1.38rem 1rem; 27 | font-size: 1rem; 28 | flex: 1 1 100%; 29 | border: 0; 30 | color: #fff; 31 | text-transform: capitalize; 32 | background: rgba(0, 0, 0, 0.1); 33 | &:not(:disabled) { 34 | opacity: 0.38; 35 | background: transparent; 36 | } 37 | &:hover { 38 | background: rgba(0, 0, 0, 0.1); 39 | } 40 | } 41 | > * + * { 42 | border-left: 1px solid rgba(0, 0, 0, 0.2) !important; 43 | } 44 | `; 45 | -------------------------------------------------------------------------------- /components/RegistryOverview.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | 3 | import { SearchInput } from './SearchInput.js'; 4 | import PackageIcon from './PackageIcon.js'; 5 | import { useStateValue } from '../utils/globalState.js'; 6 | import AlgoliaLogo from './AlgoliaLogo.js'; 7 | 8 | const pushState = url => history.pushState(null, null, url); 9 | 10 | export const RegistryOverview = () => { 11 | const [{ packages, packagesSearchTerm }, dispatch] = useStateValue(); 12 | return html` 13 |
14 | <${SearchInput} 15 | placeholder="Search for packages.." 16 | value=${packagesSearchTerm} 17 | onChange=${val => 18 | dispatch({ type: 'setPackagesSearchTerm', payload: val })} 19 | /> 20 | ${AlgoliaLogo} 21 | 24 |
25 | `; 26 | }; 27 | 28 | export const Package = ({ name, version, description }) => html` 29 |
  • 30 | { 34 | e.preventDefault(); 35 | pushState(`?${name}@${version}`); 36 | }} 37 | > 38 |
    39 | ${PackageIcon} 40 |

    ${name}

    41 | v${version} 42 |
    43 |

    ${description}

    44 |
    45 |
  • 46 | `; 47 | 48 | const styles = { 49 | container: css` 50 | > * + * { 51 | margin-top: 1rem; 52 | } 53 | `, 54 | item: css` 55 | position: relative; 56 | cursor: pointer; 57 | text-decoration: none; 58 | color: rgba(255, 255, 255, 0.62); 59 | border: 1px solid rgba(0, 0, 0, 0.2); 60 | display: flex; 61 | flex-direction: column; 62 | align-items: flex-start; 63 | padding: 1.38rem 1.62rem; 64 | > div { 65 | display: flex; 66 | align-items: center; 67 | } 68 | small { 69 | position: absolute; 70 | top: 0rem; 71 | right: 0rem; 72 | display: block; 73 | font-size: 0.8rem; 74 | padding-top: 0.38rem; 75 | background: rgba(0, 0, 0, 0.1); 76 | padding: 0.38rem; 77 | } 78 | svg { 79 | width: 1.8rem; 80 | height: 1.8rem; 81 | margin-right: 0.8rem; 82 | fill: rgba(255, 255, 255, 0.38); 83 | } 84 | > * + *:not(:empty) { 85 | margin-top: 0.62rem; 86 | } 87 | &:hover { 88 | background: rgba(0, 0, 0, 0.1); 89 | } 90 | > p { 91 | line-height: 162%; 92 | } 93 | h2 { 94 | font-size: 1.2rem; 95 | font-weight: bold; 96 | color: rgba(255, 255, 255, 0.8); 97 | word-break: break-word; 98 | } 99 | `, 100 | }; 101 | -------------------------------------------------------------------------------- /components/RunpkgIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | 6 | 11 | 18 | 25 | 33 | Rp 34 | 35 | 43 | RUNPKG 44 | 45 | 46 | 47 | `; 48 | -------------------------------------------------------------------------------- /components/SearchIcon.js: -------------------------------------------------------------------------------- 1 | import { html } from '../utils/rplus.js'; 2 | 3 | export default html` 4 | 5 | Search for packages 6 | 7 | 11 | 12 | `; 13 | -------------------------------------------------------------------------------- /components/SearchInput.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | import SearchIcon from './SearchIcon.js'; 3 | 4 | export const SearchInput = ({ placeholder, value, onChange }) => html` 5 |
    6 | onChange(e.target.value)} 10 | placeholder=${placeholder} 11 | /> 12 | ${SearchIcon} 13 |
    14 | `; 15 | 16 | const styles = css` 17 | display: flex; 18 | align-items: center; 19 | width: 100%; 20 | background: rgba(0, 0, 0, 0.2); 21 | > input { 22 | width: 100%; 23 | padding: 1.38rem; 24 | border: 0; 25 | font-size: 1.38rem; 26 | background: transparent; 27 | color: rgba(255, 255, 255, 0.62); 28 | } 29 | > svg { 30 | width: 2.8rem; 31 | height: 2.8rem; 32 | fill: rgba(255, 255, 255, 0.2); 33 | margin: 0 1rem; 34 | } 35 | `; 36 | -------------------------------------------------------------------------------- /components/Spinner.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | 3 | export default html` 4 |
    65 | `; 66 | -------------------------------------------------------------------------------- /components/Template.js: -------------------------------------------------------------------------------- 1 | import { html, css } from '../utils/rplus.js'; 2 | import { useStateValue } from '../utils/globalState.js'; 3 | 4 | export const TemplateComponent = (props = {}) => { 5 | const [state, dispatch] = useStateValue(); 6 | return html` 7 |
    dispatch({ type: 'action', payload: state + 1 })} 10 | > 11 | ${props.children} 12 |
    13 | `; 14 | }; 15 | 16 | const styles = { 17 | container: css` 18 | background: red; 19 | `, 20 | }; 21 | -------------------------------------------------------------------------------- /components/TreeView.js: -------------------------------------------------------------------------------- 1 | import { react, html, css } from '../utils/rplus.js'; 2 | 3 | const TreeView = ({ children }) => 4 | html` 5 | 10 | `; 11 | 12 | const TreeItem = ({ children, label, root = false }) => { 13 | const expandable = children && react.Children.count(children) > 0; 14 | const [expanded, setExpanded] = react.useState(root); 15 | 16 | return expandable 17 | ? html` 18 | 36 | ` 37 | : html` 38 |
  • ${label}
  • 39 | `; 40 | }; 41 | 42 | export const styles = { 43 | root: css` 44 | margin-left: -1.38rem; 45 | border-left: none; 46 | 47 | li { 48 | position: relative; 49 | } 50 | `, 51 | branch: css` 52 | position: relative; 53 | word-break: break-word; 54 | margin-left: 1.5rem; 55 | 56 | &:before { 57 | display: block; 58 | content: ''; 59 | position: absolute; 60 | top: 0; 61 | left: 0; 62 | height: 100%; 63 | border-right: 2px dotted #4b4b4e; 64 | } 65 | `, 66 | button: css` 67 | padding: 0; 68 | margin: 0; 69 | background: none; 70 | border: none; 71 | width: 100%; 72 | cursor: pointer; 73 | `, 74 | chevron: css` 75 | position: absolute; 76 | top: 0; 77 | left: 0px; 78 | top: 50%; 79 | font-size: 0.8rem; 80 | padding: 0.2rem; 81 | z-index: 2; 82 | background: #26272d; 83 | color: #9c9c9c; 84 | transform: translate(-50%, -50%); 85 | `, 86 | expanded: css` 87 | transform: translate(-50%, -50%) rotate(90deg); 88 | `, 89 | leaf: css` 90 | position: relative; 91 | margin-left: 1.5rem; 92 | 93 | &:before, 94 | &:after { 95 | display: block; 96 | content: ''; 97 | position: absolute; 98 | left: 0; 99 | border-color: ; 100 | } 101 | 102 | &:after { 103 | top: 50%; 104 | width: 1rem; 105 | border-bottom: 2px solid #4b4b4e; 106 | } 107 | 108 | &:before { 109 | top: 0; 110 | height: 100%; 111 | border-left: 2px solid #4b4b4e; 112 | } 113 | &:last-child { 114 | &:before { 115 | height: 50%; 116 | } 117 | } 118 | `, 119 | }; 120 | 121 | export { TreeView, TreeItem }; 122 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FormidableLabs/runpkg/6344f7c8c0184da2f3d74224dde38d84545ce0ad/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | runpkg | the package explorer 6 | 10 | 11 | 16 | 17 | 18 | 41 | 42 | 46 | 50 | 51 | 52 | 53 | 57 | 61 | 65 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { react, html } from '../utils/rplus.js'; 2 | import { StateProvider } from './utils/globalState.js'; 3 | import { parseUrl } from './utils/parseUrl.js'; 4 | 5 | import Main from './components/Main.js'; 6 | 7 | if ('serviceWorker' in navigator) { 8 | navigator.serviceWorker 9 | .register('./sw.js') 10 | .then(() => console.log('[runpkg] service worker registered')) 11 | .catch(err => console.log(err)); 12 | } 13 | 14 | const initialState = { 15 | packages: [], 16 | packagesSearchTerm: '', 17 | fileSearchTerm: '', 18 | noUrlPackageFound: '', 19 | dependencySearchTerm: '', 20 | request: parseUrl(), 21 | directory: {}, 22 | versions: {}, 23 | cache: {}, 24 | mode: 'registry', 25 | }; 26 | 27 | function reducer(state, action) { 28 | switch (action.type) { 29 | case 'setMode': 30 | return { ...state, mode: action.payload }; 31 | case 'setPackages': 32 | return { ...state, packages: action.payload }; 33 | case 'setPackagesSearchTerm': 34 | return { ...state, packagesSearchTerm: action.payload }; 35 | case 'setFileSearchTerm': 36 | return { ...state, fileSearchTerm: action.payload }; 37 | case 'setDependencySearchTerm': 38 | return { ...state, dependencySearchTerm: action.payload }; 39 | case 'setRequest': 40 | return { 41 | ...state, 42 | noUrlPackageFound: '', 43 | request: action.payload, 44 | mode: !action.payload.name ? 'registry' : state.mode, 45 | }; 46 | case 'setNoURLPackageFound': 47 | return { ...state, noUrlPackageFound: action.payload }; 48 | case 'setDirectory': 49 | return { ...state, directory: action.payload }; 50 | case 'setFile': 51 | return { ...state, file: action.payload }; 52 | case 'setVersions': 53 | return { ...state, versions: action.payload }; 54 | case 'setCache': 55 | return { 56 | ...state, 57 | cache: { ...state.cache, ...action.payload }, 58 | }; 59 | default: 60 | return { ...state }; 61 | } 62 | } 63 | 64 | const App = () => html` 65 | <${StateProvider} initialState=${initialState} reducer=${reducer}> 66 | <${Main} /> 67 | 68 | `; 69 | 70 | react.render( 71 | html` 72 | <${App} /> 73 | `, 74 | document.body 75 | ); 76 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [[redirects]] 2 | from = "/*" 3 | to = "/index.html" 4 | status = 200 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "runpkg", 3 | "version": "1.0.0", 4 | "description": "The online javascript package explorer", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "servor --reload --browse", 8 | "prettier": "prettier --config .prettierrc --write \"./**/*.{css,html,json,md,yml}\"", 9 | "lint": "eslint \"./**/*.js\"" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/FormidableLabs/runpkg.git" 14 | }, 15 | "author": "Luke Jackson <@lukejacksonn>", 16 | "contributors": [ 17 | "Alex Saunders <@alex-saunders>", 18 | "Kara Stubbs <@kiraarghy>" 19 | ], 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/FormidableLabs/runpkg/issues" 23 | }, 24 | "homepage": "https://runpkg.com", 25 | "devDependencies": { 26 | "eslint": "^5.16.0", 27 | "eslint-config-prettier": "^2.9.0", 28 | "husky": "^2.3.0", 29 | "lint-staged": "^8.1.6", 30 | "prettier": "^1.17.0", 31 | "servor": "^3.0.0" 32 | }, 33 | "husky": { 34 | "hooks": { 35 | "pre-commit": "lint-staged" 36 | } 37 | }, 38 | "lint-staged": { 39 | "*.js": [ 40 | "eslint --fix", 41 | "prettier --write", 42 | "git add" 43 | ], 44 | "*.{css,html,json,md,yml}": [ 45 | "prettier --write", 46 | "git add" 47 | ] 48 | }, 49 | "prettier": { 50 | "tabWidth": 2, 51 | "useTabs": false, 52 | "semi": true, 53 | "singleQuote": true, 54 | "trailingComma": "es5" 55 | }, 56 | "eslintConfig": { 57 | "root": true, 58 | "extends": [ 59 | "eslint:recommended", 60 | "prettier", 61 | "prettier/react" 62 | ], 63 | "env": { 64 | "browser": true, 65 | "es6": true 66 | }, 67 | "parserOptions": { 68 | "ecmaVersion": 10, 69 | "sourceType": "module" 70 | }, 71 | "rules": { 72 | "no-useless-escape": "off", 73 | "no-console": "off" 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /reset.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: 0; 5 | font-size: 100%; 6 | line-height: 1; 7 | font: inherit; 8 | vertical-align: baseline; 9 | box-sizing: border-box; 10 | } 11 | ol, 12 | ul { 13 | list-style: none; 14 | } 15 | body { 16 | width: 100%; 17 | margin: 0; 18 | padding: 0; 19 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 20 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 21 | sans-serif; 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | background: #2f3138; 25 | min-height: 100vh; 26 | } 27 | code { 28 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 29 | monospace; 30 | } 31 | pre { 32 | font-size: 16px; 33 | } 34 | 35 | .token.comment, 36 | .token.prolog, 37 | .token.doctype, 38 | .token.cdata { 39 | color: #6272a4; 40 | } 41 | 42 | .token.punctuation { 43 | color: #f8f8f2; 44 | } 45 | 46 | .namespace { 47 | opacity: 0.7; 48 | } 49 | 50 | .token.property, 51 | .token.tag, 52 | .token.constant, 53 | .token.symbol, 54 | .token.deleted { 55 | color: #ff79c6; 56 | } 57 | 58 | .token.boolean, 59 | .token.number { 60 | color: #bd93f9; 61 | } 62 | 63 | .token.selector, 64 | .token.attr-name, 65 | .token.string, 66 | .token.char, 67 | .token.builtin, 68 | .token.inserted { 69 | color: #f8b1f1; 70 | } 71 | 72 | .token.operator, 73 | .token.entity, 74 | .token.url, 75 | .language-css .token.string, 76 | .style .token.string, 77 | .token.variable { 78 | color: #f8f8f2; 79 | } 80 | 81 | .token.atrule, 82 | .token.attr-value, 83 | .token.function, 84 | .token.class-name { 85 | color: #f1fa8c; 86 | } 87 | 88 | .token.keyword { 89 | color: #80eac7; 90 | } 91 | 92 | .token.regex, 93 | .token.important { 94 | color: #ffb86c; 95 | } 96 | 97 | .token.important, 98 | .token.bold { 99 | font-weight: bold; 100 | } 101 | 102 | .token.italic { 103 | font-style: italic; 104 | } 105 | 106 | .token.entity { 107 | cursor: help; 108 | } 109 | 110 | li { 111 | list-style: none; 112 | } 113 | 114 | select { 115 | font-size: 1.38rem; 116 | width: 100%; 117 | height: 3.6rem; 118 | text-indent: 1rem; 119 | background: rgba(0, 0, 0, 0.1); 120 | border: 0; 121 | border-right: 1rem solid transparent; 122 | color: rgba(255, 255, 255, 0.8); 123 | -webkit-appearance: none; 124 | appearance: none; 125 | border: 1px solid rgba(0, 0, 0, 0.1); 126 | border-radius: 0.38rem; 127 | } 128 | 129 | option { 130 | color: rgba(0, 0, 0, 0.8); 131 | } 132 | 133 | ::-webkit-scrollbar { 134 | width: 16px; 135 | } 136 | 137 | ::-webkit-scrollbar-track { 138 | border-radius: 0; 139 | background: rgba(0, 0, 0, 0.1); 140 | } 141 | 142 | ::-webkit-scrollbar-thumb { 143 | border-radius: 0; 144 | background: rgba(0, 0, 0, 0.2); 145 | } 146 | 147 | ::-webkit-scrollbar-thumb:hover { 148 | background: rgba(0, 0, 0, 0.38); 149 | } 150 | 151 | ::-webkit-scrollbar-thumb:window-inactive { 152 | background: rgba(0, 0, 0, 0.05); 153 | } 154 | 155 | ::-webkit-scrollbar-corner { 156 | background: rgba(0, 0, 0, 0.38); 157 | } 158 | -------------------------------------------------------------------------------- /sw.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable max-nested-callbacks */ 2 | const cacheName = 'www.runpkg.com'; 3 | 4 | self.addEventListener('activate', () => { 5 | console.log('service worker activated'); 6 | }); 7 | 8 | self.addEventListener('fetch', event => { 9 | if ( 10 | event.request.url.includes('https://unpkg') && 11 | !event.request.referrer.includes('https://unpkg.com/') 12 | ) { 13 | event.respondWith( 14 | caches.open(cacheName).then(cache => 15 | cache.match(event.request).then( 16 | response => 17 | response || 18 | fetch(event.request).then(networkResponse => { 19 | cache.put(event.request, networkResponse.clone()); 20 | return networkResponse; 21 | }) 22 | ) 23 | ) 24 | ); 25 | } 26 | return; 27 | }); 28 | -------------------------------------------------------------------------------- /utils/analyzeFile.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-eval */ 2 | const UNPKG = 'https://unpkg.com/'; 3 | 4 | const fileNameRegEx = /\/[^\/@]+[\.][^\/]+$/; 5 | 6 | // Hack to get ESM into webworker as 21/Nov/2019 ESM is not supported by webworkers 7 | const getParseUrl = () => 8 | fetch('/utils/parseUrl.js') 9 | .then(x => x.text()) 10 | .then(x => 11 | x.replace(/\s*export {[^}]+\};/g, '').replace(/^const\s[^=]+=/, '') 12 | ); 13 | 14 | // Handles paths like "../../some-file.js" 15 | const handleDoubleDot = (pathEnd, base) => { 16 | const howFarBack = -1 * pathEnd.match(/\.\.\//g).length; 17 | const strippedPathEnd = pathEnd.replace(/\.\./g, '').replace(/\/+/g, '/'); 18 | const strippedBase = base 19 | .split('/') 20 | .slice(0, howFarBack) 21 | .join('/'); 22 | return strippedBase + strippedPathEnd; 23 | }; 24 | 25 | // Handles cases like Svelte, where - on runpkg - the index url doesn't have a file ext 26 | const getCurrentdir = currentPath => 27 | currentPath.match(fileNameRegEx) 28 | ? currentPath.replace(fileNameRegEx, '') 29 | : currentPath.replace(/\/[^\/]+$/, ''); 30 | 31 | // Makes an unpkg path for the supplied file 32 | const makePath = url => x => { 33 | const base = getCurrentdir(url); 34 | if (x.startsWith('./')) return base + x.replace('./', '/'); 35 | if (x.startsWith('../')) return handleDoubleDot(x, base); 36 | if (x.startsWith('https://')) return x; 37 | return UNPKG + x; 38 | }; 39 | 40 | const isExternalPath = str => !str.startsWith('.'); 41 | const isLocalFile = str => !isExternalPath(str); 42 | const isListedInDependencies = (pkgName, pkgJson) => 43 | ['dependencies', 'devDependencies', 'peerDependencies'].find(depType => { 44 | const matcher = self.parseUrl(pkgName); 45 | return Object.keys(pkgJson[depType] || {}).includes(matcher.name); 46 | }); 47 | 48 | const stripComments = str => 49 | str.replace(/^[\t ]*\/\*(.|\r|\n)*?\*\/|^[\t ]*\/\/.*/gm, ''); 50 | 51 | const importExportRegex = /(from|import)[ \n]?['"](.*?)['"];?/; 52 | const requireRegex = /(require\(['"])([^)\n\r]*)(['"]\))/; 53 | 54 | const packageJsonUrl = (name, version) => { 55 | return `${UNPKG}${name}@${version}/package.json`; 56 | }; 57 | 58 | const directoriesUrl = (name, version) => { 59 | return `${UNPKG}${name}@${version}/?meta`; 60 | }; 61 | 62 | const flatten = arr => 63 | arr.reduce( 64 | (acc, cur) => [...acc, ...(cur.files ? flatten(cur.files) : [cur.path])], 65 | [] 66 | ); 67 | 68 | const extractDependencies = (input, packageJson) => { 69 | const code = stripComments(input).slice(0, 100000); 70 | const imports = (code.match(new RegExp(importExportRegex, 'gm')) || []).map( 71 | x => x.match(new RegExp(importExportRegex))[2] 72 | ); 73 | const requires = (code.match(new RegExp(requireRegex, 'gm')) || []).map( 74 | x => x.match(new RegExp(requireRegex))[2] 75 | ); 76 | return [...new Set([...imports, ...requires])].filter( 77 | x => 78 | isLocalFile(x) || 79 | isListedInDependencies(x, packageJson) || 80 | x.startsWith('https://') 81 | ); 82 | }; 83 | 84 | const needsExtension = entry => 85 | !entry 86 | .split('/') 87 | .pop() 88 | .includes('.'); 89 | 90 | const visitedPaths = new Set(); 91 | 92 | /** Parses the dependency tree for the package 93 | * if recursive it does it recursively 94 | * if not recursive, it does one level of the dependency tree 95 | * it then dispatches the result back to runpkg 96 | */ 97 | 98 | const setupParseUrl = async () => { 99 | self.parseUrl = eval(await getParseUrl()); 100 | }; 101 | 102 | const parseDependencies = async path => { 103 | if (!visitedPaths.has(path)) { 104 | visitedPaths.add(path); 105 | const { url, code } = await fetch(path).then(async res => ({ 106 | url: res.url, 107 | code: await res.text(), 108 | })); 109 | const { name, version } = self.parseUrl(url); 110 | const dir = await fetch(directoriesUrl(name, version)).then(res => 111 | res.json() 112 | ); 113 | const pkg = await fetch(packageJsonUrl(name, version)).then(res => 114 | res.json() 115 | ); 116 | const files = flatten(dir.files); 117 | const ext = url 118 | .split('/') 119 | .pop() 120 | .match(/\.(.*)/); 121 | const dependencies = extractDependencies(code, pkg).reduce((all, entry) => { 122 | const packageUrl = `${UNPKG}${pkg.name}@${pkg.version}`; 123 | let match = makePath(url)(entry); 124 | if (isExternalPath(entry)) { 125 | if (entry.startsWith('https://')) match = entry; 126 | else { 127 | const version_ = pkg[isListedInDependencies(entry, pkg)][entry]; 128 | match = version_ ? `${match}@${version_}` : match; 129 | } 130 | } 131 | if (isLocalFile(entry) && needsExtension(entry)) { 132 | const options = files.filter(x => 133 | x.match(new RegExp(`${match.replace(packageUrl, '')}(/index)?\\..*`)) 134 | ); 135 | match = 136 | packageUrl + 137 | (options 138 | .sort((a, b) => a.length - b.length || a.localeCompare(b)) 139 | .find(x => x.endsWith(ext[0])) || options[0]); 140 | } 141 | return { ...all, [entry]: match }; 142 | }, {}); 143 | self.postMessage({ 144 | url, 145 | code, 146 | dependencies, 147 | size: code.length, 148 | extension: ext ? ext[1] : '', 149 | }); 150 | } 151 | }; 152 | 153 | self.onmessage = async event => { 154 | const { data } = event; 155 | await setupParseUrl(); 156 | try { 157 | await parseDependencies(data); 158 | } catch (e) { 159 | // This is a truly awful hack to get around random CORS errors 160 | parseDependencies(data); 161 | } 162 | }; 163 | -------------------------------------------------------------------------------- /utils/es-module-shim.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* ES Module Shims 0.4.2 */ 3 | (function() { 4 | let baseUrl; 5 | 6 | function createBlob(source) { 7 | return URL.createObjectURL( 8 | new Blob([source], { type: 'application/javascript' }) 9 | ); 10 | } 11 | 12 | const hasDocument = typeof document !== 'undefined'; 13 | 14 | if (hasDocument) { 15 | const baseEl = document.querySelector('base[href]'); 16 | if (baseEl) baseUrl = baseEl.href; 17 | } 18 | 19 | if (!baseUrl && typeof location !== 'undefined') { 20 | baseUrl = location.href.split('#')[0].split('?')[0]; 21 | const lastSepIndex = baseUrl.lastIndexOf('/'); 22 | if (lastSepIndex !== -1) baseUrl = baseUrl.slice(0, lastSepIndex + 1); 23 | } 24 | 25 | let esModuleShimsSrc; 26 | if (hasDocument) { 27 | esModuleShimsSrc = document.currentScript && document.currentScript.src; 28 | } 29 | 30 | const backslashRegEx = /\\/g; 31 | function resolveIfNotPlainOrUrl(relUrl, parentUrl) { 32 | // strip off any trailing query params or hashes 33 | parentUrl = parentUrl && parentUrl.split('#')[0].split('?')[0]; 34 | if (relUrl.indexOf('\\') !== -1) 35 | relUrl = relUrl.replace(backslashRegEx, '/'); 36 | // protocol-relative 37 | if (relUrl[0] === '/' && relUrl[1] === '/') { 38 | return parentUrl.slice(0, parentUrl.indexOf(':') + 1) + relUrl; 39 | } 40 | // relative-url 41 | else if ( 42 | (relUrl[0] === '.' && 43 | (relUrl[1] === '/' || 44 | (relUrl[1] === '.' && 45 | (relUrl[2] === '/' || (relUrl.length === 2 && (relUrl += '/')))) || 46 | (relUrl.length === 1 && (relUrl += '/')))) || 47 | relUrl[0] === '/' 48 | ) { 49 | const parentProtocol = parentUrl.slice(0, parentUrl.indexOf(':') + 1); 50 | // Disabled, but these cases will give inconsistent results for deep backtracking 51 | //if (parentUrl[parentProtocol.length] !== '/') 52 | // throw new Error('Cannot resolve'); 53 | // read pathname from parent URL 54 | // pathname taken to be part after leading "/" 55 | let pathname; 56 | if (parentUrl[parentProtocol.length + 1] === '/') { 57 | // resolving to a :// so we need to read out the auth and host 58 | if (parentProtocol !== 'file:') { 59 | pathname = parentUrl.slice(parentProtocol.length + 2); 60 | pathname = pathname.slice(pathname.indexOf('/') + 1); 61 | } else { 62 | pathname = parentUrl.slice(8); 63 | } 64 | } else { 65 | // resolving to :/ so pathname is the /... part 66 | pathname = parentUrl.slice( 67 | parentProtocol.length + (parentUrl[parentProtocol.length] === '/') 68 | ); 69 | } 70 | 71 | if (relUrl[0] === '/') 72 | return ( 73 | parentUrl.slice(0, parentUrl.length - pathname.length - 1) + relUrl 74 | ); 75 | 76 | // join together and split for removal of .. and . segments 77 | // looping the string instead of anything fancy for perf reasons 78 | // '../../../../../z' resolved to 'x/y' is just 'z' 79 | const segmented = 80 | pathname.slice(0, pathname.lastIndexOf('/') + 1) + relUrl; 81 | 82 | const output = []; 83 | let segmentIndex = -1; 84 | for (let i = 0; i < segmented.length; i++) { 85 | // busy reading a segment - only terminate on '/' 86 | if (segmentIndex !== -1) { 87 | if (segmented[i] === '/') { 88 | output.push(segmented.slice(segmentIndex, i + 1)); 89 | segmentIndex = -1; 90 | } 91 | } 92 | 93 | // new segment - check if it is relative 94 | else if (segmented[i] === '.') { 95 | // ../ segment 96 | if ( 97 | segmented[i + 1] === '.' && 98 | (segmented[i + 2] === '/' || i + 2 === segmented.length) 99 | ) { 100 | output.pop(); 101 | i += 2; 102 | } 103 | // ./ segment 104 | else if (segmented[i + 1] === '/' || i + 1 === segmented.length) { 105 | i += 1; 106 | } else { 107 | // the start of a new segment as below 108 | segmentIndex = i; 109 | } 110 | } 111 | // it is the start of a new segment 112 | else { 113 | segmentIndex = i; 114 | } 115 | } 116 | // finish reading out the last segment 117 | if (segmentIndex !== -1) output.push(segmented.slice(segmentIndex)); 118 | return ( 119 | parentUrl.slice(0, parentUrl.length - pathname.length) + output.join('') 120 | ); 121 | } 122 | } 123 | 124 | /* 125 | * Import maps implementation 126 | * 127 | * To make lookups fast we pre-resolve the entire import map 128 | * and then match based on backtracked hash lookups 129 | * 130 | */ 131 | const emptyImportMap = { imports: {}, scopes: {} }; 132 | 133 | function resolveUrl(relUrl, parentUrl) { 134 | return ( 135 | resolveIfNotPlainOrUrl(relUrl, parentUrl) || 136 | (relUrl.indexOf(':') !== -1 137 | ? relUrl 138 | : resolveIfNotPlainOrUrl('./' + relUrl, parentUrl)) 139 | ); 140 | } 141 | 142 | function objectAssign(to, from) { 143 | for (const p in from) to[p] = from[p]; 144 | return to; 145 | } 146 | 147 | function resolveAndComposePackages( 148 | packages, 149 | outPackages, 150 | baseUrl, 151 | parentMap, 152 | parentUrl, 153 | stdModules 154 | ) { 155 | outer: for (const p in packages) { 156 | let target = packages[p]; 157 | if (typeof target === 'string') target = [target]; 158 | else if (!Array.isArray(target)) continue; 159 | 160 | for (const rhs of target) { 161 | if (typeof rhs !== 'string') continue; 162 | const mapped = resolveImportMap( 163 | parentMap, 164 | resolveIfNotPlainOrUrl(rhs, baseUrl) || rhs, 165 | parentUrl 166 | ); 167 | if (mapped && (!mapped.startsWith('std:') || stdModules.has(mapped))) { 168 | outPackages[p] = mapped; 169 | continue outer; 170 | } 171 | } 172 | targetWarning(p, packages[p], 'bare specifier did not resolve'); 173 | } 174 | } 175 | 176 | function resolveAndComposeImportMap(json, baseUrl, parentMap, stdModules) { 177 | const outMap = { 178 | imports: objectAssign({}, parentMap.imports), 179 | scopes: objectAssign({}, parentMap.scopes), 180 | }; 181 | 182 | if (json.imports) 183 | resolveAndComposePackages( 184 | json.imports, 185 | outMap.imports, 186 | baseUrl, 187 | parentMap, 188 | null, 189 | stdModules 190 | ); 191 | 192 | if (json.scopes) 193 | for (const s in json.scopes) { 194 | const resolvedScope = resolveUrl(s, baseUrl); 195 | resolveAndComposePackages( 196 | json.scopes[s], 197 | outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), 198 | baseUrl, 199 | parentMap, 200 | resolvedScope, 201 | stdModules 202 | ); 203 | } 204 | 205 | return outMap; 206 | } 207 | 208 | function getMatch(path, matchObj) { 209 | if (matchObj[path]) return path; 210 | let sepIndex = path.length; 211 | do { 212 | const segment = path.slice(0, sepIndex + 1); 213 | if (segment in matchObj) return segment; 214 | } while ((sepIndex = path.lastIndexOf('/', sepIndex - 1)) !== -1); 215 | } 216 | 217 | function applyPackages(id, packages) { 218 | const pkgName = getMatch(id, packages); 219 | if (pkgName) { 220 | const pkg = packages[pkgName]; 221 | if (pkg === null) return; 222 | if (id.length > pkgName.length && pkg[pkg.length - 1] !== '/') 223 | targetWarning(pkgName, pkg, "should have a trailing '/'"); 224 | else return pkg + id.slice(pkgName.length); 225 | } 226 | } 227 | 228 | function targetWarning(match, target, msg) { 229 | console.warn( 230 | 'Package target ' + 231 | msg + 232 | ", resolving target '" + 233 | target + 234 | "' for " + 235 | match 236 | ); 237 | } 238 | 239 | function resolveImportMap(importMap, resolvedOrPlain, parentUrl) { 240 | let scopeUrl = parentUrl && getMatch(parentUrl, importMap.scopes); 241 | while (scopeUrl) { 242 | const packageResolution = applyPackages( 243 | resolvedOrPlain, 244 | importMap.scopes[scopeUrl] 245 | ); 246 | if (packageResolution) return packageResolution; 247 | scopeUrl = getMatch( 248 | scopeUrl.slice(0, scopeUrl.lastIndexOf('/')), 249 | importMap.scopes 250 | ); 251 | } 252 | return ( 253 | applyPackages(resolvedOrPlain, importMap.imports) || 254 | (resolvedOrPlain.indexOf(':') !== -1 && resolvedOrPlain) 255 | ); 256 | } 257 | 258 | /* es-module-lexer 0.3.13 */ 259 | function parse(Q, B = '@') { 260 | if (!A) return init.then(() => parse(Q)); 261 | const C = 262 | (A.__heap_base.value || A.__heap_base) + 263 | 4 * Q.length + 264 | -A.memory.buffer.byteLength; 265 | if ( 266 | (C > 0 && A.memory.grow(Math.ceil(C / 65536)), 267 | (function(A, Q) { 268 | const B = A.length; 269 | let C = 0; 270 | for (; C < B; ) Q[C] = A.charCodeAt(C++); 271 | })(Q, new Uint16Array(A.memory.buffer, A.sa(Q.length), Q.length + 1)), 272 | !A.parse()) 273 | ) 274 | throw Object.assign( 275 | new Error( 276 | `Parse error ${B}:${Q.slice(0, A.e()).split('\n').length}:${A.e() - 277 | Q.lastIndexOf('\n', A.e() - 1)}` 278 | ), 279 | { idx: A.e() } 280 | ); 281 | const E = []; 282 | const g = []; 283 | for (; A.ri(); ) E.push({ s: A.is(), e: A.ie(), d: A.id() }); 284 | for (; A.re(); ) g.push(Q.slice(A.es(), A.ee())); 285 | return [E, g]; 286 | } 287 | let A; 288 | const init = WebAssembly.compile( 289 | (A => 290 | typeof atob === 'function' 291 | ? Uint8Array.from(atob(A), A => A.charCodeAt(0)) 292 | : Buffer.from(A, 'base64'))( 293 | 'AGFzbQEAAAABTwxgAABgAX8Bf2ADf39/AGACf38AYAABf2AGf39/f39/AX9gBH9/f38Bf2ADf39/AX9gB39/f39/f38Bf2ACf38Bf2AFf39/f38Bf2ABfwADKyoBAgMEBAQEBAQEBAEBBQAAAAAAAAABAQEBAAABBQYHCAkBCgQLAQEACAEFAwEAAQYVA38BQeDIAAt/AEHgyAALfwBB3AgLB1kNBm1lbW9yeQIAC19faGVhcF9iYXNlAwEKX19kYXRhX2VuZAMCAnNhAAABZQADAmlzAAQCaWUABQJpZAAGAmVzAAcCZWUACAJyaQAJAnJlAAoFcGFyc2UACwrlKCpoAQF/QbQIIAA2AgBBjAgoAgAiASAAQQF0aiIAQQA7AQBBuAggAEECaiIANgIAQbwIIAA2AgBBlAhBADYCAEGkCEEANgIAQZwIQQA2AgBBmAhBADYCAEGsCEEANgIAQaAIQQA2AgAgAQtXAQJ/QaQIKAIAIgRBDGpBlAggBBtBvAgoAgAiAzYCAEGkCCADNgIAQagIIAQ2AgBBvAggA0EQajYCACADQQA2AgwgAyACNgIIIAMgATYCBCADIAA2AgALSAEBf0GsCCgCACICQQhqQZgIIAIbQbwIKAIAIgI2AgBBrAggAjYCAEG8CCACQQxqNgIAIAJBADYCCCACIAE2AgQgAiAANgIACwgAQcAIKAIACxUAQZwIKAIAKAIAQYwIKAIAa0EBdQsVAEGcCCgCACgCBEGMCCgCAGtBAXULOQEBfwJAQZwIKAIAKAIIIgBBgAgoAgBHBEAgAEGECCgCAEYNASAAQYwIKAIAa0EBdQ8LQX8PC0F+CxUAQaAIKAIAKAIAQYwIKAIAa0EBdQsVAEGgCCgCACgCBEGMCCgCAGtBAXULJQEBf0GcCEGcCCgCACIAQQxqQZQIIAAbKAIAIgA2AgAgAEEARwslAQF/QaAIQaAIKAIAIgBBCGpBmAggABsoAgAiADYCACAAQQBHC4cHAQR/IwBBgChrIgMkAEHGCEH/AToAAEHICEGICCgCADYCAEHUCEGMCCgCAEF+aiIANgIAQdgIIABBtAgoAgBBAXRqIgE2AgBBxQhBADoAAEHECEEAOgAAQcAIQQA2AgBBsAhBADoAAEHMCCADQYAgajYCAEHQCCADNgIAA0BB1AggAEECaiICNgIAAkACQAJAAn8CQCAAIAFJBEAgAi8BACIBQXdqQQVJDQUCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUFgaiIEQQlLBEAgAUEvRg0BIAFB4ABGDQMgAUH9AEYNAiABQekARg0EIAFB+wBGDQUgAUHlAEcNEUHFCC0AAA0RIAIQDEUNESAAQQRqQfgAQfAAQe8AQfIAQfQAEA1FDREQDgwRCwJAAkACQAJAIARBAWsOCRQAFBQUFAECAxULEA8MEwsQEAwSC0HFCEHFCCwAACIAQQFqOgAAQdAIKAIAIABBAnRqQcgIKAIANgIADBELQcUILQAAIgBFDQ1BxQggAEF/aiIBOgAAQaQIKAIAIgBFDRAgACgCCEHQCCgCACABQRh0QRh1QQJ0aigCAEcNECAAIAI2AgQMEAsgAC8BBCIAQSpGDQUgAEEvRw0GEBEMEAtBxQhBxQgtAAAiAEF/aiIBOgAAIABBxggsAAAiAkH/AXFHDQNBxAhBxAgtAABBf2oiADoAAEHGCEHMCCgCACAAQRh0QRh1ai0AADoAAAsQEgwNCyACEAxFDQwgAEEEakHtAEHwAEHvAEHyAEH0ABANRQ0MEBMMDAtByAgoAgAiAC8BAEEpRw0EQaQIKAIAIgFFDQQgASgCBCAARw0EQaQIQagIKAIAIgE2AgAgAUUNAyABQQA2AgwMBAsgAUEYdEEYdSACTg0KDAcLEBQMCgtByAgoAgAiAS8BACIAEBUNByAAQf0ARg0CIABBKUcNA0HQCCgCAEHFCCwAAEECdGooAgAQFg0HDAMLQZQIQQA2AgALQcUIQcUILAAAIgFBAWo6AABB0AgoAgAgAUECdGogADYCAAwGC0HQCCgCAEHFCCwAAEECdGooAgAQFw0ECyABEBggAEUNA0UNBAwDC0GwCC0AAEHFCC0AAHJFQcYILQAAQf8BRnEMAQsQGUEACyADQYAoaiQADwsQGgtByAhB1AgoAgA2AgALQdgIKAIAIQFB1AgoAgAhAAwACwALGwAgAEGMCCgCAEcEQCAAQX5qLwEAEBsPC0EBCzsBAX8CQCAALwEIIAVHDQAgAC8BBiAERw0AIAAvAQQgA0cNACAALwECIAJHDQAgAC8BACABRiEGCyAGC6wFAQN/QdQIQdQIKAIAQQxqIgE2AgAQIyECAkACQAJAIAFB1AgoAgAiAEYEQCACECVFDQELAkACQAJAAkAgAkGff2oiAUELTQRAAkACQCABQQFrDgsHAwQHAQcHBwcHBgALQdQIIABBCmo2AgAQIxpB1AgoAgAhAAtB1AggAEEQajYCABAjIgBBKkYEQEHUCEHUCCgCAEECajYCABAjIQALDAcLAkAgAkEqRg0AIAJB9gBGDQQgAkH7AEcNBUHUCCAAQQJqNgIAECMhAkHUCCgCACEBA0AgAkH//wNxECYaQdQIKAIAIQAQIyICQeEARgRAQdQIQdQIKAIAQQRqNgIAECNB1AgoAgAhARAmGkHUCCgCACEAECMhAgsgAkEsRgRAQdQIQdQIKAIAQQJqNgIAECMhAgsgASAAEAJB1AgoAgAhACACQf0ARg0BIAAgAUcEQCAAIgFB2AgoAgBNDQELCxAZDAULQdQIIABBAmo2AgAQI0HmAEcNBEHUCCgCACIBLwEGQe0ARw0EIAEvAQRB7wBHDQQgAUECai8BAEHyAEcNBEHUCCABQQhqNgIAECMQJA8LIAAvAQhB8wBHDQEgAC8BBkHzAEcNASAALwEEQeEARw0BIABBAmovAQBB7ABHDQEgAC8BChAbRQ0BQdQIIABBCmo2AgAQIyEADAULIAAgAEEOahACDwtB1AggAEEEaiIANgIAC0HUCCAAQQRqIgA2AgADQEHUCCAAQQJqNgIAECNB1AgoAgAhABAmQSByQfsARg0CQdQIKAIAIgEgAEYNASAAIAEQAhAjQdQIKAIAIQBBLEYNAAtB1AggAEF+ajYCAA8LDwtB1AhB1AgoAgBBfmo2AgAPC0HUCCgCACAAECYaQdQIKAIAEAJB1AhB1AgoAgBBfmo2AgALcQEEf0HUCCgCACEAQdgIKAIAIQMCQANAAkAgAEECaiEBIAAgA08NACABLwEAIgJB3ABHBEAgAkEKRiACQQ1Gcg0BIAEhACACQSJHDQIMAwUgAEEEaiEADAILAAsLQdQIIAE2AgAQGQ8LQdQIIAA2AgALcQEEf0HUCCgCACEAQdgIKAIAIQMCQANAAkAgAEECaiEBIAAgA08NACABLwEAIgJB3ABHBEAgAkEKRiACQQ1Gcg0BIAEhACACQSdHDQIMAwUgAEEEaiEADAILAAsLQdQIIAE2AgAQGQ8LQdQIIAA2AgALSwEEf0HUCCgCAEECaiEBQdgIKAIAIQIDQAJAIAEiAEF+aiACTw0AIAAvAQAiA0ENRg0AIABBAmohASADQQpHDQELC0HUCCAANgIAC7wBAQR/QdQIKAIAIQFB2AgoAgAhAwJAAkADQCABIgBBAmohASAAIANPDQEgAS8BACICQSRHBEAgAkHcAEcEQCACQeAARw0CDAQLIABBBGohAQwBCyAALwEEQfsARw0AC0HUCCAAQQRqNgIAQcQIQcQILAAAIgBBAWo6AAAgAEHMCCgCAGpBxggtAAA6AABBxghBxQgtAABBAWoiADoAAEHFCCAAOgAADwtB1AggATYCABAZDwtB1AggATYCAAvfAgEEf0HUCEHUCCgCACIBQQxqIgI2AgACQAJAAkACQAJAAkAQIyIAQVlqIgNBB00EQAJAIANBAWsOBwACAwICAgQDC0HQCCgCAEHFCCwAACIAQQJ0aiABNgIAQcUIIABBAWo6AABByAgoAgAvAQBBLkYNBEHUCCgCAEECakEAIAEQAQ8LIABBIkYgAEH7AEZyDQELQdQIKAIAIAJGDQILQcUILQAABEBB1AhB1AgoAgBBfmo2AgAPC0HUCCgCACEBQdgIKAIAIQIDQCABIAJJBEAgAS8BACIAQSdGIABBIkZyDQRB1AggAUECaiIBNgIADAELCxAZDwtB1AhB1AgoAgBBAmo2AgAQI0HtAEcNAEHUCCgCACIALwEGQeEARw0AIAAvAQRB9ABHDQAgAEECai8BAEHlAEcNAEHICCgCAC8BAEEuRw0CCw8LIAAQJA8LIAEgAEEIakGECCgCABABC3UBAn9B1AhB1AgoAgAiAEECajYCACAAQQZqIQBB2AgoAgAhAQJAAkADQCAAQXxqIAFJBEAgAEF+ai8BAEEqRgRAIAAvAQBBL0YNAwsgAEECaiEADAELCyAAQX5qIQAMAQtB1AggAEF+ajYCAAtB1AggADYCAAtlAQF/IABBKUcgAEFYakH//wNxQQdJcSAAQUZqQf//A3FBBklyIABBX2oiAUEFTUEAQQEgAXRBMXEbciAAQdsARiAAQd4ARnJyRQRAIABB/QBHIABBhX9qQf//A3FBBElxDwtBAQs9AQF/QQEhAQJAIABB9wBB6ABB6QBB7ABB5QAQHA0AIABB5gBB7wBB8gAQHQ0AIABB6QBB5gAQHiEBCyABCz8BAX8gAC8BACIBQSlGIAFBO0ZyBH9BAQUgAUH5AEYEQCAAQX5qQeYAQekAQe4AQeEAQewAQewAEB8PC0EACwvKAwECfwJAAkACQAJAIAAvAQBBnH9qIgFBE0sNAAJAAkACQAJAAkACQAJAAkACQAJAIAFBAWsOEwEDCgoKCgoKCgQFCgoCCgYKCgcACyAAQX5qLwEAIgFB7ABGDQogAUHpAEcNCSAAQXxqQfYAQe8AEB4PCyAAQX5qLwEAIgFB9ABGDQYgAUHzAEcNCCAAQXxqLwEAIgFB4QBGDQogAUHsAEcNCCAAQXpqQeUAECAPCyAAQX5qECEPCyAAQX5qLwEAQe8ARw0GIABBfGovAQBB5QBHDQYgAEF6ai8BACIBQfAARg0JIAFB4wBHDQYgAEF4akHpAEHuAEHzAEH0AEHhAEHuABAfDwtBASECIABBfmoiAEHpABAgDQUgAEHyAEHlAEH0AEH1AEHyABAcDwsgAEF+akHkABAgDwsgAEF+akHhAEH3AEHhAEHpABAiDwsgAEF+ai8BACIBQe8ARg0BIAFB5QBHDQIgAEF8akHuABAgDwsgAEF8akHkAEHlAEHsAEHlABAiDwsgAEF8akH0AEHoAEHyABAdIQILIAIPCyAAQXxqQfkAQekAQeUAEB0PCyAAQXpqQeMAECAPCyAAQXhqQfQAQfkAEB4LNQEBf0GwCEEBOgAAQdQIKAIAIQBB1AhB2AgoAgBBAmo2AgBBwAggAEGMCCgCAGtBAXU2AgALbQECfwJAA0ACQEHUCEHUCCgCACIBQQJqIgA2AgAgAUHYCCgCAE8NAAJAIAAvAQAiAEHbAEcEQCAAQdwARg0BIABBCkYgAEENRnINAiAAQS9HDQMMBAsQJwwCC0HUCCABQQRqNgIADAELCxAZCwsyAQF/IABBd2pB//8DcSIBQRhJQQBBn4CABCABdkEBcRtFBEAgABAlIABBLkdxDwtBAQtFAQN/AkACQCAAQXhqIgZBjAgoAgAiB0kNACAGIAEgAiADIAQgBRANRQ0AIAYgB0YNASAAQXZqLwEAEBshCAsgCA8LQQELVQEDfwJAAkAgAEF8aiIEQYwIKAIAIgVJDQAgAC8BACADRw0AIABBfmovAQAgAkcNACAELwEAIAFHDQAgBCAFRg0BIABBemovAQAQGyEGCyAGDwtBAQtIAQN/AkACQCAAQX5qIgNBjAgoAgAiBEkNACAALwEAIAJHDQAgAy8BACABRw0AIAMgBEYNASAAQXxqLwEAEBshBQsgBQ8LQQELRwEDfwJAAkAgAEF2aiIHQYwIKAIAIghJDQAgByABIAIgAyAEIAUgBhAoRQ0AIAcgCEYNASAAQXRqLwEAEBshCQsgCQ8LQQELOQECfwJAAkBBjAgoAgAiAiAASw0AIAAvAQAgAUcNACAAIAJGDQEgAEF+ai8BABAbIQMLIAMPC0EBCzsBA38CQAJAIABBdGoiAUGMCCgCACICSQ0AIAEQKUUNACABIAJGDQEgAEFyai8BABAbIQMLIAMPC0EBC2IBA38CQAJAIABBemoiBUGMCCgCACIGSQ0AIAAvAQAgBEcNACAAQX5qLwEAIANHDQAgAEF8ai8BACACRw0AIAUvAQAgAUcNACAFIAZGDQEgAEF4ai8BABAbIQcLIAcPC0EBC2sBA39B1AgoAgAhAANAAkACQCAALwEAIgFBd2pBBUkgAUEgRnINACABQS9HDQEgAC8BAiIAQSpHBEAgAEEvRw0CEBEMAQsQFAtB1AhB1AgoAgAiAkECaiIANgIAIAJB2AgoAgBJDQELCyABC1QAAkACQCAAQSJHBEAgAEEnRw0BQdQIQdQIKAIAQQJqIgA2AgAQEAwCC0HUCEHUCCgCAEECaiIANgIAEA8MAQsQGQ8LIABB1AgoAgBBgAgoAgAQAQtdAQF/AkAgAEH4/wNxQShGIABBRmpB//8DcUEGSXIgAEFfaiIBQQVNQQBBASABdEExcRtyDQAgAEGlf2oiAUEDTUEAIAFBAUcbDQAgAEGFf2pB//8DcUEESQ8LQQELYgECfwJAA0AgAEH//wNxIgJBd2oiAUEXTUEAQQEgAXRBn4CABHEbRQRAIAAhASACECUNAkEAIQFB1AhB1AgoAgAiAEECajYCACAALwECIgANAQwCCwsgACEBCyABQf//A3ELcgEEf0HUCCgCACEAQdgIKAIAIQMCQANAAkAgAEECaiEBIAAgA08NACABLwEAIgJB3ABHBEAgAkEKRiACQQ1Gcg0BIAEhACACQd0ARw0CDAMFIABBBGohAAwCCwALC0HUCCABNgIAEBkPC0HUCCAANgIAC0UBAX8CQCAALwEKIAZHDQAgAC8BCCAFRw0AIAAvAQYgBEcNACAALwEEIANHDQAgAC8BAiACRw0AIAAvAQAgAUYhBwsgBwtWAQF/AkAgAC8BDEHlAEcNACAALwEKQecARw0AIAAvAQhB5wBHDQAgAC8BBkH1AEcNACAALwEEQeIARw0AIAAvAQJB5QBHDQAgAC8BAEHkAEYhAQsgAQsLFQEAQYAICw4BAAAAAgAAABAEAABgJA==' 294 | ) 295 | ) 296 | .then(WebAssembly.instantiate) 297 | .then(({ exports: Q }) => { 298 | A = Q; 299 | }); 300 | 301 | class WorkerShim { 302 | constructor(aURL, options = {}) { 303 | if (options.type !== 'module') return new Worker(aURL, options); 304 | 305 | if (!esModuleShimsSrc) 306 | throw new Error( 307 | 'es-module-shims.js must be loaded with a script tag for WorkerShim support.' 308 | ); 309 | 310 | options.importMap = options.importMap || emptyImportMap; 311 | 312 | const workerScriptUrl = createBlob( 313 | `importScripts('${esModuleShimsSrc}');importShim.map=${JSON.stringify( 314 | options.importMap 315 | )};importShim('${ 316 | new URL(aURL, baseUrl).href 317 | }').catch(e=>setTimeout(()=>{throw e}))` 318 | ); 319 | 320 | return new Worker( 321 | workerScriptUrl, 322 | Object.assign({}, options, { type: undefined }) 323 | ); 324 | } 325 | } 326 | 327 | let id = 0; 328 | const registry = {}; 329 | 330 | // support browsers without dynamic import support (eg Firefox 6x) 331 | let dynamicImport; 332 | try { 333 | dynamicImport = (0, eval)('u=>import(u)'); 334 | } catch (e) { 335 | if (hasDocument) { 336 | self.addEventListener('error', e => (importShim.e = e.error)); 337 | dynamicImport = blobUrl => { 338 | const topLevelBlobUrl = createBlob( 339 | `import*as m from'${blobUrl}';self.importShim.l=m;self.importShim.e=null` 340 | ); 341 | const s = document.createElement('script'); 342 | s.type = 'module'; 343 | s.src = topLevelBlobUrl; 344 | document.head.appendChild(s); 345 | return new Promise((resolve, reject) => { 346 | s.addEventListener('load', () => { 347 | document.head.removeChild(s); 348 | importShim.e 349 | ? reject(importShim.e) 350 | : resolve(importShim.l, baseUrl); 351 | }); 352 | }); 353 | }; 354 | } 355 | } 356 | 357 | async function loadAll(load, seen) { 358 | if (load.b || seen[load.u]) return; 359 | seen[load.u] = 1; 360 | await load.L; 361 | return Promise.all(load.d.map(dep => loadAll(dep, seen))); 362 | } 363 | 364 | async function topLevelLoad(url, source) { 365 | await init; 366 | const load = getOrCreateLoad(url, source); 367 | const seen = {}; 368 | await loadAll(load, seen); 369 | lastLoad = undefined; 370 | resolveDeps(load, seen); 371 | const module = await dynamicImport(load.b); 372 | // if the top-level load is a shell, run its update function 373 | if (load.s) (await dynamicImport(load.s)).u$_(module); 374 | return module; 375 | } 376 | 377 | async function importShim(id, parentUrl) { 378 | return topLevelLoad(await resolve(id, parentUrl || baseUrl)); 379 | } 380 | 381 | self.importShim = importShim; 382 | 383 | const meta = {}; 384 | const wasmModules = {}; 385 | 386 | const edge = navigator.userAgent.match(/Edge\/\d\d\.\d+$/); 387 | 388 | Object.defineProperties(importShim, { 389 | map: { value: emptyImportMap, writable: true }, 390 | m: { value: meta }, 391 | w: { value: wasmModules }, 392 | l: { value: undefined, writable: true }, 393 | e: { value: undefined, writable: true }, 394 | }); 395 | 396 | let lastLoad; 397 | function resolveDeps(load, seen) { 398 | if (load.b || !seen[load.u]) return; 399 | seen[load.u] = 0; 400 | 401 | for (const dep of load.d) resolveDeps(dep, seen); 402 | 403 | // "execution" 404 | const source = load.S; 405 | // edge doesnt execute sibling in order, so we fix this up by ensuring all previous executions are explicit dependencies 406 | let resolvedSource = edge && lastLoad ? `import '${lastLoad}';` : ''; 407 | 408 | const [imports] = load.a; 409 | 410 | if (!imports.length) { 411 | resolvedSource += source; 412 | } else { 413 | // once all deps have loaded we can inline the dependency resolution blobs 414 | // and define this blob 415 | let lastIndex = 0; 416 | let depIndex = 0; 417 | for (const { s: start, e: end, d: dynamicImportIndex } of imports) { 418 | // dependency source replacements 419 | if (dynamicImportIndex === -1) { 420 | const depLoad = load.d[depIndex++]; 421 | let blobUrl = depLoad.b; 422 | if (!blobUrl) { 423 | // circular shell creation 424 | if (!(blobUrl = depLoad.s)) { 425 | blobUrl = depLoad.s = createBlob( 426 | `export function u$_(m){${depLoad.a[1] 427 | .map(name => 428 | name === 'default' 429 | ? `$_default=m.default` 430 | : `${name}=m.${name}` 431 | ) 432 | .join(',')}}${depLoad.a[1] 433 | .map(name => 434 | name === 'default' 435 | ? `let $_default;export{$_default as default}` 436 | : `export let ${name}` 437 | ) 438 | .join(';')}\n//# sourceURL=${depLoad.r}?cycle` 439 | ); 440 | } 441 | } 442 | // circular shell execution 443 | else if (depLoad.s) { 444 | resolvedSource += 445 | source.slice(lastIndex, start - 1) + 446 | '/*' + 447 | source.slice(start - 1, end + 1) + 448 | '*/' + 449 | source.slice(start - 1, start) + 450 | blobUrl + 451 | source[end] + 452 | `;import*as m$_${depIndex} from'${ 453 | depLoad.b 454 | }';import{u$_ as u$_${depIndex}}from'${ 455 | depLoad.s 456 | }';u$_${depIndex}(m$_${depIndex})`; 457 | lastIndex = end + 1; 458 | depLoad.s = undefined; 459 | continue; 460 | } 461 | resolvedSource += 462 | source.slice(lastIndex, start - 1) + 463 | '/*' + 464 | source.slice(start - 1, end + 1) + 465 | '*/' + 466 | source.slice(start - 1, start) + 467 | blobUrl; 468 | lastIndex = end; 469 | } 470 | // import.meta 471 | else if (dynamicImportIndex === -2) { 472 | meta[load.r] = { url: load.r }; 473 | resolvedSource += 474 | source.slice(lastIndex, start) + 475 | 'importShim.m[' + 476 | JSON.stringify(load.r) + 477 | ']'; 478 | lastIndex = end; 479 | } 480 | // dynamic import 481 | else { 482 | resolvedSource += 483 | source.slice(lastIndex, dynamicImportIndex + 6) + 484 | 'Shim(' + 485 | source.slice(start, end) + 486 | ', ' + 487 | JSON.stringify(load.r); 488 | lastIndex = end; 489 | } 490 | } 491 | 492 | resolvedSource += source.slice(lastIndex); 493 | } 494 | 495 | const lastNonEmptyLine = resolvedSource.slice( 496 | resolvedSource.lastIndexOf('\n') + 1 497 | ); 498 | load.b = lastLoad = createBlob( 499 | resolvedSource + 500 | (lastNonEmptyLine.startsWith('//# sourceMappingURL=') 501 | ? '\n//# sourceMappingURL=' + 502 | resolveUrl(lastNonEmptyLine.slice(21), load.r) 503 | : '') + 504 | '\n//# sourceURL=' + 505 | load.r 506 | ); 507 | load.S = undefined; 508 | } 509 | 510 | function getOrCreateLoad(url, source) { 511 | let load = registry[url]; 512 | if (load) return load; 513 | 514 | load = registry[url] = { 515 | // url 516 | u: url, 517 | // response url 518 | r: undefined, 519 | // fetchPromise 520 | f: undefined, 521 | // source 522 | S: undefined, 523 | // linkPromise 524 | L: undefined, 525 | // analysis 526 | a: undefined, 527 | // deps 528 | d: undefined, 529 | // blobUrl 530 | b: undefined, 531 | // shellUrl 532 | s: undefined, 533 | }; 534 | 535 | load.f = (async () => { 536 | if (!source) { 537 | const res = await fetch(url); 538 | if (!res.ok) 539 | throw new Error(`${res.status} ${res.statusText} ${res.url}`); 540 | 541 | load.r = res.url; 542 | 543 | const contentType = res.headers.get('content-type'); 544 | if (contentType.match(/^(text|application)\/(x-)?javascript(;|$)/)) { 545 | source = await res.text(); 546 | } else if (contentType.match(/^application\/json(;|$)/)) { 547 | source = `export default JSON.parse(${JSON.stringify( 548 | await res.text() 549 | )})`; 550 | } else if (contentType.match(/^text\/css(;|$)/)) { 551 | source = `const s=new CSSStyleSheet();s.replaceSync(${JSON.stringify( 552 | await res.text() 553 | )});export default s`; 554 | } else if (contentType.match(/^application\/wasm(;|$)/)) { 555 | const module = (wasmModules[url] = await WebAssembly.compile( 556 | await res.arrayBuffer() 557 | )); 558 | const deps = WebAssembly.Module.imports 559 | ? WebAssembly.Module.imports(module).map(impt => impt.module) 560 | : []; 561 | 562 | const aDeps = []; 563 | load.a = [ 564 | aDeps, 565 | WebAssembly.Module.exports(module).map(expt => expt.name), 566 | ]; 567 | 568 | const depStrs = deps.map(dep => JSON.stringify(dep)); 569 | 570 | let curIndex = 0; 571 | load.S = 572 | depStrs 573 | .map((depStr, idx) => { 574 | const index = idx.toString(); 575 | const strStart = curIndex + 17 + index.length; 576 | const strEnd = strStart + depStr.length - 2; 577 | aDeps.push({ 578 | s: strStart, 579 | e: strEnd, 580 | d: -1, 581 | }); 582 | curIndex += strEnd + 3; 583 | return `import*as m${index} from${depStr};`; 584 | }) 585 | .join('') + 586 | `const module=importShim.w[${JSON.stringify( 587 | url 588 | )}],exports=new WebAssembly.Instance(module,{` + 589 | depStrs.map((depStr, idx) => `${depStr}:m${idx},`).join('') + 590 | `}).exports;` + 591 | load.a[1] 592 | .map(name => 593 | name === 'default' 594 | ? `export default exports.${name}` 595 | : `export const ${name}=exports.${name}` 596 | ) 597 | .join(';'); 598 | return deps; 599 | } else { 600 | throw new Error(`Unknown Content-Type "${contentType}"`); 601 | } 602 | } 603 | try { 604 | load.a = parse(source, load.u); 605 | } catch (e) { 606 | console.warn(e); 607 | load.a = [[], []]; 608 | } 609 | load.S = source; 610 | return load.a[0].filter(d => d.d === -1).map(d => source.slice(d.s, d.e)); 611 | })(); 612 | 613 | load.L = load.f.then(async deps => { 614 | load.d = await Promise.all( 615 | deps.map(async depId => { 616 | const depLoad = getOrCreateLoad( 617 | await resolve(depId, load.r || load.u) 618 | ); 619 | await depLoad.f; 620 | return depLoad; 621 | }) 622 | ); 623 | }); 624 | 625 | return load; 626 | } 627 | 628 | let importMapPromise; 629 | 630 | if (hasDocument) { 631 | // preload import maps 632 | for (const script of document.querySelectorAll( 633 | 'script[type="importmap-shim"][src]' 634 | )) 635 | script._f = fetch(script.src); 636 | // load any module scripts 637 | for (const script of document.querySelectorAll( 638 | 'script[type="module-shim"]' 639 | )) 640 | topLevelLoad( 641 | script.src || `${baseUrl}?${id++}`, 642 | script.src ? null : script.innerHTML 643 | ); 644 | } 645 | 646 | async function resolve(id, parentUrl) { 647 | if (!importMapPromise) { 648 | const stdModules = new Set(); 649 | importMapPromise = (async () => {})(); 650 | if (hasDocument) 651 | for (const script of document.querySelectorAll( 652 | 'script[type="importmap-shim"]' 653 | )) { 654 | importMapPromise = importMapPromise.then(async () => { 655 | importShim.map = resolveAndComposeImportMap( 656 | script.src 657 | ? await (await (script._f || fetch(script.src))).json() 658 | : JSON.parse(script.innerHTML), 659 | script.src || baseUrl, 660 | importShim.map, 661 | stdModules 662 | ); 663 | }); 664 | } 665 | } 666 | await importMapPromise; 667 | return ( 668 | resolveImportMap( 669 | importShim.map, 670 | resolveIfNotPlainOrUrl(id, parentUrl) || id, 671 | parentUrl 672 | ) || throwUnresolved(id, parentUrl) 673 | ); 674 | } 675 | 676 | function throwUnresolved(id, parentUrl) { 677 | throw Error( 678 | "Unable to resolve specifier '" + 679 | id + 680 | (parentUrl ? "' from " + parentUrl : "'") 681 | ); 682 | } 683 | 684 | self.WorkerShim = WorkerShim; 685 | })(); 686 | -------------------------------------------------------------------------------- /utils/formatBytes.js: -------------------------------------------------------------------------------- 1 | export default (bytes, decimals = 0) => { 2 | if (bytes === 0) return '0 B'; 3 | const k = 1024; 4 | const dm = decimals < 0 ? 0 : decimals; 5 | const sizes = ['B', 'KB', 'MB', 'GB']; 6 | const i = Math.floor(Math.log(bytes) / Math.log(k)); 7 | return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; 8 | }; 9 | -------------------------------------------------------------------------------- /utils/globalState.js: -------------------------------------------------------------------------------- 1 | import { react, html } from '../utils/rplus.js'; 2 | 3 | const { createContext, useContext, useReducer } = react; 4 | 5 | export const StateContext = createContext(); 6 | export const StateProvider = ({ reducer, initialState, children }) => html` 7 | <${StateContext.Provider} value=${useReducer(reducer, initialState)}> 8 | ${children} 9 | 10 | `; 11 | 12 | export const useStateValue = () => useContext(StateContext); 13 | -------------------------------------------------------------------------------- /utils/parseUrl.js: -------------------------------------------------------------------------------- 1 | const parseUrl = (url = window.location.search.slice(1).replace(/\/$/, '')) => { 2 | const parts = url 3 | .trim() 4 | .replace('https://unpkg.com', '') 5 | .split('/') 6 | .map(part => part.trim()) 7 | .filter(Boolean); 8 | 9 | if (parts[0]) { 10 | // checks if scoped packaged 11 | if (parts[0].startsWith('@')) { 12 | const nameVersion = parts[1].split('@'); 13 | return { 14 | name: `${parts[0]}/${nameVersion[0]}` || null, 15 | version: nameVersion[1] || null, 16 | path: parts.join('/') || null, 17 | file: (parts.length > 2 && parts.slice(parts.length - 1)[0]) || null, 18 | directory: parts.slice(2, parts.length - 1).join('/') || null, 19 | }; 20 | } else { 21 | const nameVersion = parts[0].split('@'); 22 | return { 23 | name: nameVersion[0] || null, 24 | version: nameVersion[1] || null, 25 | path: parts.join('/') || null, 26 | file: (parts.length > 1 && parts.slice(parts.length - 1)[0]) || null, 27 | directory: parts.slice(1, parts.length - 1).join('/') || null, 28 | }; 29 | } 30 | } else { 31 | return { 32 | name: null, 33 | version: null, 34 | path: null, 35 | file: null, 36 | directory: null, 37 | }; 38 | } 39 | }; 40 | 41 | export { parseUrl }; 42 | -------------------------------------------------------------------------------- /utils/rplus.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom'; 4 | import htm from 'htm'; 5 | import css from 'csz'; 6 | import search from 'algolia'; 7 | 8 | // https://www.algolia.com/doc/faq/accounts-billing/do-i-need-to-display-the-algolia-logo-when-i-am-on-the-free-plan/ 9 | const npm = search('OFCNCOG2CU', '86ebd6a34c7fbb7988d5ba5c75d5da34'); 10 | 11 | const html = htm.bind(React.createElement); 12 | const react = { 13 | ...React, 14 | render: ReactDOM.render, 15 | }; 16 | 17 | export { react, html, css, npm }; 18 | -------------------------------------------------------------------------------- /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.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.0.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 15 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@babel/runtime@^7.0.0": 22 | version "7.4.4" 23 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" 24 | integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== 25 | dependencies: 26 | regenerator-runtime "^0.13.2" 27 | 28 | "@samverschueren/stream-to-observable@^0.3.0": 29 | version "0.3.0" 30 | resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" 31 | integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== 32 | dependencies: 33 | any-observable "^0.3.0" 34 | 35 | "@types/normalize-package-data@^2.4.0": 36 | version "2.4.0" 37 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" 38 | integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== 39 | 40 | acorn-jsx@^5.0.0: 41 | version "5.0.1" 42 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 43 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== 44 | 45 | acorn@^6.0.7: 46 | version "6.4.2" 47 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 48 | integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 49 | 50 | ajv@^6.9.1: 51 | version "6.10.0" 52 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 53 | integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== 54 | dependencies: 55 | fast-deep-equal "^2.0.1" 56 | fast-json-stable-stringify "^2.0.0" 57 | json-schema-traverse "^0.4.1" 58 | uri-js "^4.2.2" 59 | 60 | ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: 61 | version "3.2.0" 62 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 63 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 64 | 65 | ansi-regex@^2.0.0: 66 | version "2.1.1" 67 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 68 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 69 | 70 | ansi-regex@^3.0.0: 71 | version "3.0.0" 72 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 73 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 74 | 75 | ansi-regex@^4.1.0: 76 | version "4.1.0" 77 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 78 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 79 | 80 | ansi-styles@^2.2.1: 81 | version "2.2.1" 82 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 83 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 84 | 85 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 86 | version "3.2.1" 87 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 88 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 89 | dependencies: 90 | color-convert "^1.9.0" 91 | 92 | any-observable@^0.3.0: 93 | version "0.3.0" 94 | resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" 95 | integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== 96 | 97 | argparse@^1.0.7: 98 | version "1.0.10" 99 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 100 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 101 | dependencies: 102 | sprintf-js "~1.0.2" 103 | 104 | arr-diff@^4.0.0: 105 | version "4.0.0" 106 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 107 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 108 | 109 | arr-flatten@^1.1.0: 110 | version "1.1.0" 111 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 112 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 113 | 114 | arr-union@^3.1.0: 115 | version "3.1.0" 116 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 117 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 118 | 119 | array-union@^1.0.1: 120 | version "1.0.2" 121 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 122 | integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= 123 | dependencies: 124 | array-uniq "^1.0.1" 125 | 126 | array-uniq@^1.0.1: 127 | version "1.0.3" 128 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 129 | integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= 130 | 131 | array-unique@^0.3.2: 132 | version "0.3.2" 133 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 134 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 135 | 136 | arrify@^1.0.1: 137 | version "1.0.1" 138 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 139 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 140 | 141 | assign-symbols@^1.0.0: 142 | version "1.0.0" 143 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 144 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 145 | 146 | astral-regex@^1.0.0: 147 | version "1.0.0" 148 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 149 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 150 | 151 | atob@^2.1.1: 152 | version "2.1.2" 153 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 154 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 155 | 156 | balanced-match@^1.0.0: 157 | version "1.0.0" 158 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 159 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 160 | 161 | base@^0.11.1: 162 | version "0.11.2" 163 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 164 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 165 | dependencies: 166 | cache-base "^1.0.1" 167 | class-utils "^0.3.5" 168 | component-emitter "^1.2.1" 169 | define-property "^1.0.0" 170 | isobject "^3.0.1" 171 | mixin-deep "^1.2.0" 172 | pascalcase "^0.1.1" 173 | 174 | brace-expansion@^1.1.7: 175 | version "1.1.11" 176 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 177 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 178 | dependencies: 179 | balanced-match "^1.0.0" 180 | concat-map "0.0.1" 181 | 182 | braces@^2.3.1: 183 | version "2.3.2" 184 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 185 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 186 | dependencies: 187 | arr-flatten "^1.1.0" 188 | array-unique "^0.3.2" 189 | extend-shallow "^2.0.1" 190 | fill-range "^4.0.0" 191 | isobject "^3.0.1" 192 | repeat-element "^1.1.2" 193 | snapdragon "^0.8.1" 194 | snapdragon-node "^2.0.1" 195 | split-string "^3.0.2" 196 | to-regex "^3.0.1" 197 | 198 | cache-base@^1.0.1: 199 | version "1.0.1" 200 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 201 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 202 | dependencies: 203 | collection-visit "^1.0.0" 204 | component-emitter "^1.2.1" 205 | get-value "^2.0.6" 206 | has-value "^1.0.0" 207 | isobject "^3.0.1" 208 | set-value "^2.0.0" 209 | to-object-path "^0.3.0" 210 | union-value "^1.0.0" 211 | unset-value "^1.0.0" 212 | 213 | caller-callsite@^2.0.0: 214 | version "2.0.0" 215 | resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" 216 | integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= 217 | dependencies: 218 | callsites "^2.0.0" 219 | 220 | caller-path@^2.0.0: 221 | version "2.0.0" 222 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" 223 | integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= 224 | dependencies: 225 | caller-callsite "^2.0.0" 226 | 227 | callsites@^2.0.0: 228 | version "2.0.0" 229 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 230 | integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= 231 | 232 | callsites@^3.0.0: 233 | version "3.1.0" 234 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 235 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 236 | 237 | chalk@^1.0.0, chalk@^1.1.3: 238 | version "1.1.3" 239 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 240 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 241 | dependencies: 242 | ansi-styles "^2.2.1" 243 | escape-string-regexp "^1.0.2" 244 | has-ansi "^2.0.0" 245 | strip-ansi "^3.0.0" 246 | supports-color "^2.0.0" 247 | 248 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: 249 | version "2.4.2" 250 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 251 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 252 | dependencies: 253 | ansi-styles "^3.2.1" 254 | escape-string-regexp "^1.0.5" 255 | supports-color "^5.3.0" 256 | 257 | chardet@^0.7.0: 258 | version "0.7.0" 259 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 260 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 261 | 262 | ci-info@^2.0.0: 263 | version "2.0.0" 264 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 265 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 266 | 267 | class-utils@^0.3.5: 268 | version "0.3.6" 269 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 270 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 271 | dependencies: 272 | arr-union "^3.1.0" 273 | define-property "^0.2.5" 274 | isobject "^3.0.0" 275 | static-extend "^0.1.1" 276 | 277 | cli-cursor@^2.0.0, cli-cursor@^2.1.0: 278 | version "2.1.0" 279 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 280 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 281 | dependencies: 282 | restore-cursor "^2.0.0" 283 | 284 | cli-truncate@^0.2.1: 285 | version "0.2.1" 286 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" 287 | integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= 288 | dependencies: 289 | slice-ansi "0.0.4" 290 | string-width "^1.0.1" 291 | 292 | cli-width@^2.0.0: 293 | version "2.2.0" 294 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 295 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 296 | 297 | code-point-at@^1.0.0: 298 | version "1.1.0" 299 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 300 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 301 | 302 | collection-visit@^1.0.0: 303 | version "1.0.0" 304 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 305 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 306 | dependencies: 307 | map-visit "^1.0.0" 308 | object-visit "^1.0.0" 309 | 310 | color-convert@^1.9.0: 311 | version "1.9.3" 312 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 313 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 314 | dependencies: 315 | color-name "1.1.3" 316 | 317 | color-name@1.1.3: 318 | version "1.1.3" 319 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 320 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 321 | 322 | commander@^2.14.1, commander@^2.9.0: 323 | version "2.20.0" 324 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 325 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 326 | 327 | component-emitter@^1.2.1: 328 | version "1.3.0" 329 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 330 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 331 | 332 | concat-map@0.0.1: 333 | version "0.0.1" 334 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 335 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 336 | 337 | copy-descriptor@^0.1.0: 338 | version "0.1.1" 339 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 340 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 341 | 342 | cosmiconfig@^5.0.2, cosmiconfig@^5.2.0: 343 | version "5.2.0" 344 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" 345 | integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== 346 | dependencies: 347 | import-fresh "^2.0.0" 348 | is-directory "^0.3.1" 349 | js-yaml "^3.13.0" 350 | parse-json "^4.0.0" 351 | 352 | cross-spawn@^6.0.0, cross-spawn@^6.0.5: 353 | version "6.0.5" 354 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 355 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 356 | dependencies: 357 | nice-try "^1.0.4" 358 | path-key "^2.0.1" 359 | semver "^5.5.0" 360 | shebang-command "^1.2.0" 361 | which "^1.2.9" 362 | 363 | date-fns@^1.27.2: 364 | version "1.30.1" 365 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" 366 | integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== 367 | 368 | debug@^2.2.0, debug@^2.3.3: 369 | version "2.6.9" 370 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 371 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 372 | dependencies: 373 | ms "2.0.0" 374 | 375 | debug@^3.1.0: 376 | version "3.2.6" 377 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 378 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 379 | dependencies: 380 | ms "^2.1.1" 381 | 382 | debug@^4.0.1: 383 | version "4.1.1" 384 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 385 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 386 | dependencies: 387 | ms "^2.1.1" 388 | 389 | decode-uri-component@^0.2.0: 390 | version "0.2.0" 391 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 392 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 393 | 394 | dedent@^0.7.0: 395 | version "0.7.0" 396 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 397 | integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= 398 | 399 | deep-is@~0.1.3: 400 | version "0.1.3" 401 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 402 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 403 | 404 | define-property@^0.2.5: 405 | version "0.2.5" 406 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 407 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 408 | dependencies: 409 | is-descriptor "^0.1.0" 410 | 411 | define-property@^1.0.0: 412 | version "1.0.0" 413 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 414 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 415 | dependencies: 416 | is-descriptor "^1.0.0" 417 | 418 | define-property@^2.0.2: 419 | version "2.0.2" 420 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 421 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 422 | dependencies: 423 | is-descriptor "^1.0.2" 424 | isobject "^3.0.1" 425 | 426 | del@^3.0.0: 427 | version "3.0.0" 428 | resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" 429 | integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= 430 | dependencies: 431 | globby "^6.1.0" 432 | is-path-cwd "^1.0.0" 433 | is-path-in-cwd "^1.0.0" 434 | p-map "^1.1.1" 435 | pify "^3.0.0" 436 | rimraf "^2.2.8" 437 | 438 | doctrine@^3.0.0: 439 | version "3.0.0" 440 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 441 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 442 | dependencies: 443 | esutils "^2.0.2" 444 | 445 | elegant-spinner@^1.0.1: 446 | version "1.0.1" 447 | resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 448 | integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= 449 | 450 | emoji-regex@^7.0.1: 451 | version "7.0.3" 452 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 453 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 454 | 455 | end-of-stream@^1.1.0: 456 | version "1.4.1" 457 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 458 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 459 | dependencies: 460 | once "^1.4.0" 461 | 462 | error-ex@^1.3.1: 463 | version "1.3.2" 464 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 465 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 466 | dependencies: 467 | is-arrayish "^0.2.1" 468 | 469 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: 470 | version "1.0.5" 471 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 472 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 473 | 474 | eslint-config-prettier@^2.9.0: 475 | version "2.10.0" 476 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" 477 | integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== 478 | dependencies: 479 | get-stdin "^5.0.1" 480 | 481 | eslint-scope@^4.0.3: 482 | version "4.0.3" 483 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 484 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== 485 | dependencies: 486 | esrecurse "^4.1.0" 487 | estraverse "^4.1.1" 488 | 489 | eslint-utils@^1.3.1: 490 | version "1.4.3" 491 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 492 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 493 | dependencies: 494 | eslint-visitor-keys "^1.1.0" 495 | 496 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: 497 | version "1.1.0" 498 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" 499 | integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== 500 | 501 | eslint@^5.16.0: 502 | version "5.16.0" 503 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" 504 | integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== 505 | dependencies: 506 | "@babel/code-frame" "^7.0.0" 507 | ajv "^6.9.1" 508 | chalk "^2.1.0" 509 | cross-spawn "^6.0.5" 510 | debug "^4.0.1" 511 | doctrine "^3.0.0" 512 | eslint-scope "^4.0.3" 513 | eslint-utils "^1.3.1" 514 | eslint-visitor-keys "^1.0.0" 515 | espree "^5.0.1" 516 | esquery "^1.0.1" 517 | esutils "^2.0.2" 518 | file-entry-cache "^5.0.1" 519 | functional-red-black-tree "^1.0.1" 520 | glob "^7.1.2" 521 | globals "^11.7.0" 522 | ignore "^4.0.6" 523 | import-fresh "^3.0.0" 524 | imurmurhash "^0.1.4" 525 | inquirer "^6.2.2" 526 | js-yaml "^3.13.0" 527 | json-stable-stringify-without-jsonify "^1.0.1" 528 | levn "^0.3.0" 529 | lodash "^4.17.11" 530 | minimatch "^3.0.4" 531 | mkdirp "^0.5.1" 532 | natural-compare "^1.4.0" 533 | optionator "^0.8.2" 534 | path-is-inside "^1.0.2" 535 | progress "^2.0.0" 536 | regexpp "^2.0.1" 537 | semver "^5.5.1" 538 | strip-ansi "^4.0.0" 539 | strip-json-comments "^2.0.1" 540 | table "^5.2.3" 541 | text-table "^0.2.0" 542 | 543 | espree@^5.0.1: 544 | version "5.0.1" 545 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" 546 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== 547 | dependencies: 548 | acorn "^6.0.7" 549 | acorn-jsx "^5.0.0" 550 | eslint-visitor-keys "^1.0.0" 551 | 552 | esprima@^4.0.0: 553 | version "4.0.1" 554 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 555 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 556 | 557 | esquery@^1.0.1: 558 | version "1.0.1" 559 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 560 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 561 | dependencies: 562 | estraverse "^4.0.0" 563 | 564 | esrecurse@^4.1.0: 565 | version "4.2.1" 566 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 567 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 568 | dependencies: 569 | estraverse "^4.1.0" 570 | 571 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 572 | version "4.2.0" 573 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 574 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 575 | 576 | esutils@^2.0.2: 577 | version "2.0.2" 578 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 579 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 580 | 581 | execa@^1.0.0: 582 | version "1.0.0" 583 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 584 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 585 | dependencies: 586 | cross-spawn "^6.0.0" 587 | get-stream "^4.0.0" 588 | is-stream "^1.1.0" 589 | npm-run-path "^2.0.0" 590 | p-finally "^1.0.0" 591 | signal-exit "^3.0.0" 592 | strip-eof "^1.0.0" 593 | 594 | expand-brackets@^2.1.4: 595 | version "2.1.4" 596 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 597 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 598 | dependencies: 599 | debug "^2.3.3" 600 | define-property "^0.2.5" 601 | extend-shallow "^2.0.1" 602 | posix-character-classes "^0.1.0" 603 | regex-not "^1.0.0" 604 | snapdragon "^0.8.1" 605 | to-regex "^3.0.1" 606 | 607 | extend-shallow@^2.0.1: 608 | version "2.0.1" 609 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 610 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 611 | dependencies: 612 | is-extendable "^0.1.0" 613 | 614 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 615 | version "3.0.2" 616 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 617 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 618 | dependencies: 619 | assign-symbols "^1.0.0" 620 | is-extendable "^1.0.1" 621 | 622 | external-editor@^3.0.3: 623 | version "3.0.3" 624 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 625 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== 626 | dependencies: 627 | chardet "^0.7.0" 628 | iconv-lite "^0.4.24" 629 | tmp "^0.0.33" 630 | 631 | extglob@^2.0.4: 632 | version "2.0.4" 633 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 634 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 635 | dependencies: 636 | array-unique "^0.3.2" 637 | define-property "^1.0.0" 638 | expand-brackets "^2.1.4" 639 | extend-shallow "^2.0.1" 640 | fragment-cache "^0.2.1" 641 | regex-not "^1.0.0" 642 | snapdragon "^0.8.1" 643 | to-regex "^3.0.1" 644 | 645 | fast-deep-equal@^2.0.1: 646 | version "2.0.1" 647 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 648 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 649 | 650 | fast-json-stable-stringify@^2.0.0: 651 | version "2.0.0" 652 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 653 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 654 | 655 | fast-levenshtein@~2.0.4: 656 | version "2.0.6" 657 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 658 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 659 | 660 | figures@^1.7.0: 661 | version "1.7.0" 662 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 663 | integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= 664 | dependencies: 665 | escape-string-regexp "^1.0.5" 666 | object-assign "^4.1.0" 667 | 668 | figures@^2.0.0: 669 | version "2.0.0" 670 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 671 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 672 | dependencies: 673 | escape-string-regexp "^1.0.5" 674 | 675 | file-entry-cache@^5.0.1: 676 | version "5.0.1" 677 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 678 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 679 | dependencies: 680 | flat-cache "^2.0.1" 681 | 682 | fill-range@^4.0.0: 683 | version "4.0.0" 684 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 685 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 686 | dependencies: 687 | extend-shallow "^2.0.1" 688 | is-number "^3.0.0" 689 | repeat-string "^1.6.1" 690 | to-regex-range "^2.1.0" 691 | 692 | find-parent-dir@^0.3.0: 693 | version "0.3.0" 694 | resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" 695 | integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= 696 | 697 | find-up@^3.0.0: 698 | version "3.0.0" 699 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 700 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 701 | dependencies: 702 | locate-path "^3.0.0" 703 | 704 | flat-cache@^2.0.1: 705 | version "2.0.1" 706 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 707 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 708 | dependencies: 709 | flatted "^2.0.0" 710 | rimraf "2.6.3" 711 | write "1.0.3" 712 | 713 | flatted@^2.0.0: 714 | version "2.0.0" 715 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" 716 | integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== 717 | 718 | fn-name@~2.0.1: 719 | version "2.0.1" 720 | resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" 721 | integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= 722 | 723 | for-in@^1.0.2: 724 | version "1.0.2" 725 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 726 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 727 | 728 | fragment-cache@^0.2.1: 729 | version "0.2.1" 730 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 731 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 732 | dependencies: 733 | map-cache "^0.2.2" 734 | 735 | fs.realpath@^1.0.0: 736 | version "1.0.0" 737 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 738 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 739 | 740 | functional-red-black-tree@^1.0.1: 741 | version "1.0.1" 742 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 743 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 744 | 745 | g-status@^2.0.2: 746 | version "2.0.2" 747 | resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97" 748 | integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA== 749 | dependencies: 750 | arrify "^1.0.1" 751 | matcher "^1.0.0" 752 | simple-git "^1.85.0" 753 | 754 | get-own-enumerable-property-symbols@^3.0.0: 755 | version "3.0.0" 756 | resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" 757 | integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== 758 | 759 | get-stdin@^5.0.1: 760 | version "5.0.1" 761 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 762 | integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= 763 | 764 | get-stdin@^7.0.0: 765 | version "7.0.0" 766 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" 767 | integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== 768 | 769 | get-stream@^4.0.0: 770 | version "4.1.0" 771 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 772 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 773 | dependencies: 774 | pump "^3.0.0" 775 | 776 | get-value@^2.0.3, get-value@^2.0.6: 777 | version "2.0.6" 778 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 779 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 780 | 781 | glob@^7.0.3: 782 | version "7.1.4" 783 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 784 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 785 | dependencies: 786 | fs.realpath "^1.0.0" 787 | inflight "^1.0.4" 788 | inherits "2" 789 | minimatch "^3.0.4" 790 | once "^1.3.0" 791 | path-is-absolute "^1.0.0" 792 | 793 | glob@^7.1.2, glob@^7.1.3: 794 | version "7.1.3" 795 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 796 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 797 | dependencies: 798 | fs.realpath "^1.0.0" 799 | inflight "^1.0.4" 800 | inherits "2" 801 | minimatch "^3.0.4" 802 | once "^1.3.0" 803 | path-is-absolute "^1.0.0" 804 | 805 | globals@^11.7.0: 806 | version "11.11.0" 807 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" 808 | integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== 809 | 810 | globby@^6.1.0: 811 | version "6.1.0" 812 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 813 | integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= 814 | dependencies: 815 | array-union "^1.0.1" 816 | glob "^7.0.3" 817 | object-assign "^4.0.1" 818 | pify "^2.0.0" 819 | pinkie-promise "^2.0.0" 820 | 821 | has-ansi@^2.0.0: 822 | version "2.0.0" 823 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 824 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 825 | dependencies: 826 | ansi-regex "^2.0.0" 827 | 828 | has-flag@^3.0.0: 829 | version "3.0.0" 830 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 831 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 832 | 833 | has-value@^0.3.1: 834 | version "0.3.1" 835 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 836 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 837 | dependencies: 838 | get-value "^2.0.3" 839 | has-values "^0.1.4" 840 | isobject "^2.0.0" 841 | 842 | has-value@^1.0.0: 843 | version "1.0.0" 844 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 845 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 846 | dependencies: 847 | get-value "^2.0.6" 848 | has-values "^1.0.0" 849 | isobject "^3.0.0" 850 | 851 | has-values@^0.1.4: 852 | version "0.1.4" 853 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 854 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 855 | 856 | has-values@^1.0.0: 857 | version "1.0.0" 858 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 859 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 860 | dependencies: 861 | is-number "^3.0.0" 862 | kind-of "^4.0.0" 863 | 864 | hosted-git-info@^2.1.4: 865 | version "2.8.9" 866 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 867 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 868 | 869 | husky@^2.3.0: 870 | version "2.3.0" 871 | resolved "https://registry.yarnpkg.com/husky/-/husky-2.3.0.tgz#8b78ed24d763042df7fd899991985d65a976dd13" 872 | integrity sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A== 873 | dependencies: 874 | cosmiconfig "^5.2.0" 875 | execa "^1.0.0" 876 | find-up "^3.0.0" 877 | get-stdin "^7.0.0" 878 | is-ci "^2.0.0" 879 | pkg-dir "^4.1.0" 880 | please-upgrade-node "^3.1.1" 881 | read-pkg "^5.1.1" 882 | run-node "^1.0.0" 883 | slash "^3.0.0" 884 | 885 | iconv-lite@^0.4.24: 886 | version "0.4.24" 887 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 888 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 889 | dependencies: 890 | safer-buffer ">= 2.1.2 < 3" 891 | 892 | ignore@^4.0.6: 893 | version "4.0.6" 894 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 895 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 896 | 897 | import-fresh@^2.0.0: 898 | version "2.0.0" 899 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 900 | integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= 901 | dependencies: 902 | caller-path "^2.0.0" 903 | resolve-from "^3.0.0" 904 | 905 | import-fresh@^3.0.0: 906 | version "3.0.0" 907 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" 908 | integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== 909 | dependencies: 910 | parent-module "^1.0.0" 911 | resolve-from "^4.0.0" 912 | 913 | imurmurhash@^0.1.4: 914 | version "0.1.4" 915 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 916 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 917 | 918 | indent-string@^3.0.0: 919 | version "3.2.0" 920 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 921 | integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= 922 | 923 | inflight@^1.0.4: 924 | version "1.0.6" 925 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 926 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 927 | dependencies: 928 | once "^1.3.0" 929 | wrappy "1" 930 | 931 | inherits@2: 932 | version "2.0.3" 933 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 934 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 935 | 936 | inquirer@^6.2.2: 937 | version "6.3.1" 938 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" 939 | integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== 940 | dependencies: 941 | ansi-escapes "^3.2.0" 942 | chalk "^2.4.2" 943 | cli-cursor "^2.1.0" 944 | cli-width "^2.0.0" 945 | external-editor "^3.0.3" 946 | figures "^2.0.0" 947 | lodash "^4.17.11" 948 | mute-stream "0.0.7" 949 | run-async "^2.2.0" 950 | rxjs "^6.4.0" 951 | string-width "^2.1.0" 952 | strip-ansi "^5.1.0" 953 | through "^2.3.6" 954 | 955 | is-accessor-descriptor@^0.1.6: 956 | version "0.1.6" 957 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 958 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 959 | dependencies: 960 | kind-of "^3.0.2" 961 | 962 | is-accessor-descriptor@^1.0.0: 963 | version "1.0.0" 964 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 965 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 966 | dependencies: 967 | kind-of "^6.0.0" 968 | 969 | is-arrayish@^0.2.1: 970 | version "0.2.1" 971 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 972 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 973 | 974 | is-buffer@^1.1.5: 975 | version "1.1.6" 976 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 977 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 978 | 979 | is-ci@^2.0.0: 980 | version "2.0.0" 981 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 982 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 983 | dependencies: 984 | ci-info "^2.0.0" 985 | 986 | is-data-descriptor@^0.1.4: 987 | version "0.1.4" 988 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 989 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 990 | dependencies: 991 | kind-of "^3.0.2" 992 | 993 | is-data-descriptor@^1.0.0: 994 | version "1.0.0" 995 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 996 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 997 | dependencies: 998 | kind-of "^6.0.0" 999 | 1000 | is-descriptor@^0.1.0: 1001 | version "0.1.6" 1002 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1003 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 1004 | dependencies: 1005 | is-accessor-descriptor "^0.1.6" 1006 | is-data-descriptor "^0.1.4" 1007 | kind-of "^5.0.0" 1008 | 1009 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1010 | version "1.0.2" 1011 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1012 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 1013 | dependencies: 1014 | is-accessor-descriptor "^1.0.0" 1015 | is-data-descriptor "^1.0.0" 1016 | kind-of "^6.0.2" 1017 | 1018 | is-directory@^0.3.1: 1019 | version "0.3.1" 1020 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 1021 | integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= 1022 | 1023 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1024 | version "0.1.1" 1025 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1026 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1027 | 1028 | is-extendable@^1.0.1: 1029 | version "1.0.1" 1030 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1031 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 1032 | dependencies: 1033 | is-plain-object "^2.0.4" 1034 | 1035 | is-extglob@^2.1.1: 1036 | version "2.1.1" 1037 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1038 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1039 | 1040 | is-fullwidth-code-point@^1.0.0: 1041 | version "1.0.0" 1042 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1043 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1044 | dependencies: 1045 | number-is-nan "^1.0.0" 1046 | 1047 | is-fullwidth-code-point@^2.0.0: 1048 | version "2.0.0" 1049 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1050 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1051 | 1052 | is-glob@^4.0.0: 1053 | version "4.0.1" 1054 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1055 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1056 | dependencies: 1057 | is-extglob "^2.1.1" 1058 | 1059 | is-number@^3.0.0: 1060 | version "3.0.0" 1061 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1062 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 1063 | dependencies: 1064 | kind-of "^3.0.2" 1065 | 1066 | is-obj@^1.0.1: 1067 | version "1.0.1" 1068 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1069 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 1070 | 1071 | is-observable@^1.1.0: 1072 | version "1.1.0" 1073 | resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" 1074 | integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== 1075 | dependencies: 1076 | symbol-observable "^1.1.0" 1077 | 1078 | is-path-cwd@^1.0.0: 1079 | version "1.0.0" 1080 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1081 | integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= 1082 | 1083 | is-path-in-cwd@^1.0.0: 1084 | version "1.0.1" 1085 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" 1086 | integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== 1087 | dependencies: 1088 | is-path-inside "^1.0.0" 1089 | 1090 | is-path-inside@^1.0.0: 1091 | version "1.0.1" 1092 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1093 | integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= 1094 | dependencies: 1095 | path-is-inside "^1.0.1" 1096 | 1097 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1098 | version "2.0.4" 1099 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1100 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1101 | dependencies: 1102 | isobject "^3.0.1" 1103 | 1104 | is-promise@^2.1.0: 1105 | version "2.1.0" 1106 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1107 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 1108 | 1109 | is-regexp@^1.0.0: 1110 | version "1.0.0" 1111 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" 1112 | integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= 1113 | 1114 | is-stream@^1.1.0: 1115 | version "1.1.0" 1116 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1117 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1118 | 1119 | is-windows@^1.0.2: 1120 | version "1.0.2" 1121 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1122 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1123 | 1124 | isarray@1.0.0: 1125 | version "1.0.0" 1126 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1127 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1128 | 1129 | isexe@^2.0.0: 1130 | version "2.0.0" 1131 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1132 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1133 | 1134 | isobject@^2.0.0: 1135 | version "2.1.0" 1136 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1137 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1138 | dependencies: 1139 | isarray "1.0.0" 1140 | 1141 | isobject@^3.0.0, isobject@^3.0.1: 1142 | version "3.0.1" 1143 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1144 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 1145 | 1146 | js-tokens@^4.0.0: 1147 | version "4.0.0" 1148 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1149 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1150 | 1151 | js-yaml@^3.13.0: 1152 | version "3.13.1" 1153 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1154 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1155 | dependencies: 1156 | argparse "^1.0.7" 1157 | esprima "^4.0.0" 1158 | 1159 | json-parse-better-errors@^1.0.1: 1160 | version "1.0.2" 1161 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1162 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1163 | 1164 | json-schema-traverse@^0.4.1: 1165 | version "0.4.1" 1166 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1167 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1168 | 1169 | json-stable-stringify-without-jsonify@^1.0.1: 1170 | version "1.0.1" 1171 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1172 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1173 | 1174 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1175 | version "3.2.2" 1176 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1177 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 1178 | dependencies: 1179 | is-buffer "^1.1.5" 1180 | 1181 | kind-of@^4.0.0: 1182 | version "4.0.0" 1183 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1184 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 1185 | dependencies: 1186 | is-buffer "^1.1.5" 1187 | 1188 | kind-of@^5.0.0: 1189 | version "5.1.0" 1190 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1191 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 1192 | 1193 | kind-of@^6.0.0, kind-of@^6.0.2: 1194 | version "6.0.2" 1195 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1196 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== 1197 | 1198 | levn@^0.3.0, levn@~0.3.0: 1199 | version "0.3.0" 1200 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1201 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1202 | dependencies: 1203 | prelude-ls "~1.1.2" 1204 | type-check "~0.3.2" 1205 | 1206 | lint-staged@^8.1.6: 1207 | version "8.1.6" 1208 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.6.tgz#128a9bc5effbf69a359fb8f7eeb2da71a998daf6" 1209 | integrity sha512-QT13AniHN6swAtTjsrzxOfE4TVCiQ39xESwLmjGVNCMMZ/PK5aopwvbxLrzw+Zf9OxM3cQG6WCx9lceLzETOnQ== 1210 | dependencies: 1211 | chalk "^2.3.1" 1212 | commander "^2.14.1" 1213 | cosmiconfig "^5.0.2" 1214 | debug "^3.1.0" 1215 | dedent "^0.7.0" 1216 | del "^3.0.0" 1217 | execa "^1.0.0" 1218 | find-parent-dir "^0.3.0" 1219 | g-status "^2.0.2" 1220 | is-glob "^4.0.0" 1221 | is-windows "^1.0.2" 1222 | listr "^0.14.2" 1223 | listr-update-renderer "^0.5.0" 1224 | lodash "^4.17.11" 1225 | log-symbols "^2.2.0" 1226 | micromatch "^3.1.8" 1227 | npm-which "^3.0.1" 1228 | p-map "^1.1.1" 1229 | path-is-inside "^1.0.2" 1230 | pify "^3.0.0" 1231 | please-upgrade-node "^3.0.2" 1232 | staged-git-files "1.1.2" 1233 | string-argv "^0.0.2" 1234 | stringify-object "^3.2.2" 1235 | yup "^0.27.0" 1236 | 1237 | listr-silent-renderer@^1.1.1: 1238 | version "1.1.1" 1239 | resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" 1240 | integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= 1241 | 1242 | listr-update-renderer@^0.5.0: 1243 | version "0.5.0" 1244 | resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" 1245 | integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== 1246 | dependencies: 1247 | chalk "^1.1.3" 1248 | cli-truncate "^0.2.1" 1249 | elegant-spinner "^1.0.1" 1250 | figures "^1.7.0" 1251 | indent-string "^3.0.0" 1252 | log-symbols "^1.0.2" 1253 | log-update "^2.3.0" 1254 | strip-ansi "^3.0.1" 1255 | 1256 | listr-verbose-renderer@^0.5.0: 1257 | version "0.5.0" 1258 | resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" 1259 | integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== 1260 | dependencies: 1261 | chalk "^2.4.1" 1262 | cli-cursor "^2.1.0" 1263 | date-fns "^1.27.2" 1264 | figures "^2.0.0" 1265 | 1266 | listr@^0.14.2: 1267 | version "0.14.3" 1268 | resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" 1269 | integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== 1270 | dependencies: 1271 | "@samverschueren/stream-to-observable" "^0.3.0" 1272 | is-observable "^1.1.0" 1273 | is-promise "^2.1.0" 1274 | is-stream "^1.1.0" 1275 | listr-silent-renderer "^1.1.1" 1276 | listr-update-renderer "^0.5.0" 1277 | listr-verbose-renderer "^0.5.0" 1278 | p-map "^2.0.0" 1279 | rxjs "^6.3.3" 1280 | 1281 | locate-path@^3.0.0: 1282 | version "3.0.0" 1283 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1284 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1285 | dependencies: 1286 | p-locate "^3.0.0" 1287 | path-exists "^3.0.0" 1288 | 1289 | lodash@^4.17.11: 1290 | version "4.17.21" 1291 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1292 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1293 | 1294 | log-symbols@^1.0.2: 1295 | version "1.0.2" 1296 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" 1297 | integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= 1298 | dependencies: 1299 | chalk "^1.0.0" 1300 | 1301 | log-symbols@^2.2.0: 1302 | version "2.2.0" 1303 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1304 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1305 | dependencies: 1306 | chalk "^2.0.1" 1307 | 1308 | log-update@^2.3.0: 1309 | version "2.3.0" 1310 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" 1311 | integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= 1312 | dependencies: 1313 | ansi-escapes "^3.0.0" 1314 | cli-cursor "^2.0.0" 1315 | wrap-ansi "^3.0.1" 1316 | 1317 | map-cache@^0.2.2: 1318 | version "0.2.2" 1319 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1320 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 1321 | 1322 | map-visit@^1.0.0: 1323 | version "1.0.0" 1324 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1325 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 1326 | dependencies: 1327 | object-visit "^1.0.0" 1328 | 1329 | matcher@^1.0.0: 1330 | version "1.1.1" 1331 | resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" 1332 | integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg== 1333 | dependencies: 1334 | escape-string-regexp "^1.0.4" 1335 | 1336 | micromatch@^3.1.8: 1337 | version "3.1.10" 1338 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1339 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 1340 | dependencies: 1341 | arr-diff "^4.0.0" 1342 | array-unique "^0.3.2" 1343 | braces "^2.3.1" 1344 | define-property "^2.0.2" 1345 | extend-shallow "^3.0.2" 1346 | extglob "^2.0.4" 1347 | fragment-cache "^0.2.1" 1348 | kind-of "^6.0.2" 1349 | nanomatch "^1.2.9" 1350 | object.pick "^1.3.0" 1351 | regex-not "^1.0.0" 1352 | snapdragon "^0.8.1" 1353 | to-regex "^3.0.2" 1354 | 1355 | mimic-fn@^1.0.0: 1356 | version "1.2.0" 1357 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1358 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1359 | 1360 | minimatch@^3.0.4: 1361 | version "3.0.4" 1362 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1363 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1364 | dependencies: 1365 | brace-expansion "^1.1.7" 1366 | 1367 | minimist@0.0.8: 1368 | version "0.0.8" 1369 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1370 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1371 | 1372 | mixin-deep@^1.2.0: 1373 | version "1.3.2" 1374 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 1375 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 1376 | dependencies: 1377 | for-in "^1.0.2" 1378 | is-extendable "^1.0.1" 1379 | 1380 | mkdirp@^0.5.1: 1381 | version "0.5.1" 1382 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1383 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1384 | dependencies: 1385 | minimist "0.0.8" 1386 | 1387 | ms@2.0.0: 1388 | version "2.0.0" 1389 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1390 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1391 | 1392 | ms@^2.1.1: 1393 | version "2.1.1" 1394 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1395 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1396 | 1397 | mute-stream@0.0.7: 1398 | version "0.0.7" 1399 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1400 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1401 | 1402 | nanomatch@^1.2.9: 1403 | version "1.2.13" 1404 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 1405 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 1406 | dependencies: 1407 | arr-diff "^4.0.0" 1408 | array-unique "^0.3.2" 1409 | define-property "^2.0.2" 1410 | extend-shallow "^3.0.2" 1411 | fragment-cache "^0.2.1" 1412 | is-windows "^1.0.2" 1413 | kind-of "^6.0.2" 1414 | object.pick "^1.3.0" 1415 | regex-not "^1.0.0" 1416 | snapdragon "^0.8.1" 1417 | to-regex "^3.0.1" 1418 | 1419 | natural-compare@^1.4.0: 1420 | version "1.4.0" 1421 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1422 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1423 | 1424 | nice-try@^1.0.4: 1425 | version "1.0.5" 1426 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1427 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1428 | 1429 | normalize-package-data@^2.5.0: 1430 | version "2.5.0" 1431 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1432 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1433 | dependencies: 1434 | hosted-git-info "^2.1.4" 1435 | resolve "^1.10.0" 1436 | semver "2 || 3 || 4 || 5" 1437 | validate-npm-package-license "^3.0.1" 1438 | 1439 | npm-path@^2.0.2: 1440 | version "2.0.4" 1441 | resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" 1442 | integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== 1443 | dependencies: 1444 | which "^1.2.10" 1445 | 1446 | npm-run-path@^2.0.0: 1447 | version "2.0.2" 1448 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1449 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1450 | dependencies: 1451 | path-key "^2.0.0" 1452 | 1453 | npm-which@^3.0.1: 1454 | version "3.0.1" 1455 | resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" 1456 | integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= 1457 | dependencies: 1458 | commander "^2.9.0" 1459 | npm-path "^2.0.2" 1460 | which "^1.2.10" 1461 | 1462 | number-is-nan@^1.0.0: 1463 | version "1.0.1" 1464 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1465 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1466 | 1467 | object-assign@^4.0.1, object-assign@^4.1.0: 1468 | version "4.1.1" 1469 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1470 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1471 | 1472 | object-copy@^0.1.0: 1473 | version "0.1.0" 1474 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1475 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 1476 | dependencies: 1477 | copy-descriptor "^0.1.0" 1478 | define-property "^0.2.5" 1479 | kind-of "^3.0.3" 1480 | 1481 | object-visit@^1.0.0: 1482 | version "1.0.1" 1483 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1484 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 1485 | dependencies: 1486 | isobject "^3.0.0" 1487 | 1488 | object.pick@^1.3.0: 1489 | version "1.3.0" 1490 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1491 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 1492 | dependencies: 1493 | isobject "^3.0.1" 1494 | 1495 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1496 | version "1.4.0" 1497 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1498 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1499 | dependencies: 1500 | wrappy "1" 1501 | 1502 | onetime@^2.0.0: 1503 | version "2.0.1" 1504 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1505 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1506 | dependencies: 1507 | mimic-fn "^1.0.0" 1508 | 1509 | optionator@^0.8.2: 1510 | version "0.8.2" 1511 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1512 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1513 | dependencies: 1514 | deep-is "~0.1.3" 1515 | fast-levenshtein "~2.0.4" 1516 | levn "~0.3.0" 1517 | prelude-ls "~1.1.2" 1518 | type-check "~0.3.2" 1519 | wordwrap "~1.0.0" 1520 | 1521 | os-tmpdir@~1.0.2: 1522 | version "1.0.2" 1523 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1524 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1525 | 1526 | p-finally@^1.0.0: 1527 | version "1.0.0" 1528 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1529 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1530 | 1531 | p-limit@^2.0.0: 1532 | version "2.2.0" 1533 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1534 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 1535 | dependencies: 1536 | p-try "^2.0.0" 1537 | 1538 | p-locate@^3.0.0: 1539 | version "3.0.0" 1540 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1541 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1542 | dependencies: 1543 | p-limit "^2.0.0" 1544 | 1545 | p-map@^1.1.1: 1546 | version "1.2.0" 1547 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" 1548 | integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== 1549 | 1550 | p-map@^2.0.0: 1551 | version "2.1.0" 1552 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" 1553 | integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== 1554 | 1555 | p-try@^2.0.0: 1556 | version "2.2.0" 1557 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1558 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1559 | 1560 | parent-module@^1.0.0: 1561 | version "1.0.1" 1562 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1563 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1564 | dependencies: 1565 | callsites "^3.0.0" 1566 | 1567 | parse-json@^4.0.0: 1568 | version "4.0.0" 1569 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1570 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1571 | dependencies: 1572 | error-ex "^1.3.1" 1573 | json-parse-better-errors "^1.0.1" 1574 | 1575 | pascalcase@^0.1.1: 1576 | version "0.1.1" 1577 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1578 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 1579 | 1580 | path-exists@^3.0.0: 1581 | version "3.0.0" 1582 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1583 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1584 | 1585 | path-is-absolute@^1.0.0: 1586 | version "1.0.1" 1587 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1588 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1589 | 1590 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: 1591 | version "1.0.2" 1592 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1593 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1594 | 1595 | path-key@^2.0.0, path-key@^2.0.1: 1596 | version "2.0.1" 1597 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1598 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1599 | 1600 | path-parse@^1.0.6: 1601 | version "1.0.7" 1602 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1603 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1604 | 1605 | pify@^2.0.0: 1606 | version "2.3.0" 1607 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1608 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1609 | 1610 | pify@^3.0.0: 1611 | version "3.0.0" 1612 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1613 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1614 | 1615 | pinkie-promise@^2.0.0: 1616 | version "2.0.1" 1617 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1618 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1619 | dependencies: 1620 | pinkie "^2.0.0" 1621 | 1622 | pinkie@^2.0.0: 1623 | version "2.0.4" 1624 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1625 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1626 | 1627 | pkg-dir@^4.1.0: 1628 | version "4.1.0" 1629 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.1.0.tgz#aaeb91c0d3b9c4f74a44ad849f4de34781ae01de" 1630 | integrity sha512-55k9QN4saZ8q518lE6EFgYiu95u3BWkSajCifhdQjvLvmr8IpnRbhI+UGpWJQfa0KzDguHeeWT1ccO1PmkOi3A== 1631 | dependencies: 1632 | find-up "^3.0.0" 1633 | 1634 | please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: 1635 | version "3.1.1" 1636 | resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" 1637 | integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== 1638 | dependencies: 1639 | semver-compare "^1.0.0" 1640 | 1641 | posix-character-classes@^0.1.0: 1642 | version "0.1.1" 1643 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 1644 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 1645 | 1646 | prelude-ls@~1.1.2: 1647 | version "1.1.2" 1648 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1649 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1650 | 1651 | prettier@^1.17.0: 1652 | version "1.17.0" 1653 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" 1654 | integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== 1655 | 1656 | progress@^2.0.0: 1657 | version "2.0.3" 1658 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1659 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1660 | 1661 | property-expr@^1.5.0: 1662 | version "1.5.1" 1663 | resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" 1664 | integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== 1665 | 1666 | pump@^3.0.0: 1667 | version "3.0.0" 1668 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1669 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1670 | dependencies: 1671 | end-of-stream "^1.1.0" 1672 | once "^1.3.1" 1673 | 1674 | punycode@^2.1.0: 1675 | version "2.1.1" 1676 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1677 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1678 | 1679 | read-pkg@^5.1.1: 1680 | version "5.1.1" 1681 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5" 1682 | integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w== 1683 | dependencies: 1684 | "@types/normalize-package-data" "^2.4.0" 1685 | normalize-package-data "^2.5.0" 1686 | parse-json "^4.0.0" 1687 | type-fest "^0.4.1" 1688 | 1689 | regenerator-runtime@^0.13.2: 1690 | version "0.13.2" 1691 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" 1692 | integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== 1693 | 1694 | regex-not@^1.0.0, regex-not@^1.0.2: 1695 | version "1.0.2" 1696 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 1697 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 1698 | dependencies: 1699 | extend-shallow "^3.0.2" 1700 | safe-regex "^1.1.0" 1701 | 1702 | regexpp@^2.0.1: 1703 | version "2.0.1" 1704 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1705 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1706 | 1707 | repeat-element@^1.1.2: 1708 | version "1.1.3" 1709 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 1710 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 1711 | 1712 | repeat-string@^1.6.1: 1713 | version "1.6.1" 1714 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1715 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 1716 | 1717 | resolve-from@^3.0.0: 1718 | version "3.0.0" 1719 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 1720 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= 1721 | 1722 | resolve-from@^4.0.0: 1723 | version "4.0.0" 1724 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1725 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1726 | 1727 | resolve-url@^0.2.1: 1728 | version "0.2.1" 1729 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1730 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 1731 | 1732 | resolve@^1.10.0: 1733 | version "1.10.1" 1734 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" 1735 | integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== 1736 | dependencies: 1737 | path-parse "^1.0.6" 1738 | 1739 | restore-cursor@^2.0.0: 1740 | version "2.0.0" 1741 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1742 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1743 | dependencies: 1744 | onetime "^2.0.0" 1745 | signal-exit "^3.0.2" 1746 | 1747 | ret@~0.1.10: 1748 | version "0.1.15" 1749 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 1750 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 1751 | 1752 | rimraf@2.6.3, rimraf@^2.2.8: 1753 | version "2.6.3" 1754 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1755 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1756 | dependencies: 1757 | glob "^7.1.3" 1758 | 1759 | run-async@^2.2.0: 1760 | version "2.3.0" 1761 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1762 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 1763 | dependencies: 1764 | is-promise "^2.1.0" 1765 | 1766 | run-node@^1.0.0: 1767 | version "1.0.0" 1768 | resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" 1769 | integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== 1770 | 1771 | rxjs@^6.3.3, rxjs@^6.4.0: 1772 | version "6.5.1" 1773 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" 1774 | integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== 1775 | dependencies: 1776 | tslib "^1.9.0" 1777 | 1778 | safe-regex@^1.1.0: 1779 | version "1.1.0" 1780 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 1781 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 1782 | dependencies: 1783 | ret "~0.1.10" 1784 | 1785 | "safer-buffer@>= 2.1.2 < 3": 1786 | version "2.1.2" 1787 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1788 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1789 | 1790 | semver-compare@^1.0.0: 1791 | version "1.0.0" 1792 | resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" 1793 | integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= 1794 | 1795 | "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.5.1: 1796 | version "5.7.0" 1797 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1798 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1799 | 1800 | servor@^3.0.0: 1801 | version "3.0.7" 1802 | resolved "https://registry.yarnpkg.com/servor/-/servor-3.0.7.tgz#82b86bcdc3516e55e398a5f2b8d460ddc61d0596" 1803 | integrity sha512-09+FJMHzMFlDclkQ+3Rc+BFlfa6cRbpyjY5TH7uj8QC4PMvP2V7CCzRXfIiATHtQ4HFuQ44ESacdsxbG/mPBJw== 1804 | 1805 | set-value@^0.4.3: 1806 | version "0.4.3" 1807 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 1808 | integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= 1809 | dependencies: 1810 | extend-shallow "^2.0.1" 1811 | is-extendable "^0.1.1" 1812 | is-plain-object "^2.0.1" 1813 | to-object-path "^0.3.0" 1814 | 1815 | set-value@^2.0.0: 1816 | version "2.0.0" 1817 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 1818 | integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== 1819 | dependencies: 1820 | extend-shallow "^2.0.1" 1821 | is-extendable "^0.1.1" 1822 | is-plain-object "^2.0.3" 1823 | split-string "^3.0.1" 1824 | 1825 | shebang-command@^1.2.0: 1826 | version "1.2.0" 1827 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1828 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1829 | dependencies: 1830 | shebang-regex "^1.0.0" 1831 | 1832 | shebang-regex@^1.0.0: 1833 | version "1.0.0" 1834 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1835 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1836 | 1837 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1838 | version "3.0.2" 1839 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1840 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1841 | 1842 | simple-git@^1.85.0: 1843 | version "1.113.0" 1844 | resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea" 1845 | integrity sha512-i9WVsrK2u0G/cASI9nh7voxOk9mhanWY9eGtWBDSYql6m49Yk5/Fan6uZsDr/xmzv8n+eQ8ahKCoEr8cvU3h+g== 1846 | dependencies: 1847 | debug "^4.0.1" 1848 | 1849 | slash@^3.0.0: 1850 | version "3.0.0" 1851 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1852 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1853 | 1854 | slice-ansi@0.0.4: 1855 | version "0.0.4" 1856 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 1857 | integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= 1858 | 1859 | slice-ansi@^2.1.0: 1860 | version "2.1.0" 1861 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1862 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1863 | dependencies: 1864 | ansi-styles "^3.2.0" 1865 | astral-regex "^1.0.0" 1866 | is-fullwidth-code-point "^2.0.0" 1867 | 1868 | snapdragon-node@^2.0.1: 1869 | version "2.1.1" 1870 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 1871 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 1872 | dependencies: 1873 | define-property "^1.0.0" 1874 | isobject "^3.0.0" 1875 | snapdragon-util "^3.0.1" 1876 | 1877 | snapdragon-util@^3.0.1: 1878 | version "3.0.1" 1879 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 1880 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 1881 | dependencies: 1882 | kind-of "^3.2.0" 1883 | 1884 | snapdragon@^0.8.1: 1885 | version "0.8.2" 1886 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 1887 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 1888 | dependencies: 1889 | base "^0.11.1" 1890 | debug "^2.2.0" 1891 | define-property "^0.2.5" 1892 | extend-shallow "^2.0.1" 1893 | map-cache "^0.2.2" 1894 | source-map "^0.5.6" 1895 | source-map-resolve "^0.5.0" 1896 | use "^3.1.0" 1897 | 1898 | source-map-resolve@^0.5.0: 1899 | version "0.5.2" 1900 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 1901 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== 1902 | dependencies: 1903 | atob "^2.1.1" 1904 | decode-uri-component "^0.2.0" 1905 | resolve-url "^0.2.1" 1906 | source-map-url "^0.4.0" 1907 | urix "^0.1.0" 1908 | 1909 | source-map-url@^0.4.0: 1910 | version "0.4.0" 1911 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1912 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 1913 | 1914 | source-map@^0.5.6: 1915 | version "0.5.7" 1916 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1917 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1918 | 1919 | spdx-correct@^3.0.0: 1920 | version "3.1.0" 1921 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 1922 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 1923 | dependencies: 1924 | spdx-expression-parse "^3.0.0" 1925 | spdx-license-ids "^3.0.0" 1926 | 1927 | spdx-exceptions@^2.1.0: 1928 | version "2.2.0" 1929 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 1930 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 1931 | 1932 | spdx-expression-parse@^3.0.0: 1933 | version "3.0.0" 1934 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 1935 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 1936 | dependencies: 1937 | spdx-exceptions "^2.1.0" 1938 | spdx-license-ids "^3.0.0" 1939 | 1940 | spdx-license-ids@^3.0.0: 1941 | version "3.0.4" 1942 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" 1943 | integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== 1944 | 1945 | split-string@^3.0.1, split-string@^3.0.2: 1946 | version "3.1.0" 1947 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1948 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 1949 | dependencies: 1950 | extend-shallow "^3.0.0" 1951 | 1952 | sprintf-js@~1.0.2: 1953 | version "1.0.3" 1954 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1955 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1956 | 1957 | staged-git-files@1.1.2: 1958 | version "1.1.2" 1959 | resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" 1960 | integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== 1961 | 1962 | static-extend@^0.1.1: 1963 | version "0.1.2" 1964 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 1965 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 1966 | dependencies: 1967 | define-property "^0.2.5" 1968 | object-copy "^0.1.0" 1969 | 1970 | string-argv@^0.0.2: 1971 | version "0.0.2" 1972 | resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" 1973 | integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= 1974 | 1975 | string-width@^1.0.1: 1976 | version "1.0.2" 1977 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1978 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1979 | dependencies: 1980 | code-point-at "^1.0.0" 1981 | is-fullwidth-code-point "^1.0.0" 1982 | strip-ansi "^3.0.0" 1983 | 1984 | string-width@^2.1.0, string-width@^2.1.1: 1985 | version "2.1.1" 1986 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1987 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1988 | dependencies: 1989 | is-fullwidth-code-point "^2.0.0" 1990 | strip-ansi "^4.0.0" 1991 | 1992 | string-width@^3.0.0: 1993 | version "3.1.0" 1994 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1995 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1996 | dependencies: 1997 | emoji-regex "^7.0.1" 1998 | is-fullwidth-code-point "^2.0.0" 1999 | strip-ansi "^5.1.0" 2000 | 2001 | stringify-object@^3.2.2: 2002 | version "3.3.0" 2003 | resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" 2004 | integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== 2005 | dependencies: 2006 | get-own-enumerable-property-symbols "^3.0.0" 2007 | is-obj "^1.0.1" 2008 | is-regexp "^1.0.0" 2009 | 2010 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2011 | version "3.0.1" 2012 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2013 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2014 | dependencies: 2015 | ansi-regex "^2.0.0" 2016 | 2017 | strip-ansi@^4.0.0: 2018 | version "4.0.0" 2019 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2020 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2021 | dependencies: 2022 | ansi-regex "^3.0.0" 2023 | 2024 | strip-ansi@^5.1.0: 2025 | version "5.2.0" 2026 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2027 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2028 | dependencies: 2029 | ansi-regex "^4.1.0" 2030 | 2031 | strip-eof@^1.0.0: 2032 | version "1.0.0" 2033 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2034 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 2035 | 2036 | strip-json-comments@^2.0.1: 2037 | version "2.0.1" 2038 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2039 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2040 | 2041 | supports-color@^2.0.0: 2042 | version "2.0.0" 2043 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2044 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 2045 | 2046 | supports-color@^5.3.0: 2047 | version "5.5.0" 2048 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2049 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2050 | dependencies: 2051 | has-flag "^3.0.0" 2052 | 2053 | symbol-observable@^1.1.0: 2054 | version "1.2.0" 2055 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 2056 | integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== 2057 | 2058 | synchronous-promise@^2.0.6: 2059 | version "2.0.7" 2060 | resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3" 2061 | integrity sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A== 2062 | 2063 | table@^5.2.3: 2064 | version "5.2.3" 2065 | resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" 2066 | integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== 2067 | dependencies: 2068 | ajv "^6.9.1" 2069 | lodash "^4.17.11" 2070 | slice-ansi "^2.1.0" 2071 | string-width "^3.0.0" 2072 | 2073 | text-table@^0.2.0: 2074 | version "0.2.0" 2075 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2076 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2077 | 2078 | through@^2.3.6: 2079 | version "2.3.8" 2080 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2081 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2082 | 2083 | tmp@^0.0.33: 2084 | version "0.0.33" 2085 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2086 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 2087 | dependencies: 2088 | os-tmpdir "~1.0.2" 2089 | 2090 | to-object-path@^0.3.0: 2091 | version "0.3.0" 2092 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2093 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 2094 | dependencies: 2095 | kind-of "^3.0.2" 2096 | 2097 | to-regex-range@^2.1.0: 2098 | version "2.1.1" 2099 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2100 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 2101 | dependencies: 2102 | is-number "^3.0.0" 2103 | repeat-string "^1.6.1" 2104 | 2105 | to-regex@^3.0.1, to-regex@^3.0.2: 2106 | version "3.0.2" 2107 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 2108 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 2109 | dependencies: 2110 | define-property "^2.0.2" 2111 | extend-shallow "^3.0.2" 2112 | regex-not "^1.0.2" 2113 | safe-regex "^1.1.0" 2114 | 2115 | toposort@^2.0.2: 2116 | version "2.0.2" 2117 | resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" 2118 | integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= 2119 | 2120 | tslib@^1.9.0: 2121 | version "1.9.3" 2122 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 2123 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 2124 | 2125 | type-check@~0.3.2: 2126 | version "0.3.2" 2127 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2128 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2129 | dependencies: 2130 | prelude-ls "~1.1.2" 2131 | 2132 | type-fest@^0.4.1: 2133 | version "0.4.1" 2134 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" 2135 | integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== 2136 | 2137 | union-value@^1.0.0: 2138 | version "1.0.0" 2139 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 2140 | integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= 2141 | dependencies: 2142 | arr-union "^3.1.0" 2143 | get-value "^2.0.6" 2144 | is-extendable "^0.1.1" 2145 | set-value "^0.4.3" 2146 | 2147 | unset-value@^1.0.0: 2148 | version "1.0.0" 2149 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2150 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 2151 | dependencies: 2152 | has-value "^0.3.1" 2153 | isobject "^3.0.0" 2154 | 2155 | uri-js@^4.2.2: 2156 | version "4.2.2" 2157 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 2158 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 2159 | dependencies: 2160 | punycode "^2.1.0" 2161 | 2162 | urix@^0.1.0: 2163 | version "0.1.0" 2164 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2165 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 2166 | 2167 | use@^3.1.0: 2168 | version "3.1.1" 2169 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 2170 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 2171 | 2172 | validate-npm-package-license@^3.0.1: 2173 | version "3.0.4" 2174 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2175 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2176 | dependencies: 2177 | spdx-correct "^3.0.0" 2178 | spdx-expression-parse "^3.0.0" 2179 | 2180 | which@^1.2.10, which@^1.2.9: 2181 | version "1.3.1" 2182 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2183 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2184 | dependencies: 2185 | isexe "^2.0.0" 2186 | 2187 | wordwrap@~1.0.0: 2188 | version "1.0.0" 2189 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2190 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 2191 | 2192 | wrap-ansi@^3.0.1: 2193 | version "3.0.1" 2194 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" 2195 | integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= 2196 | dependencies: 2197 | string-width "^2.1.1" 2198 | strip-ansi "^4.0.0" 2199 | 2200 | wrappy@1: 2201 | version "1.0.2" 2202 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2203 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2204 | 2205 | write@1.0.3: 2206 | version "1.0.3" 2207 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 2208 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 2209 | dependencies: 2210 | mkdirp "^0.5.1" 2211 | 2212 | yup@^0.27.0: 2213 | version "0.27.0" 2214 | resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" 2215 | integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== 2216 | dependencies: 2217 | "@babel/runtime" "^7.0.0" 2218 | fn-name "~2.0.1" 2219 | lodash "^4.17.11" 2220 | property-expr "^1.5.0" 2221 | synchronous-promise "^2.0.6" 2222 | toposort "^2.0.2" 2223 | --------------------------------------------------------------------------------