├── .github └── workflows │ └── release.yml ├── .gitignore ├── .prettierignore ├── LICENSE ├── README.md ├── cli.js ├── package.json ├── packages ├── client │ ├── .gitignore │ ├── .npmignore │ ├── .storybook │ │ ├── main.js │ │ └── preview.js │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ ├── src │ │ ├── App.css │ │ ├── App.js │ │ ├── colors.js │ │ ├── components │ │ │ ├── Dots │ │ │ │ └── index.js │ │ │ ├── File │ │ │ │ ├── code-example.js │ │ │ │ ├── index.js │ │ │ │ ├── index.stories.js │ │ │ │ └── long-code.js │ │ │ └── FileDeck │ │ │ │ ├── bug-instant-scroll-to-bottom.stories.js │ │ │ │ ├── index.js │ │ │ │ └── index.stories.js │ │ └── index.js │ └── yarn.lock └── server │ ├── app.js │ ├── package.json │ ├── tests │ └── test-output.txt │ └── yarn.lock ├── releaserc.js └── yarn.lock /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | branches: 5 | - master 6 | - "releasetest/**" 7 | jobs: 8 | release: 9 | if: "!contains(github.event.head_commit.message, 'skip ci')" 10 | name: Release 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v1 15 | - name: Setup Node.js 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: 12 19 | - name: Install dependencies 20 | run: npm install 21 | - name: Test Code 22 | run: npm run test 23 | - name: Build 24 | run: npm run build 25 | - name: Release 26 | env: 27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 29 | run: npx semantic-release 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | packages/client/build 2 | releaserc.js 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Severin Ibarluzea 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 | # twitch-git-diff-monitor 2 | 3 | Let twitch viewers see the last lines of code you changed. Made on [seveibar's twitch stream](https://twitch.tv/seveibar) 4 | 5 | ![](https://user-images.githubusercontent.com/1910070/96106915-c1494b00-0ea9-11eb-9313-1503b96dfa65.gif) 6 | ![](https://user-images.githubusercontent.com/1910070/96177627-262d9100-0efc-11eb-94e7-456d3c0066c9.gif) 7 | 8 | ## Features 9 | 10 | - Helps people understand what you've changed since your last commit 11 | - Runs "git diff" to find changed files in your git repository 12 | - Displays changes by cycling through your files as a widget 13 | - Easy to install & run, Integrates into OBS easily 14 | 15 | ## Installation 16 | 17 | ```bash 18 | npm install -g twitch-git-diff-monitor 19 | 20 | # In your project directory, run twitch-git-diff-monitor 21 | 22 | $ twitch-git-diff-monitor 23 | Running twitch-git-diff-monitor on port 4555 24 | 25 | In OBS, add a browser window to http://localhost:4555 26 | ``` 27 | 28 | ![](https://user-images.githubusercontent.com/1910070/96245819-c378db80-0f75-11eb-9a10-5eb22a797679.png) 29 | 30 | ## Options 31 | 32 | In OBS, you can supply query parameters to change stuff. 33 | 34 | e.g. `http://localhost:4555?file_show_time=30` will make files show for 30 seconds 35 | 36 | ## Open in a windowless Chrome 37 | 38 | If you want to run it in a chrome window without tabs instead of in OBS, use `google-chrome --app=http://address.com` 39 | 40 | # Users! 41 | 42 | Do you use this? Edit this README and submit a PR to add your stream! 43 | 44 | - [seveibar](https://twitch.tv/seveibar) 45 | 46 | # Contributing 47 | 48 | You can run the twitch-git-diff-monitor for itself, by running `yarn start` in the root directory. 49 | -------------------------------------------------------------------------------- /cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const micro = require("micro") 4 | // const { yargs } = require("yargs") 5 | const serverFunc = require("./packages/server/app.js") 6 | const serveHandler = require("serve-handler") 7 | const path = require("path") 8 | 9 | const service = micro(async (req, res) => { 10 | if (req.url.startsWith("/api")) { 11 | serverFunc(req, res) 12 | } else { 13 | return serveHandler(req, res, { 14 | public: path.resolve(__dirname, "./packages/client/build"), 15 | }) 16 | } 17 | }) 18 | 19 | console.log( 20 | "Running twitch-git-diff-monitor on port 4555\n\nIn OBS, add a browser window to http://localhost:4555" 21 | ) 22 | service.listen(4555) 23 | 24 | console.log( 25 | 'You can also run it as a chrome app using "google-chrome --app=http://localhost:4555"' 26 | ) 27 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twitch-git-diff-monitor", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "seveibar ", 6 | "license": "MIT", 7 | "bin": { 8 | "twitch-git-diff-monitor": "./cli.js" 9 | }, 10 | "scripts": { 11 | "start": "concurrently 'cd packages/client && yarn start' 'micro-dev --port 3001 packages/server/app.js'", 12 | "storybook": "cd packages/client && yarn storybook", 13 | "test": "prettier -c .", 14 | "build": "cd packages/client && yarn install && yarn build", 15 | "postinstall": "cd packages/server && yarn install && cd ../client && yarn install" 16 | }, 17 | "dependencies": { 18 | "concurrently": "^5.3.0", 19 | "lodash": "^4.17.20", 20 | "micro": "^9.3.4", 21 | "micro-dev": "^3.0.0", 22 | "parse-diff": "^0.7.1", 23 | "prompt-confirm": "^2.0.4", 24 | "serve-handler": "^6.1.3", 25 | "yargs": "^16.0.3" 26 | }, 27 | "devDependencies": { 28 | "@semantic-release/git": "^9.0.0", 29 | "prettier": "^2.1.2" 30 | }, 31 | "prettier": { 32 | "semi": false 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /packages/client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /packages/client/.npmignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /packages/client/.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | stories: ["../src/**/*.stories.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], 3 | addons: [ 4 | "@storybook/addon-links", 5 | "@storybook/addon-essentials", 6 | "@storybook/preset-create-react-app", 7 | ], 8 | } 9 | -------------------------------------------------------------------------------- /packages/client/.storybook/preview.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { styled } from "@material-ui/core" 3 | import "highlightjs/dracula.css" 4 | import "dracula-prism/css/dracula-prism.css" 5 | import "../src/App.css" 6 | 7 | export const parameters = { 8 | actions: { argTypesRegex: "^on[A-Z].*" }, 9 | } 10 | 11 | const Container = styled("div")({}) 12 | 13 | export const decorators = [ 14 | (Story) => ( 15 | 16 | 17 | 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /packages/client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.1.0", 4 | "proxy": "http://localhost:3001", 5 | "dependencies": { 6 | "@material-ui/core": "^4.11.0", 7 | "@testing-library/jest-dom": "^4.2.4", 8 | "@testing-library/react": "^9.3.2", 9 | "@testing-library/user-event": "^7.1.2", 10 | "classnames": "^2.2.6", 11 | "dracula-prism": "^1.2.1", 12 | "highlightjs": "github:dracula/highlightjs", 13 | "prismjs": "^1.22.0", 14 | "react": "^16.14.0", 15 | "react-diff-viewer": "^3.1.1", 16 | "react-dom": "^16.14.0", 17 | "react-measure": "^2.5.2", 18 | "react-scripts": "3.4.3", 19 | "use-event-callback": "^0.1.0" 20 | }, 21 | "scripts": { 22 | "start": "react-scripts start", 23 | "build": "CI=false react-scripts build", 24 | "test": "react-scripts test", 25 | "storybook": "start-storybook -p 6006 -s public", 26 | "build-storybook": "build-storybook -s public" 27 | }, 28 | "eslintConfig": { 29 | "extends": "react-app" 30 | }, 31 | "browserslist": { 32 | "production": [ 33 | ">0.2%", 34 | "not dead", 35 | "not op_mini all" 36 | ], 37 | "development": [ 38 | "last 1 chrome version", 39 | "last 1 firefox version", 40 | "last 1 safari version" 41 | ] 42 | }, 43 | "devDependencies": { 44 | "@babel/core": "^7.12.0", 45 | "@storybook/addon-actions": "^6.0.26", 46 | "@storybook/addon-essentials": "^6.0.26", 47 | "@storybook/addon-links": "^6.0.26", 48 | "@storybook/node-logger": "^6.0.26", 49 | "@storybook/preset-create-react-app": "^3.1.4", 50 | "@storybook/react": "^6.0.26", 51 | "babel-loader": "^8.1.0", 52 | "react-is": "^16.13.1" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /packages/client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seveibar/twitch-git-diff-monitor/ceacd8e726d5151733e9b7243bf995877b3e796b/packages/client/public/favicon.ico -------------------------------------------------------------------------------- /packages/client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | Twitch Git Diff Monitor 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /packages/client/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seveibar/twitch-git-diff-monitor/ceacd8e726d5151733e9b7243bf995877b3e796b/packages/client/public/logo192.png -------------------------------------------------------------------------------- /packages/client/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/seveibar/twitch-git-diff-monitor/ceacd8e726d5151733e9b7243bf995877b3e796b/packages/client/public/logo512.png -------------------------------------------------------------------------------- /packages/client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /packages/client/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/client/src/App.css: -------------------------------------------------------------------------------- 1 | @import url("https://rsms.me/inter/inter.css"); 2 | html, 3 | body { 4 | font-family: "Inter", sans-serif; 5 | margin: 0; 6 | padding: 0; 7 | overflow: hidden; 8 | } 9 | @supports (font-variation-settings: normal) { 10 | html { 11 | font-family: "Inter var", sans-serif; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/client/src/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react" 2 | import { styled } from "@material-ui/core" 3 | import "./App.css" 4 | import "highlightjs/dracula.css" 5 | import "dracula-prism/css/dracula-prism.css" 6 | 7 | import FileDeck from "./components/FileDeck" 8 | 9 | const Container = styled("div")({ 10 | overflow: "hidden", 11 | }) 12 | 13 | const App = () => { 14 | const [files, setFiles] = useState(null) 15 | useEffect(() => { 16 | async function loadDiffs() { 17 | const res = await fetch("/api").then((r) => r.json()) 18 | setFiles(res) 19 | 20 | setTimeout(() => { 21 | loadDiffs() 22 | }, 10000) 23 | } 24 | loadDiffs() 25 | }, []) 26 | 27 | if (!files) return 28 | 29 | return ( 30 | 31 | 32 | 33 | ) 34 | } 35 | 36 | export default App 37 | -------------------------------------------------------------------------------- /packages/client/src/colors.js: -------------------------------------------------------------------------------- 1 | export default { 2 | Background: "#282a36", 3 | "Current Line": "#44475a", 4 | Selection: "#44475a", 5 | Foreground: "#f8f8f2", 6 | Comment: "#6272a4", 7 | Cyan: "#8be9fd", 8 | Green: "#50fa7b", 9 | Orange: "#ffb86c", 10 | Pink: "#ff79c6", 11 | Purple: "#bd93f9", 12 | Red: "#ff5555", 13 | Yellow: "#f1fa8c", 14 | } 15 | -------------------------------------------------------------------------------- /packages/client/src/components/Dots/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { styled } from "@material-ui/core" 3 | import range from "lodash/range" 4 | import colors from "../../colors" 5 | 6 | const Container = styled("div")({ 7 | position: "absolute", 8 | display: "flex", 9 | left: 320, 10 | top: -24, 11 | fontWeight: 900, 12 | textShadow: "0px 0px 4px rgba(0,0,0,1)", 13 | color: colors["Foreground"], 14 | marginLeft: "-50%", 15 | "& span": { 16 | fontSize: 16, 17 | }, 18 | }) 19 | 20 | export const Dots = ({ fileIndex, totalFiles }) => { 21 | return ( 22 | 23 | {range(totalFiles).map((ind) => ( 24 | {ind === fileIndex ? "●" : "○"} 25 | ))} 26 | 27 | ) 28 | } 29 | 30 | export default Dots 31 | -------------------------------------------------------------------------------- /packages/client/src/components/File/code-example.js: -------------------------------------------------------------------------------- 1 | export const oldCode = ` 2 | const a = 10 3 | const b = 10 4 | const c = () => console.log('foo') 5 | 6 | if(a > 10) { 7 | console.log('bar') 8 | } 9 | 10 | console.log('done') 11 | ` 12 | 13 | export const newCode = ` 14 | const a = 10 15 | const boo = 10 16 | 17 | if(a === 10) { 18 | console.log('bar') 19 | } 20 | ` 21 | 22 | export default `const hashChunk = (chunk) => { 23 | return \`\${chunk.filePath},\${chunk.lineStart},\${chunk.numberLines}\` 24 | } 25 | 26 | const findAnyChangedChunks = (lastChunks, newChunks) => { 27 | const hashesOfLastChunks = new Set() 28 | 29 | for (const chunk of lastChunks) { 30 | hashesOfLastChunks.add(hashChunk(chunk)) 31 | } 32 | 33 | for (const chunk of newChunks) { 34 | if (!hashesOfLastChunks.has(hashChunk(chunk))) { 35 | return chunk 36 | } 37 | } 38 | 39 | return null 40 | } 41 | ` 42 | -------------------------------------------------------------------------------- /packages/client/src/components/File/index.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from "react" 2 | import { styled } from "@material-ui/core" 3 | import colors from "../../colors" 4 | import DiffViewer from "react-diff-viewer" 5 | import Prism from "prismjs" 6 | import Measure from "react-measure" 7 | 8 | const Container = styled("div")({ 9 | color: colors.Foreground, 10 | backgroundColor: colors["Background"], 11 | boxShadow: "0px 2px 32px rgba(0,0,0,1)", 12 | width: 360, 13 | height: 360, 14 | borderRadius: 4, 15 | overflow: "hidden", 16 | padding: 16, 17 | "& .title": { 18 | fontWeight: 600, 19 | marginBottom: 16, 20 | transition: "opacity 500ms", 21 | }, 22 | "& .changesText": { 23 | marginLeft: 8, 24 | opacity: 0.5, 25 | }, 26 | }) 27 | 28 | const Mover = styled("div")({}) 29 | 30 | const highlightSyntax = (str) => ( 31 |
 37 | )
 38 | 
 39 | export const File = ({
 40 |   visible,
 41 |   filePath,
 42 |   numberOfChanges,
 43 |   oldCode,
 44 |   newCode,
 45 |   isOnlyFile,
 46 |   animTime = 20000,
 47 | }) => {
 48 |   const startMovingAfter = 5000
 49 |   const animationDuration = animTime - 10000
 50 | 
 51 |   const [isAnimating, setIsAnimating] = useState(false)
 52 | 
 53 |   const [diffViewerDims, setDiffViewerDims] = useState()
 54 | 
 55 |   useEffect(() => {
 56 |     if (!visible) return
 57 |     let startMovingAfterTimeout, animEndTimeout
 58 |     function createTimeouts() {
 59 |       startMovingAfterTimeout = setTimeout(() => {
 60 |         setIsAnimating(true)
 61 |       }, startMovingAfter)
 62 |       animEndTimeout = setTimeout(() => {
 63 |         setIsAnimating(false)
 64 |         createTimeouts()
 65 |       }, animTime)
 66 |     }
 67 | 
 68 |     createTimeouts()
 69 | 
 70 |     return () => {
 71 |       clearTimeout(startMovingAfterTimeout)
 72 |       clearTimeout(animEndTimeout)
 73 |     }
 74 |     // eslint-disable-next-line
 75 |   }, [visible])
 76 | 
 77 |   return (
 78 |     
 79 |       
86 | {filePath} 87 | (±{numberOfChanges}) 88 |
89 | 103 | { 106 | setDiffViewerDims(contentRect.bounds) 107 | }} 108 | > 109 | {({ measureRef }) => ( 110 |
111 | ""} 119 | renderContent={highlightSyntax} 120 | styles={{ 121 | codeFold: { 122 | height: 5, 123 | }, 124 | }} 125 | /> 126 |
127 | )} 128 |
129 |
130 |
131 | ) 132 | } 133 | 134 | export default File 135 | -------------------------------------------------------------------------------- /packages/client/src/components/File/index.stories.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import File from "./" 3 | import { oldCode, newCode } from "./code-example.js" 4 | import longStringOfCode from "./long-code" 5 | 6 | export default { 7 | title: "File", 8 | component: File, 9 | } 10 | 11 | export const Primary = () => { 12 | return ( 13 | 19 | ) 20 | } 21 | 22 | export const HasExpandingStuff = () => { 23 | const props = { 24 | filePath: "packages/client/package.json", 25 | numberOfChanges: 1, 26 | oldCode: 27 | '{\n "name": "client",\n "version": "0.1.0",\n "proxy": "http://localhost:3001",\n "dependencies": {\n "@material-ui/core": "^4.11.0",\n "@testing-library/jest-dom": "^4.2.4",\n "@testing-library/react": "^9.3.2",\n "@testing-library/user-event": "^7.1.2",\n "classnames": "^2.2.6",\n "dracula-prism": "^1.2.1",\n "highlightjs": "github:dracula/highlightjs",\n "prismjs": "^1.22.0",\n "react": "^16.14.0",\n "react-diff-viewer": "^3.1.1",\n "react-dom": "^16.14.0",\n "react-highlight.js": "^1.0.7",\n "react-scripts": "3.4.3",\n "use-event-callback": "^0.1.0"\n },\n "scripts": {\n "start": "react-scripts start",\n "build": "react-scripts build",\n "test": "react-scripts test",\n "eject": "react-scripts eject",\n "storybook": "start-storybook -p 6006 -s public",\n "build-storybook": "build-storybook -s public"\n },\n "eslintConfig": {\n "extends": "react-app"\n },\n "browserslist": {\n "production": [\n ">0.2%",\n "not dead",\n "not op_mini all"\n ],\n "development": [\n "last 1 chrome version",\n "last 1 firefox version",\n "last 1 safari version"\n ]\n },\n "devDependencies": {\n "@babel/core": "^7.12.0",\n "@storybook/addon-actions": "^6.0.26",\n "@storybook/addon-essentials": "^6.0.26",\n "@storybook/addon-links": "^6.0.26",\n "@storybook/node-logger": "^6.0.26",\n "@storybook/preset-create-react-app": "^3.1.4",\n "@storybook/react": "^6.0.26",\n "babel-loader": "^8.1.0",\n "react-is": "^16.13.1"\n }\n}\n', 28 | newCode: 29 | '{\n "name": "client",\n "version": "0.1.0",\n "proxy": "http://localhost:3001",\n "dependencies": {\n "@material-ui/core": "^4.11.0",\n "@testing-library/jest-dom": "^4.2.4",\n "@testing-library/react": "^9.3.2",\n "@testing-library/user-event": "^7.1.2",\n "classnames": "^2.2.6",\n "dracula-prism": "^1.2.1",\n "highlightjs": "github:dracula/highlightjs",\n "prismjs": "^1.22.0",\n "react": "^16.14.0",\n "react-diff-viewer": "^3.1.1",\n "react-dom": "^16.14.0",\n "react-highlight.js": "^1.0.7",\n "react-measure": "^2.5.2",\n "react-scripts": "3.4.3",\n "use-event-callback": "^0.1.0"\n },\n "scripts": {\n "start": "react-scripts start",\n "build": "react-scripts build",\n "test": "react-scripts test",\n "eject": "react-scripts eject",\n "storybook": "start-storybook -p 6006 -s public",\n "build-storybook": "build-storybook -s public"\n },\n "eslintConfig": {\n "extends": "react-app"\n },\n "browserslist": {\n "production": [\n ">0.2%",\n "not dead",\n "not op_mini all"\n ],\n "development": [\n "last 1 chrome version",\n "last 1 firefox version",\n "last 1 safari version"\n ]\n },\n "devDependencies": {\n "@babel/core": "^7.12.0",\n "@storybook/addon-actions": "^6.0.26",\n "@storybook/addon-essentials": "^6.0.26",\n "@storybook/addon-links": "^6.0.26",\n "@storybook/node-logger": "^6.0.26",\n "@storybook/preset-create-react-app": "^3.1.4",\n "@storybook/react": "^6.0.26",\n "babel-loader": "^8.1.0",\n "react-is": "^16.13.1"\n }\n}\n', 30 | } 31 | 32 | return 33 | } 34 | 35 | export const LongFile = () => { 36 | const props = { 37 | filePath: "packages/client/package.json", 38 | numberOfChanges: 100, 39 | oldCode: "", 40 | newCode: longStringOfCode, 41 | } 42 | 43 | return 44 | } 45 | -------------------------------------------------------------------------------- /packages/client/src/components/File/long-code.js: -------------------------------------------------------------------------------- 1 | export const longStringOfCode = `import React, { useEffect, useState } from "react" 2 | import { styled } from "@material-ui/core" 3 | import * as colors from "@material-ui/core/colors" 4 | import "./App.css" 5 | import "highlightjs/dracula.css" 6 | import "dracula-prism/css/dracula-prism.css" 7 | 8 | import FileDeck from "./components/FileDeck" 9 | 10 | const Container = styled("div")({ 11 | overflow: "hidden", 12 | }) 13 | const Change = styled("div")(({ op }) => ({ 14 | color: "#fff", 15 | ...(op === "add" 16 | ? { 17 | backgroundColor: colors.green[500], 18 | } 19 | : op === "del" 20 | ? { 21 | backgroundColor: colors.red[600], 22 | } 23 | : { 24 | color: colors.grey[200], 25 | backgroundColor: colors.grey[500], 26 | }), 27 | })) 28 | 29 | const App = () => { 30 | const [files, setFiles] = useState(null) 31 | useEffect(() => { 32 | async function loadDiffs() { 33 | const res = await fetch("/api").then((r) => r.json()) 34 | setFiles(res) 35 | 36 | setTimeout(() => { 37 | loadDiffs() 38 | }, 2000) 39 | } 40 | loadDiffs() 41 | }, []) 42 | 43 | if (!files) return 44 | 45 | return ( 46 | 47 | 48 | 49 | ) 50 | } 51 | 52 | export default App 53 | `.trim() 54 | 55 | export default longStringOfCode 56 | -------------------------------------------------------------------------------- /packages/client/src/components/FileDeck/bug-instant-scroll-to-bottom.stories.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import FileDeck from "./" 3 | 4 | const jsonResponse = [ 5 | { 6 | filePath: "src/components/Wave/index.js", 7 | numberOfChanges: 40, 8 | oldCode: 9 | 'import React from "react"\nimport range from "lodash/range"\nimport { styled } from "@material-ui/core/styles"\nimport colorAlpha from "color-alpha"\nimport useColors from "../../hooks/use-colors"\n\nconst Container = styled("div")({})\n\nconst mins = 1000 * 60\nconst hours = 60 * mins\nconst days = 24 * hours\nconst weeks = 7 * days\nconst months = 30 * days\nconst years = 12 * months\nconsole.log({\n mins,\n hours,\n days,\n weeks,\n months,\n years,\n})\nconst timeIntervals = [100, 1000, mins, hours, days, weeks, months, years]\n\nconst findReasonableGridDuration = (duration) => {\n let bestFittingIntervalIndex = 0\n let bestFittingIntervalScore = -Infinity\n for (const [i, timeInterval] of Object.entries(timeIntervals)) {\n const timeIntervalScore = -1 * Math.abs(duration / timeInterval - 20)\n if (timeIntervalScore > bestFittingIntervalScore) {\n bestFittingIntervalIndex = i\n bestFittingIntervalScore = timeIntervalScore\n }\n }\n return timeIntervals[bestFittingIntervalIndex]\n}\n\nexport const Wave = ({\n curves,\n width,\n height,\n transformMatrix,\n durationGroups = [],\n timestamps = [],\n}) => {\n const colors = useColors()\n\n const { x: startTimeOnGraph } = transformMatrix.inverse().applyToPoint(0, 0)\n const { x: endTimeOnGraph } = transformMatrix.inverse().applyToPoint(500, 0)\n\n const gridDuration = findReasonableGridDuration(\n endTimeOnGraph - startTimeOnGraph\n )\n const numberOfGridLines = Math.ceil(\n (endTimeOnGraph - startTimeOnGraph) / gridDuration\n )\n\n return (\n \n \n {range(numberOfGridLines + 1).map((i) => {\n const { x: lineX } = transformMatrix.applyToPoint(\n Math.floor(startTimeOnGraph / gridDuration) * gridDuration +\n gridDuration * i,\n 0\n )\n\n return (\n \n )\n })}\n {durationGroups.flatMap(({ durations, color }) => {\n return durations.map((duration) => {\n const { x: startX } = transformMatrix.applyToPoint(\n duration.start,\n 0\n )\n const { x: endX } = transformMatrix.applyToPoint(duration.end, 0)\n return (\n \n )\n })\n })}\n {curves.map((curve, i) => (\n {\n const p = transformMatrix.applyToPoint(t, y)\n return `${p.x},${p.y}`\n })\n .join(" ")}\n />\n ))}\n {timestamps.map((ts, i) => {\n const { x } = transformMatrix.applyToPoint(ts.time, 0)\n return (\n \n )\n })}\n \n \n )\n}\n\nexport default Wave\n', 10 | newCode: 11 | 'import React from "react"\nimport range from "lodash/range"\nimport { styled } from "@material-ui/core/styles"\nimport colorAlpha from "color-alpha"\nimport useColors from "../../hooks/use-colors"\n\nconst Container = styled("div")({})\n\nconst mins = 1000 * 60\nconst hours = 60 * mins\nconst days = 24 * hours\nconst weeks = 7 * days\nconst months = 30 * days\nconst years = 12 * months\nconsole.log({\n mins,\n hours,\n days,\n weeks,\n months,\n years,\n})\nconst timeIntervals = [1, 100, 1000, mins, hours, days, weeks, months, years]\n\nconst findReasonableGridDuration = (duration) => {\n let bestFittingIntervalIndex = 0\n let bestFittingIntervalScore = -Infinity\n for (const [i, timeInterval] of Object.entries(timeIntervals)) {\n const timeIntervalScore = -1 * Math.abs(duration / timeInterval - 20)\n if (timeIntervalScore > bestFittingIntervalScore) {\n bestFittingIntervalIndex = i\n bestFittingIntervalScore = timeIntervalScore\n }\n }\n return [\n timeIntervals[bestFittingIntervalIndex],\n timeIntervals[bestFittingIntervalIndex - 1],\n ]\n}\n\nexport const Wave = ({\n curves,\n width,\n height,\n transformMatrix,\n durationGroups = [],\n timestamps = [],\n}) => {\n const colors = useColors()\n\n const { x: startTimeOnGraph } = transformMatrix.inverse().applyToPoint(0, 0)\n const { x: endTimeOnGraph } = transformMatrix.inverse().applyToPoint(500, 0)\n\n const [majorDuration, minorDuration] = findReasonableGridDuration(\n endTimeOnGraph - startTimeOnGraph\n )\n const numberOfMajorGridLines = Math.ceil(\n (endTimeOnGraph - startTimeOnGraph) / majorDuration\n )\n const numberOfMinorGridLines = Math.ceil(\n (endTimeOnGraph - startTimeOnGraph) / minorDuration\n )\n\n return (\n \n \n {range(numberOfMajorGridLines + 1).map((i) => {\n const { x: lineX } = transformMatrix.applyToPoint(\n Math.floor(startTimeOnGraph / majorDuration) * majorDuration +\n majorDuration * i,\n 0\n )\n\n return (\n \n )\n })}\n {range(numberOfMinorGridLines).map((i) => {\n const { x: lineX } = transformMatrix.applyToPoint(\n Math.floor(startTimeOnGraph / majorDuration) * minorDuration +\n minorDuration * i,\n 0\n )\n\n return (\n \n )\n })}\n {durationGroups.flatMap(({ durations, color }) => {\n return durations.map((duration) => {\n const { x: startX } = transformMatrix.applyToPoint(\n duration.start,\n 0\n )\n const { x: endX } = transformMatrix.applyToPoint(duration.end, 0)\n return (\n \n )\n })\n })}\n {curves.map((curve, i) => (\n {\n const p = transformMatrix.applyToPoint(t, y)\n return `${p.x},${p.y}`\n })\n .join(" ")}\n />\n ))}\n {timestamps.map((ts, i) => {\n const { x } = transformMatrix.applyToPoint(ts.time, 0)\n return (\n \n )\n })}\n \n \n )\n}\n\nexport default Wave\n', 12 | }, 13 | ] 14 | 15 | export default { 16 | title: "FileDeck_BugInstantScroll", 17 | component: FileDeck, 18 | } 19 | 20 | export const Primary = () => { 21 | return 22 | } 23 | -------------------------------------------------------------------------------- /packages/client/src/components/FileDeck/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useReducer } from "react" 2 | import File from "../File" 3 | import { styled } from "@material-ui/core" 4 | import classnames from "classnames" 5 | import Dots from "../Dots" 6 | import qs from "qs" 7 | 8 | const Container = styled("div")({ 9 | margin: 128, 10 | marginTop: 64, 11 | position: "relative", 12 | width: 640, 13 | height: 640, 14 | }) 15 | 16 | const FileContainer = styled("div")({ 17 | position: "absolute", 18 | left: 0, 19 | top: 0, 20 | transition: "opacity 300ms, transform 300ms", 21 | opacity: 0, 22 | "&.entering": { 23 | opacity: 0, 24 | transform: "rotate(-8deg) translate(-200px, 20px)", 25 | }, 26 | "&.visible": { 27 | opacity: 1, 28 | transform: "translate(0px, 0px)", 29 | }, 30 | "&.exiting": { 31 | opacity: 0, 32 | transform: "rotate(8deg) translate(200px, 20px)", 33 | }, 34 | }) 35 | 36 | let minTimePerFile = 15000 37 | const getParams = qs.parse(window.location.search.substr(1)) 38 | if (getParams.file_show_time) { 39 | minTimePerFile = parseInt(getParams.file_show_time) * 1000 || 15000 40 | } 41 | 42 | export const FileDeck = ({ files }) => { 43 | const [visibleFileIndex, incVisibleFile] = useReducer( 44 | (idx) => (idx + 1) % files.length, 45 | 0 46 | ) 47 | 48 | const timeToSpendOnTheVisibleFile = 49 | files && files[visibleFileIndex] 50 | ? minTimePerFile + files[visibleFileIndex].numberOfChanges * 400 51 | : 10000 52 | 53 | console.log({ timeToSpendOnTheVisibleFile }) 54 | 55 | useEffect(() => { 56 | let interval = setTimeout(() => { 57 | incVisibleFile() 58 | }, timeToSpendOnTheVisibleFile) 59 | return () => { 60 | clearTimeout(interval) 61 | } 62 | // eslint-disable-next-line 63 | }, [visibleFileIndex]) 64 | 65 | return ( 66 | 67 | {files.map((file, i) => ( 68 | 76 | 82 | 83 | ))} 84 | 85 | 86 | ) 87 | } 88 | 89 | export default FileDeck 90 | -------------------------------------------------------------------------------- /packages/client/src/components/FileDeck/index.stories.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import FileDeck from "./" 3 | import { oldCode, newCode } from "../File/code-example" 4 | import colors from "../../colors" 5 | import longStringOfCode from "../File/long-code" 6 | import range from "lodash/range" 7 | 8 | export default { 9 | title: "FileDeck", 10 | component: FileDeck, 11 | } 12 | 13 | export const Primary = () => { 14 | return ( 15 | 21 | ) 22 | } 23 | 24 | export const DarkBg = () => { 25 | return ( 26 |
34 | 45 |
46 | ) 47 | } 48 | 49 | export const ShortAndLongFile = () => { 50 | const longLongCode = range(10) 51 | .map(() => longStringOfCode) 52 | .join("\n") 53 | return ( 54 | 65 | ) 66 | } 67 | -------------------------------------------------------------------------------- /packages/client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import ReactDOM from "react-dom" 3 | import App from "./App" 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById("root") 10 | ) 11 | -------------------------------------------------------------------------------- /packages/server/app.js: -------------------------------------------------------------------------------- 1 | const { send, json } = require("micro") 2 | const range = require("lodash/range") 3 | const execSync = require("child_process").execSync 4 | const fs = require("fs") 5 | var parse = require("parse-diff") 6 | const path = require("path") 7 | 8 | const repoPath = process.env.REPO_PATH || process.cwd() 9 | 10 | const ignoreFilesEndingWith = ["yarn.lock", "package-lock.json"] 11 | 12 | module.exports = async (req, res) => { 13 | const gitDiffOutput = execSync(`git diff`, { 14 | cwd: repoPath, 15 | }).toString() 16 | 17 | const fileDiffs = parse(gitDiffOutput) 18 | 19 | const responseArray = [] 20 | 21 | for (const fileDiff of fileDiffs) { 22 | if ( 23 | ignoreFilesEndingWith.some((ending) => 24 | fileDiff.to.toLowerCase().endsWith(ending) 25 | ) 26 | ) { 27 | continue 28 | } 29 | 30 | if (fileDiff.to === "/dev/null") { 31 | // TODO handle files that are deleted 32 | continue 33 | } 34 | 35 | let newCode 36 | try { 37 | newCode = fs.readFileSync(path.join(repoPath, fileDiff.to)).toString() 38 | } catch (e) { 39 | console.log(`Couldn't read file: "${fileDiff.to}"`) 40 | continue 41 | } 42 | 43 | responseArray.push({ 44 | filePath: fileDiff.to, 45 | numberOfChanges: fileDiff.additions + fileDiff.deletions, 46 | oldCode: execSync(`git show "HEAD:${fileDiff.to}"`, { 47 | cwd: repoPath, 48 | }).toString(), 49 | newCode, 50 | }) 51 | } 52 | 53 | return send(res, 200, responseArray) 54 | } 55 | -------------------------------------------------------------------------------- /packages/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "start": "micro-dev -p 3001 app.js" 8 | }, 9 | "dependencies": { 10 | "lodash": "^4.17.20", 11 | "micro": "^9.3.4", 12 | "micro-dev": "^3.0.0", 13 | "parse-diff": "^0.7.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/server/tests/test-output.txt: -------------------------------------------------------------------------------- 1 | const output = `diff --git a/packages/client/src/App.js b/packages/client/src/App.js 2 | index 5a4c559..4f7bf06 100644 3 | --- a/packages/client/src/App.js 4 | +++ b/packages/client/src/App.js 5 | @@ -10,6 +10,8 @@ const App = () => { 6 | loadDiffs() 7 | }, []) 8 | 9 | + // Hi there! 10 | + 11 | return ( 12 |
13 |
{JSON.stringify(response, null, "  ")}
` 14 | -------------------------------------------------------------------------------- /packages/server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-align@^2.0.0: 6 | version "2.0.0" 7 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 8 | integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= 9 | dependencies: 10 | string-width "^2.0.0" 11 | 12 | ansi-regex@^2.0.0: 13 | version "2.1.1" 14 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 15 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 16 | 17 | ansi-regex@^3.0.0: 18 | version "3.0.0" 19 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 20 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 21 | 22 | ansi-styles@^3.2.1: 23 | version "3.2.1" 24 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 25 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 26 | dependencies: 27 | color-convert "^1.9.0" 28 | 29 | anymatch@^2.0.0: 30 | version "2.0.0" 31 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 32 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 33 | dependencies: 34 | micromatch "^3.1.4" 35 | normalize-path "^2.1.1" 36 | 37 | arch@^2.1.0: 38 | version "2.1.2" 39 | resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" 40 | integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== 41 | 42 | arg@4.1.0: 43 | version "4.1.0" 44 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" 45 | integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg== 46 | 47 | arr-diff@^4.0.0: 48 | version "4.0.0" 49 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 50 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 51 | 52 | arr-flatten@^1.1.0: 53 | version "1.1.0" 54 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 55 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 56 | 57 | arr-union@^3.1.0: 58 | version "3.1.0" 59 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 60 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 61 | 62 | array-unique@^0.3.2: 63 | version "0.3.2" 64 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 65 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 66 | 67 | assign-symbols@^1.0.0: 68 | version "1.0.0" 69 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 70 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 71 | 72 | astral-regex@^1.0.0: 73 | version "1.0.0" 74 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 75 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 76 | 77 | async-each@^1.0.0: 78 | version "1.0.3" 79 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" 80 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== 81 | 82 | atob@^2.1.2: 83 | version "2.1.2" 84 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 85 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 86 | 87 | base@^0.11.1: 88 | version "0.11.2" 89 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 90 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 91 | dependencies: 92 | cache-base "^1.0.1" 93 | class-utils "^0.3.5" 94 | component-emitter "^1.2.1" 95 | define-property "^1.0.0" 96 | isobject "^3.0.1" 97 | mixin-deep "^1.2.0" 98 | pascalcase "^0.1.1" 99 | 100 | binary-extensions@^1.0.0: 101 | version "1.13.1" 102 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" 103 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== 104 | 105 | bindings@^1.5.0: 106 | version "1.5.0" 107 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 108 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 109 | dependencies: 110 | file-uri-to-path "1.0.0" 111 | 112 | boolbase@~1.0.0: 113 | version "1.0.0" 114 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 115 | integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= 116 | 117 | boxen@1.3.0: 118 | version "1.3.0" 119 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 120 | integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== 121 | dependencies: 122 | ansi-align "^2.0.0" 123 | camelcase "^4.0.0" 124 | chalk "^2.0.1" 125 | cli-boxes "^1.0.0" 126 | string-width "^2.0.0" 127 | term-size "^1.2.0" 128 | widest-line "^2.0.0" 129 | 130 | braces@^2.3.0, braces@^2.3.1: 131 | version "2.3.2" 132 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 133 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 134 | dependencies: 135 | arr-flatten "^1.1.0" 136 | array-unique "^0.3.2" 137 | extend-shallow "^2.0.1" 138 | fill-range "^4.0.0" 139 | isobject "^3.0.1" 140 | repeat-element "^1.1.2" 141 | snapdragon "^0.8.1" 142 | snapdragon-node "^2.0.1" 143 | split-string "^3.0.2" 144 | to-regex "^3.0.1" 145 | 146 | bytes@3.0.0: 147 | version "3.0.0" 148 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 149 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= 150 | 151 | cache-base@^1.0.1: 152 | version "1.0.1" 153 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 154 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 155 | dependencies: 156 | collection-visit "^1.0.0" 157 | component-emitter "^1.2.1" 158 | get-value "^2.0.6" 159 | has-value "^1.0.0" 160 | isobject "^3.0.1" 161 | set-value "^2.0.0" 162 | to-object-path "^0.3.0" 163 | union-value "^1.0.0" 164 | unset-value "^1.0.0" 165 | 166 | camelcase@^4.0.0, camelcase@^4.1.0: 167 | version "4.1.0" 168 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 169 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 170 | 171 | chalk@2.4.1: 172 | version "2.4.1" 173 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 174 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== 175 | dependencies: 176 | ansi-styles "^3.2.1" 177 | escape-string-regexp "^1.0.5" 178 | supports-color "^5.3.0" 179 | 180 | chalk@^2.0.1, chalk@^2.3.0: 181 | version "2.4.2" 182 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 183 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 184 | dependencies: 185 | ansi-styles "^3.2.1" 186 | escape-string-regexp "^1.0.5" 187 | supports-color "^5.3.0" 188 | 189 | chokidar@2.0.3: 190 | version "2.0.3" 191 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" 192 | integrity sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg== 193 | dependencies: 194 | anymatch "^2.0.0" 195 | async-each "^1.0.0" 196 | braces "^2.3.0" 197 | glob-parent "^3.1.0" 198 | inherits "^2.0.1" 199 | is-binary-path "^1.0.0" 200 | is-glob "^4.0.0" 201 | normalize-path "^2.1.1" 202 | path-is-absolute "^1.0.0" 203 | readdirp "^2.0.0" 204 | upath "^1.0.0" 205 | optionalDependencies: 206 | fsevents "^1.1.2" 207 | 208 | class-utils@^0.3.5: 209 | version "0.3.6" 210 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 211 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 212 | dependencies: 213 | arr-union "^3.1.0" 214 | define-property "^0.2.5" 215 | isobject "^3.0.0" 216 | static-extend "^0.1.1" 217 | 218 | cli-boxes@^1.0.0: 219 | version "1.0.0" 220 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 221 | integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= 222 | 223 | clipboardy@1.2.3: 224 | version "1.2.3" 225 | resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" 226 | integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA== 227 | dependencies: 228 | arch "^2.1.0" 229 | execa "^0.8.0" 230 | 231 | cliui@^4.0.0: 232 | version "4.1.0" 233 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 234 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 235 | dependencies: 236 | string-width "^2.1.1" 237 | strip-ansi "^4.0.0" 238 | wrap-ansi "^2.0.0" 239 | 240 | code-point-at@^1.0.0: 241 | version "1.1.0" 242 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 243 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 244 | 245 | collection-visit@^1.0.0: 246 | version "1.0.0" 247 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 248 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 249 | dependencies: 250 | map-visit "^1.0.0" 251 | object-visit "^1.0.0" 252 | 253 | color-convert@^1.9.0: 254 | version "1.9.3" 255 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 256 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 257 | dependencies: 258 | color-name "1.1.3" 259 | 260 | color-name@1.1.3: 261 | version "1.1.3" 262 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 263 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 264 | 265 | component-emitter@^1.2.1: 266 | version "1.3.0" 267 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 268 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 269 | 270 | content-type@1.0.4: 271 | version "1.0.4" 272 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 273 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 274 | 275 | copy-descriptor@^0.1.0: 276 | version "0.1.1" 277 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 278 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 279 | 280 | core-util-is@~1.0.0: 281 | version "1.0.2" 282 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 283 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 284 | 285 | cross-spawn@^5.0.1: 286 | version "5.1.0" 287 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 288 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 289 | dependencies: 290 | lru-cache "^4.0.1" 291 | shebang-command "^1.2.0" 292 | which "^1.2.9" 293 | 294 | cross-spawn@^6.0.0: 295 | version "6.0.5" 296 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 297 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 298 | dependencies: 299 | nice-try "^1.0.4" 300 | path-key "^2.0.1" 301 | semver "^5.5.0" 302 | shebang-command "^1.2.0" 303 | which "^1.2.9" 304 | 305 | css-select@^1.1.0: 306 | version "1.2.0" 307 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" 308 | integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= 309 | dependencies: 310 | boolbase "~1.0.0" 311 | css-what "2.1" 312 | domutils "1.5.1" 313 | nth-check "~1.0.1" 314 | 315 | css-what@2.1: 316 | version "2.1.3" 317 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 318 | integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== 319 | 320 | debounce@1.1.0: 321 | version "1.1.0" 322 | resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408" 323 | integrity sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ== 324 | 325 | debug@^2.2.0, debug@^2.3.3: 326 | version "2.6.9" 327 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 328 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 329 | dependencies: 330 | ms "2.0.0" 331 | 332 | decamelize@^1.1.1: 333 | version "1.2.0" 334 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 335 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 336 | 337 | decode-uri-component@^0.2.0: 338 | version "0.2.0" 339 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 340 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 341 | 342 | define-property@^0.2.5: 343 | version "0.2.5" 344 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 345 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 346 | dependencies: 347 | is-descriptor "^0.1.0" 348 | 349 | define-property@^1.0.0: 350 | version "1.0.0" 351 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 352 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 353 | dependencies: 354 | is-descriptor "^1.0.0" 355 | 356 | define-property@^2.0.2: 357 | version "2.0.2" 358 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 359 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 360 | dependencies: 361 | is-descriptor "^1.0.2" 362 | isobject "^3.0.1" 363 | 364 | depd@1.1.1: 365 | version "1.1.1" 366 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 367 | integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= 368 | 369 | dom-converter@^0.2: 370 | version "0.2.0" 371 | resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" 372 | integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== 373 | dependencies: 374 | utila "~0.4" 375 | 376 | dom-serializer@0: 377 | version "0.2.2" 378 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 379 | integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== 380 | dependencies: 381 | domelementtype "^2.0.1" 382 | entities "^2.0.0" 383 | 384 | domelementtype@1, domelementtype@^1.3.1: 385 | version "1.3.1" 386 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 387 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 388 | 389 | domelementtype@^2.0.1: 390 | version "2.0.2" 391 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" 392 | integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== 393 | 394 | domhandler@^2.3.0: 395 | version "2.4.2" 396 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 397 | integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== 398 | dependencies: 399 | domelementtype "1" 400 | 401 | domutils@1.5.1: 402 | version "1.5.1" 403 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" 404 | integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= 405 | dependencies: 406 | dom-serializer "0" 407 | domelementtype "1" 408 | 409 | domutils@^1.5.1: 410 | version "1.7.0" 411 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 412 | integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== 413 | dependencies: 414 | dom-serializer "0" 415 | domelementtype "1" 416 | 417 | dotenv@5.0.1: 418 | version "5.0.1" 419 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" 420 | integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== 421 | 422 | end-of-stream@^1.1.0: 423 | version "1.4.4" 424 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 425 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 426 | dependencies: 427 | once "^1.4.0" 428 | 429 | entities@^1.1.1: 430 | version "1.1.2" 431 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 432 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 433 | 434 | entities@^2.0.0: 435 | version "2.0.3" 436 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" 437 | integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== 438 | 439 | escape-string-regexp@^1.0.5: 440 | version "1.0.5" 441 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 442 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 443 | 444 | execa@^0.7.0: 445 | version "0.7.0" 446 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 447 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 448 | dependencies: 449 | cross-spawn "^5.0.1" 450 | get-stream "^3.0.0" 451 | is-stream "^1.1.0" 452 | npm-run-path "^2.0.0" 453 | p-finally "^1.0.0" 454 | signal-exit "^3.0.0" 455 | strip-eof "^1.0.0" 456 | 457 | execa@^0.8.0: 458 | version "0.8.0" 459 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" 460 | integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= 461 | dependencies: 462 | cross-spawn "^5.0.1" 463 | get-stream "^3.0.0" 464 | is-stream "^1.1.0" 465 | npm-run-path "^2.0.0" 466 | p-finally "^1.0.0" 467 | signal-exit "^3.0.0" 468 | strip-eof "^1.0.0" 469 | 470 | execa@^1.0.0: 471 | version "1.0.0" 472 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 473 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 474 | dependencies: 475 | cross-spawn "^6.0.0" 476 | get-stream "^4.0.0" 477 | is-stream "^1.1.0" 478 | npm-run-path "^2.0.0" 479 | p-finally "^1.0.0" 480 | signal-exit "^3.0.0" 481 | strip-eof "^1.0.0" 482 | 483 | expand-brackets@^2.1.4: 484 | version "2.1.4" 485 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 486 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 487 | dependencies: 488 | debug "^2.3.3" 489 | define-property "^0.2.5" 490 | extend-shallow "^2.0.1" 491 | posix-character-classes "^0.1.0" 492 | regex-not "^1.0.0" 493 | snapdragon "^0.8.1" 494 | to-regex "^3.0.1" 495 | 496 | extend-shallow@^2.0.1: 497 | version "2.0.1" 498 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 499 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 500 | dependencies: 501 | is-extendable "^0.1.0" 502 | 503 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 504 | version "3.0.2" 505 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 506 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 507 | dependencies: 508 | assign-symbols "^1.0.0" 509 | is-extendable "^1.0.1" 510 | 511 | extglob@^2.0.4: 512 | version "2.0.4" 513 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 514 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 515 | dependencies: 516 | array-unique "^0.3.2" 517 | define-property "^1.0.0" 518 | expand-brackets "^2.1.4" 519 | extend-shallow "^2.0.1" 520 | fragment-cache "^0.2.1" 521 | regex-not "^1.0.0" 522 | snapdragon "^0.8.1" 523 | to-regex "^3.0.1" 524 | 525 | file-uri-to-path@1.0.0: 526 | version "1.0.0" 527 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 528 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 529 | 530 | fill-range@^4.0.0: 531 | version "4.0.0" 532 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 533 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 534 | dependencies: 535 | extend-shallow "^2.0.1" 536 | is-number "^3.0.0" 537 | repeat-string "^1.6.1" 538 | to-regex-range "^2.1.0" 539 | 540 | find-up@^2.1.0: 541 | version "2.1.0" 542 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 543 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 544 | dependencies: 545 | locate-path "^2.0.0" 546 | 547 | for-in@^1.0.2: 548 | version "1.0.2" 549 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 550 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 551 | 552 | fragment-cache@^0.2.1: 553 | version "0.2.1" 554 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 555 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 556 | dependencies: 557 | map-cache "^0.2.2" 558 | 559 | fsevents@^1.1.2: 560 | version "1.2.13" 561 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" 562 | integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== 563 | dependencies: 564 | bindings "^1.5.0" 565 | nan "^2.12.1" 566 | 567 | get-caller-file@^1.0.1: 568 | version "1.0.3" 569 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 570 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 571 | 572 | get-port@3.2.0: 573 | version "3.2.0" 574 | resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" 575 | integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= 576 | 577 | get-stream@^3.0.0: 578 | version "3.0.0" 579 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 580 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 581 | 582 | get-stream@^4.0.0: 583 | version "4.1.0" 584 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 585 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 586 | dependencies: 587 | pump "^3.0.0" 588 | 589 | get-value@^2.0.3, get-value@^2.0.6: 590 | version "2.0.6" 591 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 592 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 593 | 594 | glob-parent@^3.1.0: 595 | version "3.1.0" 596 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 597 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 598 | dependencies: 599 | is-glob "^3.1.0" 600 | path-dirname "^1.0.0" 601 | 602 | graceful-fs@^4.1.11: 603 | version "4.2.4" 604 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 605 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 606 | 607 | has-flag@^3.0.0: 608 | version "3.0.0" 609 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 610 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 611 | 612 | has-value@^0.3.1: 613 | version "0.3.1" 614 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 615 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 616 | dependencies: 617 | get-value "^2.0.3" 618 | has-values "^0.1.4" 619 | isobject "^2.0.0" 620 | 621 | has-value@^1.0.0: 622 | version "1.0.0" 623 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 624 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 625 | dependencies: 626 | get-value "^2.0.6" 627 | has-values "^1.0.0" 628 | isobject "^3.0.0" 629 | 630 | has-values@^0.1.4: 631 | version "0.1.4" 632 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 633 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 634 | 635 | has-values@^1.0.0: 636 | version "1.0.0" 637 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 638 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 639 | dependencies: 640 | is-number "^3.0.0" 641 | kind-of "^4.0.0" 642 | 643 | htmlparser2@^3.3.0: 644 | version "3.10.1" 645 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" 646 | integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== 647 | dependencies: 648 | domelementtype "^1.3.1" 649 | domhandler "^2.3.0" 650 | domutils "^1.5.1" 651 | entities "^1.1.1" 652 | inherits "^2.0.1" 653 | readable-stream "^3.1.1" 654 | 655 | http-errors@1.6.2: 656 | version "1.6.2" 657 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 658 | integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= 659 | dependencies: 660 | depd "1.1.1" 661 | inherits "2.0.3" 662 | setprototypeof "1.0.3" 663 | statuses ">= 1.3.1 < 2" 664 | 665 | iconv-lite@0.4.19: 666 | version "0.4.19" 667 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 668 | integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== 669 | 670 | inherits@2.0.3: 671 | version "2.0.3" 672 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 673 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 674 | 675 | inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 676 | version "2.0.4" 677 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 678 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 679 | 680 | invert-kv@^2.0.0: 681 | version "2.0.0" 682 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 683 | integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== 684 | 685 | ip@1.1.5: 686 | version "1.1.5" 687 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 688 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 689 | 690 | is-accessor-descriptor@^0.1.6: 691 | version "0.1.6" 692 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 693 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 694 | dependencies: 695 | kind-of "^3.0.2" 696 | 697 | is-accessor-descriptor@^1.0.0: 698 | version "1.0.0" 699 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 700 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 701 | dependencies: 702 | kind-of "^6.0.0" 703 | 704 | is-binary-path@^1.0.0: 705 | version "1.0.1" 706 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 707 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= 708 | dependencies: 709 | binary-extensions "^1.0.0" 710 | 711 | is-buffer@^1.1.5: 712 | version "1.1.6" 713 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 714 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 715 | 716 | is-data-descriptor@^0.1.4: 717 | version "0.1.4" 718 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 719 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 720 | dependencies: 721 | kind-of "^3.0.2" 722 | 723 | is-data-descriptor@^1.0.0: 724 | version "1.0.0" 725 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 726 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 727 | dependencies: 728 | kind-of "^6.0.0" 729 | 730 | is-descriptor@^0.1.0: 731 | version "0.1.6" 732 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 733 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 734 | dependencies: 735 | is-accessor-descriptor "^0.1.6" 736 | is-data-descriptor "^0.1.4" 737 | kind-of "^5.0.0" 738 | 739 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 740 | version "1.0.2" 741 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 742 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 743 | dependencies: 744 | is-accessor-descriptor "^1.0.0" 745 | is-data-descriptor "^1.0.0" 746 | kind-of "^6.0.2" 747 | 748 | is-extendable@^0.1.0, is-extendable@^0.1.1: 749 | version "0.1.1" 750 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 751 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 752 | 753 | is-extendable@^1.0.1: 754 | version "1.0.1" 755 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 756 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 757 | dependencies: 758 | is-plain-object "^2.0.4" 759 | 760 | is-extglob@^2.1.0, is-extglob@^2.1.1: 761 | version "2.1.1" 762 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 763 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 764 | 765 | is-fullwidth-code-point@^1.0.0: 766 | version "1.0.0" 767 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 768 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 769 | dependencies: 770 | number-is-nan "^1.0.0" 771 | 772 | is-fullwidth-code-point@^2.0.0: 773 | version "2.0.0" 774 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 775 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 776 | 777 | is-glob@^3.1.0: 778 | version "3.1.0" 779 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 780 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 781 | dependencies: 782 | is-extglob "^2.1.0" 783 | 784 | is-glob@^4.0.0: 785 | version "4.0.1" 786 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 787 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 788 | dependencies: 789 | is-extglob "^2.1.1" 790 | 791 | is-number@^3.0.0: 792 | version "3.0.0" 793 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 794 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 795 | dependencies: 796 | kind-of "^3.0.2" 797 | 798 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 799 | version "2.0.4" 800 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 801 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 802 | dependencies: 803 | isobject "^3.0.1" 804 | 805 | is-stream@1.1.0, is-stream@^1.1.0: 806 | version "1.1.0" 807 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 808 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 809 | 810 | is-windows@^1.0.2: 811 | version "1.0.2" 812 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 813 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 814 | 815 | isarray@1.0.0, isarray@~1.0.0: 816 | version "1.0.0" 817 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 818 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 819 | 820 | isexe@^2.0.0: 821 | version "2.0.0" 822 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 823 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 824 | 825 | isobject@^2.0.0: 826 | version "2.1.0" 827 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 828 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 829 | dependencies: 830 | isarray "1.0.0" 831 | 832 | isobject@^3.0.0, isobject@^3.0.1: 833 | version "3.0.1" 834 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 835 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 836 | 837 | jsome@2.5.0: 838 | version "2.5.0" 839 | resolved "https://registry.yarnpkg.com/jsome/-/jsome-2.5.0.tgz#5e417eef4341ffeb83ee8bfa9265b36d56fe49ed" 840 | integrity sha1-XkF+70NB/+uD7ov6kmWzbVb+Se0= 841 | dependencies: 842 | chalk "^2.3.0" 843 | json-stringify-safe "^5.0.1" 844 | yargs "^11.0.0" 845 | 846 | json-stringify-safe@^5.0.1: 847 | version "5.0.1" 848 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 849 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 850 | 851 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 852 | version "3.2.2" 853 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 854 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 855 | dependencies: 856 | is-buffer "^1.1.5" 857 | 858 | kind-of@^4.0.0: 859 | version "4.0.0" 860 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 861 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 862 | dependencies: 863 | is-buffer "^1.1.5" 864 | 865 | kind-of@^5.0.0: 866 | version "5.1.0" 867 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 868 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 869 | 870 | kind-of@^6.0.0, kind-of@^6.0.2: 871 | version "6.0.3" 872 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 873 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 874 | 875 | lcid@^2.0.0: 876 | version "2.0.0" 877 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 878 | integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 879 | dependencies: 880 | invert-kv "^2.0.0" 881 | 882 | locate-path@^2.0.0: 883 | version "2.0.0" 884 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 885 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 886 | dependencies: 887 | p-locate "^2.0.0" 888 | path-exists "^3.0.0" 889 | 890 | lodash@^4.17.20: 891 | version "4.17.20" 892 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 893 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 894 | 895 | lru-cache@^4.0.1: 896 | version "4.1.5" 897 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 898 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 899 | dependencies: 900 | pseudomap "^1.0.2" 901 | yallist "^2.1.2" 902 | 903 | map-age-cleaner@^0.1.1: 904 | version "0.1.3" 905 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 906 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 907 | dependencies: 908 | p-defer "^1.0.0" 909 | 910 | map-cache@^0.2.2: 911 | version "0.2.2" 912 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 913 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 914 | 915 | map-visit@^1.0.0: 916 | version "1.0.0" 917 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 918 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 919 | dependencies: 920 | object-visit "^1.0.0" 921 | 922 | mem@^4.0.0: 923 | version "4.3.0" 924 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 925 | integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== 926 | dependencies: 927 | map-age-cleaner "^0.1.1" 928 | mimic-fn "^2.0.0" 929 | p-is-promise "^2.0.0" 930 | 931 | micro-dev@^3.0.0: 932 | version "3.0.0" 933 | resolved "https://registry.yarnpkg.com/micro-dev/-/micro-dev-3.0.0.tgz#cea7ef2b4318765b74004e98ec92ac7e12fcff37" 934 | integrity sha512-hxI93KdT7Y8utmVn3NsXqMEKOQj0RpHiY1+PW8rtbiDyd3e/D6NN7OEdG8R0uSFI3GuJbkYN76Z2QTZafyfN/w== 935 | dependencies: 936 | boxen "1.3.0" 937 | chalk "2.4.1" 938 | chokidar "2.0.3" 939 | clipboardy "1.2.3" 940 | debounce "1.1.0" 941 | dotenv "5.0.1" 942 | get-port "3.2.0" 943 | ip "1.1.5" 944 | jsome "2.5.0" 945 | mri "1.1.1" 946 | pkg-up "2.0.0" 947 | pretty-error "2.1.1" 948 | string-length "2.0.0" 949 | 950 | micro@^9.3.4: 951 | version "9.3.4" 952 | resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.4.tgz#745a494e53c8916f64fb6a729f8cbf2a506b35ad" 953 | integrity sha512-smz9naZwTG7qaFnEZ2vn248YZq9XR+XoOH3auieZbkhDL4xLOxiE+KqG8qqnBeKfXA9c1uEFGCxPN1D+nT6N7w== 954 | dependencies: 955 | arg "4.1.0" 956 | content-type "1.0.4" 957 | is-stream "1.1.0" 958 | raw-body "2.3.2" 959 | 960 | micromatch@^3.1.10, micromatch@^3.1.4: 961 | version "3.1.10" 962 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 963 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 964 | dependencies: 965 | arr-diff "^4.0.0" 966 | array-unique "^0.3.2" 967 | braces "^2.3.1" 968 | define-property "^2.0.2" 969 | extend-shallow "^3.0.2" 970 | extglob "^2.0.4" 971 | fragment-cache "^0.2.1" 972 | kind-of "^6.0.2" 973 | nanomatch "^1.2.9" 974 | object.pick "^1.3.0" 975 | regex-not "^1.0.0" 976 | snapdragon "^0.8.1" 977 | to-regex "^3.0.2" 978 | 979 | mimic-fn@^2.0.0: 980 | version "2.1.0" 981 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 982 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 983 | 984 | mixin-deep@^1.2.0: 985 | version "1.3.2" 986 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 987 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 988 | dependencies: 989 | for-in "^1.0.2" 990 | is-extendable "^1.0.1" 991 | 992 | mri@1.1.1: 993 | version "1.1.1" 994 | resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.1.tgz#85aa26d3daeeeedf80dc5984af95cc5ca5cad9f1" 995 | integrity sha1-haom09ru7t+A3FmEr5XMXKXK2fE= 996 | 997 | ms@2.0.0: 998 | version "2.0.0" 999 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1000 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1001 | 1002 | nan@^2.12.1: 1003 | version "2.14.1" 1004 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" 1005 | integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== 1006 | 1007 | nanomatch@^1.2.9: 1008 | version "1.2.13" 1009 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 1010 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 1011 | dependencies: 1012 | arr-diff "^4.0.0" 1013 | array-unique "^0.3.2" 1014 | define-property "^2.0.2" 1015 | extend-shallow "^3.0.2" 1016 | fragment-cache "^0.2.1" 1017 | is-windows "^1.0.2" 1018 | kind-of "^6.0.2" 1019 | object.pick "^1.3.0" 1020 | regex-not "^1.0.0" 1021 | snapdragon "^0.8.1" 1022 | to-regex "^3.0.1" 1023 | 1024 | nice-try@^1.0.4: 1025 | version "1.0.5" 1026 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1027 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1028 | 1029 | normalize-path@^2.1.1: 1030 | version "2.1.1" 1031 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1032 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 1033 | dependencies: 1034 | remove-trailing-separator "^1.0.1" 1035 | 1036 | npm-run-path@^2.0.0: 1037 | version "2.0.2" 1038 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1039 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1040 | dependencies: 1041 | path-key "^2.0.0" 1042 | 1043 | nth-check@~1.0.1: 1044 | version "1.0.2" 1045 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" 1046 | integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== 1047 | dependencies: 1048 | boolbase "~1.0.0" 1049 | 1050 | number-is-nan@^1.0.0: 1051 | version "1.0.1" 1052 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1053 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1054 | 1055 | object-copy@^0.1.0: 1056 | version "0.1.0" 1057 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1058 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 1059 | dependencies: 1060 | copy-descriptor "^0.1.0" 1061 | define-property "^0.2.5" 1062 | kind-of "^3.0.3" 1063 | 1064 | object-visit@^1.0.0: 1065 | version "1.0.1" 1066 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1067 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 1068 | dependencies: 1069 | isobject "^3.0.0" 1070 | 1071 | object.pick@^1.3.0: 1072 | version "1.3.0" 1073 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1074 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 1075 | dependencies: 1076 | isobject "^3.0.1" 1077 | 1078 | once@^1.3.1, once@^1.4.0: 1079 | version "1.4.0" 1080 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1081 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1082 | dependencies: 1083 | wrappy "1" 1084 | 1085 | os-locale@^3.1.0: 1086 | version "3.1.0" 1087 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 1088 | integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== 1089 | dependencies: 1090 | execa "^1.0.0" 1091 | lcid "^2.0.0" 1092 | mem "^4.0.0" 1093 | 1094 | p-defer@^1.0.0: 1095 | version "1.0.0" 1096 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 1097 | integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= 1098 | 1099 | p-finally@^1.0.0: 1100 | version "1.0.0" 1101 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1102 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1103 | 1104 | p-is-promise@^2.0.0: 1105 | version "2.1.0" 1106 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 1107 | integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== 1108 | 1109 | p-limit@^1.1.0: 1110 | version "1.3.0" 1111 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1112 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1113 | dependencies: 1114 | p-try "^1.0.0" 1115 | 1116 | p-locate@^2.0.0: 1117 | version "2.0.0" 1118 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1119 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1120 | dependencies: 1121 | p-limit "^1.1.0" 1122 | 1123 | p-try@^1.0.0: 1124 | version "1.0.0" 1125 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1126 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1127 | 1128 | parse-diff@^0.7.1: 1129 | version "0.7.1" 1130 | resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" 1131 | integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== 1132 | 1133 | pascalcase@^0.1.1: 1134 | version "0.1.1" 1135 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1136 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 1137 | 1138 | path-dirname@^1.0.0: 1139 | version "1.0.2" 1140 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1141 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 1142 | 1143 | path-exists@^3.0.0: 1144 | version "3.0.0" 1145 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1146 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1147 | 1148 | path-is-absolute@^1.0.0: 1149 | version "1.0.1" 1150 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1151 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1152 | 1153 | path-key@^2.0.0, path-key@^2.0.1: 1154 | version "2.0.1" 1155 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1156 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1157 | 1158 | pkg-up@2.0.0: 1159 | version "2.0.0" 1160 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" 1161 | integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= 1162 | dependencies: 1163 | find-up "^2.1.0" 1164 | 1165 | posix-character-classes@^0.1.0: 1166 | version "0.1.1" 1167 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 1168 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 1169 | 1170 | pretty-error@2.1.1: 1171 | version "2.1.1" 1172 | resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" 1173 | integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= 1174 | dependencies: 1175 | renderkid "^2.0.1" 1176 | utila "~0.4" 1177 | 1178 | process-nextick-args@~2.0.0: 1179 | version "2.0.1" 1180 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1181 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1182 | 1183 | pseudomap@^1.0.2: 1184 | version "1.0.2" 1185 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1186 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1187 | 1188 | pump@^3.0.0: 1189 | version "3.0.0" 1190 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1191 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1192 | dependencies: 1193 | end-of-stream "^1.1.0" 1194 | once "^1.3.1" 1195 | 1196 | raw-body@2.3.2: 1197 | version "2.3.2" 1198 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 1199 | integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k= 1200 | dependencies: 1201 | bytes "3.0.0" 1202 | http-errors "1.6.2" 1203 | iconv-lite "0.4.19" 1204 | unpipe "1.0.0" 1205 | 1206 | readable-stream@^2.0.2: 1207 | version "2.3.7" 1208 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1209 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1210 | dependencies: 1211 | core-util-is "~1.0.0" 1212 | inherits "~2.0.3" 1213 | isarray "~1.0.0" 1214 | process-nextick-args "~2.0.0" 1215 | safe-buffer "~5.1.1" 1216 | string_decoder "~1.1.1" 1217 | util-deprecate "~1.0.1" 1218 | 1219 | readable-stream@^3.1.1: 1220 | version "3.6.0" 1221 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 1222 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1223 | dependencies: 1224 | inherits "^2.0.3" 1225 | string_decoder "^1.1.1" 1226 | util-deprecate "^1.0.1" 1227 | 1228 | readdirp@^2.0.0: 1229 | version "2.2.1" 1230 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 1231 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== 1232 | dependencies: 1233 | graceful-fs "^4.1.11" 1234 | micromatch "^3.1.10" 1235 | readable-stream "^2.0.2" 1236 | 1237 | regex-not@^1.0.0, regex-not@^1.0.2: 1238 | version "1.0.2" 1239 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 1240 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 1241 | dependencies: 1242 | extend-shallow "^3.0.2" 1243 | safe-regex "^1.1.0" 1244 | 1245 | remove-trailing-separator@^1.0.1: 1246 | version "1.1.0" 1247 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1248 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 1249 | 1250 | renderkid@^2.0.1: 1251 | version "2.0.3" 1252 | resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" 1253 | integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== 1254 | dependencies: 1255 | css-select "^1.1.0" 1256 | dom-converter "^0.2" 1257 | htmlparser2 "^3.3.0" 1258 | strip-ansi "^3.0.0" 1259 | utila "^0.4.0" 1260 | 1261 | repeat-element@^1.1.2: 1262 | version "1.1.3" 1263 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 1264 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 1265 | 1266 | repeat-string@^1.6.1: 1267 | version "1.6.1" 1268 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1269 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 1270 | 1271 | require-directory@^2.1.1: 1272 | version "2.1.1" 1273 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1274 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1275 | 1276 | require-main-filename@^1.0.1: 1277 | version "1.0.1" 1278 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1279 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 1280 | 1281 | resolve-url@^0.2.1: 1282 | version "0.2.1" 1283 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1284 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 1285 | 1286 | ret@~0.1.10: 1287 | version "0.1.15" 1288 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 1289 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 1290 | 1291 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1292 | version "5.1.2" 1293 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1294 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1295 | 1296 | safe-buffer@~5.2.0: 1297 | version "5.2.1" 1298 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1299 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1300 | 1301 | safe-regex@^1.1.0: 1302 | version "1.1.0" 1303 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 1304 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 1305 | dependencies: 1306 | ret "~0.1.10" 1307 | 1308 | semver@^5.5.0: 1309 | version "5.7.1" 1310 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1311 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1312 | 1313 | set-blocking@^2.0.0: 1314 | version "2.0.0" 1315 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1316 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1317 | 1318 | set-value@^2.0.0, set-value@^2.0.1: 1319 | version "2.0.1" 1320 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 1321 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 1322 | dependencies: 1323 | extend-shallow "^2.0.1" 1324 | is-extendable "^0.1.1" 1325 | is-plain-object "^2.0.3" 1326 | split-string "^3.0.1" 1327 | 1328 | setprototypeof@1.0.3: 1329 | version "1.0.3" 1330 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 1331 | integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= 1332 | 1333 | shebang-command@^1.2.0: 1334 | version "1.2.0" 1335 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1336 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1337 | dependencies: 1338 | shebang-regex "^1.0.0" 1339 | 1340 | shebang-regex@^1.0.0: 1341 | version "1.0.0" 1342 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1343 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1344 | 1345 | signal-exit@^3.0.0: 1346 | version "3.0.3" 1347 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1348 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1349 | 1350 | snapdragon-node@^2.0.1: 1351 | version "2.1.1" 1352 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 1353 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 1354 | dependencies: 1355 | define-property "^1.0.0" 1356 | isobject "^3.0.0" 1357 | snapdragon-util "^3.0.1" 1358 | 1359 | snapdragon-util@^3.0.1: 1360 | version "3.0.1" 1361 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 1362 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 1363 | dependencies: 1364 | kind-of "^3.2.0" 1365 | 1366 | snapdragon@^0.8.1: 1367 | version "0.8.2" 1368 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 1369 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 1370 | dependencies: 1371 | base "^0.11.1" 1372 | debug "^2.2.0" 1373 | define-property "^0.2.5" 1374 | extend-shallow "^2.0.1" 1375 | map-cache "^0.2.2" 1376 | source-map "^0.5.6" 1377 | source-map-resolve "^0.5.0" 1378 | use "^3.1.0" 1379 | 1380 | source-map-resolve@^0.5.0: 1381 | version "0.5.3" 1382 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" 1383 | integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== 1384 | dependencies: 1385 | atob "^2.1.2" 1386 | decode-uri-component "^0.2.0" 1387 | resolve-url "^0.2.1" 1388 | source-map-url "^0.4.0" 1389 | urix "^0.1.0" 1390 | 1391 | source-map-url@^0.4.0: 1392 | version "0.4.0" 1393 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1394 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 1395 | 1396 | source-map@^0.5.6: 1397 | version "0.5.7" 1398 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1399 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1400 | 1401 | split-string@^3.0.1, split-string@^3.0.2: 1402 | version "3.1.0" 1403 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1404 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 1405 | dependencies: 1406 | extend-shallow "^3.0.0" 1407 | 1408 | static-extend@^0.1.1: 1409 | version "0.1.2" 1410 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 1411 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 1412 | dependencies: 1413 | define-property "^0.2.5" 1414 | object-copy "^0.1.0" 1415 | 1416 | "statuses@>= 1.3.1 < 2": 1417 | version "1.5.0" 1418 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1419 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1420 | 1421 | string-length@2.0.0: 1422 | version "2.0.0" 1423 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" 1424 | integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= 1425 | dependencies: 1426 | astral-regex "^1.0.0" 1427 | strip-ansi "^4.0.0" 1428 | 1429 | string-width@^1.0.1: 1430 | version "1.0.2" 1431 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1432 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1433 | dependencies: 1434 | code-point-at "^1.0.0" 1435 | is-fullwidth-code-point "^1.0.0" 1436 | strip-ansi "^3.0.0" 1437 | 1438 | string-width@^2.0.0, string-width@^2.1.1: 1439 | version "2.1.1" 1440 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1441 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1442 | dependencies: 1443 | is-fullwidth-code-point "^2.0.0" 1444 | strip-ansi "^4.0.0" 1445 | 1446 | string_decoder@^1.1.1: 1447 | version "1.3.0" 1448 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1449 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1450 | dependencies: 1451 | safe-buffer "~5.2.0" 1452 | 1453 | string_decoder@~1.1.1: 1454 | version "1.1.1" 1455 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1456 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1457 | dependencies: 1458 | safe-buffer "~5.1.0" 1459 | 1460 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1461 | version "3.0.1" 1462 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1463 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1464 | dependencies: 1465 | ansi-regex "^2.0.0" 1466 | 1467 | strip-ansi@^4.0.0: 1468 | version "4.0.0" 1469 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1470 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1471 | dependencies: 1472 | ansi-regex "^3.0.0" 1473 | 1474 | strip-eof@^1.0.0: 1475 | version "1.0.0" 1476 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1477 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1478 | 1479 | supports-color@^5.3.0: 1480 | version "5.5.0" 1481 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1482 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1483 | dependencies: 1484 | has-flag "^3.0.0" 1485 | 1486 | term-size@^1.2.0: 1487 | version "1.2.0" 1488 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 1489 | integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= 1490 | dependencies: 1491 | execa "^0.7.0" 1492 | 1493 | to-object-path@^0.3.0: 1494 | version "0.3.0" 1495 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 1496 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 1497 | dependencies: 1498 | kind-of "^3.0.2" 1499 | 1500 | to-regex-range@^2.1.0: 1501 | version "2.1.1" 1502 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 1503 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 1504 | dependencies: 1505 | is-number "^3.0.0" 1506 | repeat-string "^1.6.1" 1507 | 1508 | to-regex@^3.0.1, to-regex@^3.0.2: 1509 | version "3.0.2" 1510 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 1511 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 1512 | dependencies: 1513 | define-property "^2.0.2" 1514 | extend-shallow "^3.0.2" 1515 | regex-not "^1.0.2" 1516 | safe-regex "^1.1.0" 1517 | 1518 | union-value@^1.0.0: 1519 | version "1.0.1" 1520 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" 1521 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== 1522 | dependencies: 1523 | arr-union "^3.1.0" 1524 | get-value "^2.0.6" 1525 | is-extendable "^0.1.1" 1526 | set-value "^2.0.1" 1527 | 1528 | unpipe@1.0.0: 1529 | version "1.0.0" 1530 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1531 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1532 | 1533 | unset-value@^1.0.0: 1534 | version "1.0.0" 1535 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 1536 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 1537 | dependencies: 1538 | has-value "^0.3.1" 1539 | isobject "^3.0.0" 1540 | 1541 | upath@^1.0.0: 1542 | version "1.2.0" 1543 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" 1544 | integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== 1545 | 1546 | urix@^0.1.0: 1547 | version "0.1.0" 1548 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 1549 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 1550 | 1551 | use@^3.1.0: 1552 | version "3.1.1" 1553 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 1554 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 1555 | 1556 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 1557 | version "1.0.2" 1558 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1559 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1560 | 1561 | utila@^0.4.0, utila@~0.4: 1562 | version "0.4.0" 1563 | resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" 1564 | integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= 1565 | 1566 | which-module@^2.0.0: 1567 | version "2.0.0" 1568 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1569 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1570 | 1571 | which@^1.2.9: 1572 | version "1.3.1" 1573 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1574 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1575 | dependencies: 1576 | isexe "^2.0.0" 1577 | 1578 | widest-line@^2.0.0: 1579 | version "2.0.1" 1580 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" 1581 | integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== 1582 | dependencies: 1583 | string-width "^2.1.1" 1584 | 1585 | wrap-ansi@^2.0.0: 1586 | version "2.1.0" 1587 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1588 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 1589 | dependencies: 1590 | string-width "^1.0.1" 1591 | strip-ansi "^3.0.1" 1592 | 1593 | wrappy@1: 1594 | version "1.0.2" 1595 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1596 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1597 | 1598 | y18n@^3.2.1: 1599 | version "3.2.1" 1600 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1601 | integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= 1602 | 1603 | yallist@^2.1.2: 1604 | version "2.1.2" 1605 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1606 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1607 | 1608 | yargs-parser@^9.0.2: 1609 | version "9.0.2" 1610 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" 1611 | integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= 1612 | dependencies: 1613 | camelcase "^4.1.0" 1614 | 1615 | yargs@^11.0.0: 1616 | version "11.1.1" 1617 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" 1618 | integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== 1619 | dependencies: 1620 | cliui "^4.0.0" 1621 | decamelize "^1.1.1" 1622 | find-up "^2.1.0" 1623 | get-caller-file "^1.0.1" 1624 | os-locale "^3.1.0" 1625 | require-directory "^2.1.1" 1626 | require-main-filename "^1.0.1" 1627 | set-blocking "^2.0.0" 1628 | string-width "^2.0.0" 1629 | which-module "^2.0.0" 1630 | y18n "^3.2.1" 1631 | yargs-parser "^9.0.2" 1632 | -------------------------------------------------------------------------------- /releaserc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | branch: "master", 3 | plugins: [ 4 | "@semantic-release/commit-analyzer", 5 | "@semantic-release/release-notes-generator", 6 | ["@semantic-release/npm", { npmPublish: true }], 7 | "@semantic-release/github", 8 | [ 9 | "@semantic-release/git", 10 | { 11 | assets: ["package.json"], 12 | message: "chore(release): ${nextRelease.version} [skip ci] 13 | ${nextRelease.notes}", 14 | }, 15 | ], 16 | ], 17 | } 18 | --------------------------------------------------------------------------------