├── .npmignore ├── .gitignore ├── .prettierrc.json ├── src ├── utils.ts ├── provider.tsx ├── types.ts ├── __snapshots__ │ └── index.test.tsx.snap ├── hooks.ts ├── index.test.tsx └── index.ts ├── tsconfig.json ├── jest.config.js ├── package.json ├── CONTRIBUTING.md ├── README.md └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | jest.config.js 3 | tsconfig.json -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | coverage 5 | es 6 | lib 7 | .idea/ -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "singleQuote": true, 4 | "semi": false, 5 | "arrowParens": "always", 6 | "overrides": [ 7 | { 8 | "files": "*.md", 9 | "options": { 10 | "trailingComma": "none" 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { LogType, Options, State } from './types' 2 | 3 | let _options: Options 4 | 5 | export function configureUtils(options: Options) { 6 | _options = options 7 | } 8 | 9 | export function log(type: LogType, message: string, ...data: any[]) { 10 | return _options.debug && console.log(`# ${type}: ${message}`, ...data) 11 | } 12 | 13 | export function getTarget(paths: string[], source: State): State[keyof State] { 14 | return paths.reduce((aggregator, key) => aggregator[key], source) 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "jsx": "react", 6 | "rootDir": "src", 7 | "outDir": ".code", 8 | "newLine": "LF", 9 | "lib": ["dom", "es2017"], 10 | "moduleResolution": "node", 11 | "strictNullChecks": true, 12 | "importHelpers": true, 13 | "declaration": true, 14 | "pretty": true, 15 | "sourceMap": true, 16 | "inlineSources": true 17 | }, 18 | "exclude": ["node_modules", "dist", "es", "lib", "src/**/*.test.ts"] 19 | } 20 | -------------------------------------------------------------------------------- /src/provider.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { Store } from './types' 3 | 4 | const context = React.createContext | null>(null) 5 | 6 | export const useStoreContext = () => { 7 | const instance = React.useContext(context) 8 | if (!instance) 9 | throw new Error( 10 | 'You have not added the Provider and exposed the store to your application. ' + 11 | 'Please read the documentation of how to expose the store' 12 | ) 13 | return instance 14 | } 15 | 16 | export const Provider = ({ store, children }) => ( 17 | {children} 18 | ) 19 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | collectCoverage: true, 3 | collectCoverageFrom: ['src/**/*.{t,j}s?(x)', '!src/**/*.d.ts'], 4 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], 5 | transform: { 6 | '^.+\\.tsx?$': 'ts-jest', 7 | }, 8 | testRegex: '\\.test\\.tsx?$', 9 | testPathIgnorePatterns: [ 10 | '/dist/', 11 | '/es/', 12 | '/lib/', 13 | '/node_modules/', 14 | ], 15 | transformIgnorePatterns: ['/node_modules/'], 16 | coveragePathIgnorePatterns: ['/node_modules/'], 17 | haste: { 18 | // This option is needed or else globbing ignores /node_modules. 19 | providesModuleNodeModules: ['overmind-react'], 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "immer-store", 3 | "version": "0.0.37", 4 | "description": "Functional actions", 5 | "author": "Christian Alfoni ", 6 | "license": "MIT", 7 | "repository": "https://github.com/christianalfoni/immer-store", 8 | "main": "lib/index.js", 9 | "module": "es/index.js", 10 | "types": "lib/index.d.ts", 11 | "scripts": { 12 | "build": "npm run build:lib & npm run build:es", 13 | "build:lib": "tsc --outDir lib --module commonjs", 14 | "build:es": "tsc --outDir es --module es2015", 15 | "clean": "rimraf es lib coverage", 16 | "typecheck": "tsc --noEmit", 17 | "test": "jest --runInBand", 18 | "test:watch": "jest --watch --updateSnapshot --coverage false", 19 | "prebuild": "npm run clean", 20 | "postbuild": "rimraf {lib,es}/**/__tests__", 21 | "posttest": "npm run typecheck", 22 | "prepublish": "npm test && npm run build" 23 | }, 24 | "keywords": [ 25 | "state", 26 | "sideeffects", 27 | "app", 28 | "framework" 29 | ], 30 | "files": [ 31 | "lib", 32 | "es", 33 | "react" 34 | ], 35 | "dependencies": { 36 | "immer": "^8.0.1", 37 | "reselect": "^4.0.0" 38 | }, 39 | "devDependencies": { 40 | "@types/jest": "^24.0.18", 41 | "@types/node": "^10.12.21", 42 | "@types/react": "^16.9.2", 43 | "@types/react-dom": "^16.9.0", 44 | "jest": "^24.9.0", 45 | "prettier": "^1.18.2", 46 | "react": "^16.9.0", 47 | "react-dom": "^16.9.0", 48 | "react-test-renderer": "^16.9.0", 49 | "ts-jest": "^24.0.2", 50 | "tslib": "^1.9.3", 51 | "typescript": "^3.6.2" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { Immutable, Draft } from 'immer' 2 | 3 | export enum LogType { 4 | RENDER = 'RENDER', 5 | MUTATION = 'MUTATION', 6 | FLUSH = 'FLUSH', 7 | COMPONENT_RENDER = 'COMPONENT RENDER', 8 | } 9 | 10 | export interface State { 11 | [key: string]: State | string | number | boolean | object | null | undefined 12 | } 13 | 14 | type GeneralFunction = (...args: any[]) => any 15 | export interface BaseEffects { 16 | [key: string]: BaseEffects | GeneralFunction 17 | } 18 | 19 | interface BaseContext { 20 | state: S 21 | effects: E 22 | } 23 | type GenericAction = ( 24 | context: BaseContext, 25 | payload?: any 26 | ) => any 27 | export interface BaseActions { 28 | [key: string]: BaseActions | GenericAction 29 | } 30 | 31 | export type ActionsWithoutContext> = { 32 | [K in keyof A]: A[K] extends (context: BaseContext) => any 33 | ? () => ReturnType 34 | : A[K] extends (context: BaseContext, payload: infer P) => any 35 | ? (payload: P) => ReturnType 36 | : A[K] extends BaseActions 37 | ? ActionsWithoutContext 38 | : never 39 | } 40 | 41 | export type Options = { debug: boolean } 42 | 43 | export interface Config< 44 | S extends State, 45 | E extends BaseEffects, 46 | A extends BaseActions 47 | > { 48 | state: S 49 | effects?: E 50 | actions?: A 51 | } 52 | 53 | // A type which can be extended by 54 | // interface Action extends IAction {} 55 | export type IAction> = ( 56 | context: BaseContext, 57 | payload: Payload 58 | ) => any 59 | 60 | export interface Store< 61 | S extends State, 62 | E extends BaseEffects, 63 | A extends BaseActions 64 | > { 65 | state: Immutable> 66 | actions: ActionsWithoutContext 67 | 68 | subscribe( 69 | update: (state: Immutable>) => void, 70 | paths?: Set, 71 | name?: string 72 | ): void 73 | } 74 | -------------------------------------------------------------------------------- /src/__snapshots__/index.test.tsx.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`React should allow async changes 1`] = ` 4 |
    5 |
  • 6 | foo 7 |
  • 8 |
  • 9 | bar 10 |
  • 11 |
12 | `; 13 | 14 | exports[`React should allow async changes 2`] = ` 15 |
    16 |
  • 17 | foo2 18 |
  • 19 |
  • 20 | bar 21 |
  • 22 |
23 | `; 24 | 25 | exports[`React should allow async changes 3`] = ` 26 |
    27 |
  • 28 | foo23 29 |
  • 30 |
  • 31 | bar 32 |
  • 33 |
34 | `; 35 | 36 | exports[`React should allow async changes 4`] = ` 37 |
    38 |
  • 39 | foo23 40 |
  • 41 |
  • 42 | bar 43 |
  • 44 |
45 | `; 46 | 47 | exports[`React should allow usage of computed 1`] = ` 48 |
    49 |
  • 50 | FOO 51 |
  • 52 |
  • 53 | BAR 54 |
  • 55 |
56 | `; 57 | 58 | exports[`React should allow usage of computed 2`] = ` 59 |
    60 |
  • 61 | FOO 62 |
  • 63 |
  • 64 | BAR 65 |
  • 66 |
  • 67 | BAZ 68 |
  • 69 |
70 | `; 71 | 72 | exports[`React should allow using hooks 1`] = ` 73 |

74 | bar! 75 |

76 | `; 77 | 78 | exports[`React should handle arrays 1`] = ` 79 |
    80 |
  • 81 | foo 82 |
  • 83 |
  • 84 | bar 85 |
  • 86 |
87 | `; 88 | 89 | exports[`React should handle arrays 2`] = ` 90 |
    91 |
  • 92 | foo 93 |
  • 94 |
  • 95 | bar 96 |
  • 97 |
  • 98 | baz 99 |
  • 100 |
101 | `; 102 | 103 | exports[`React should handle cross async action changes 1`] = ` 104 |

105 | bar121 106 |

107 | `; 108 | 109 | exports[`React should handle objects 1`] = ` 110 |
    111 |
  • 112 | bar 113 |
  • 114 |
  • 115 | baz 116 |
  • 117 |
  • 118 | boing 119 |
  • 120 |
121 | `; 122 | 123 | exports[`React should handle objects 2`] = ` 124 |
    125 |
  • 126 | BAR 127 |
  • 128 |
  • 129 | BAZ 130 |
  • 131 |
  • 132 | BOING 133 |
  • 134 |
135 | `; 136 | 137 | exports[`React should render on object add and remove 1`] = ` 138 |

139 | does not exist 140 |

141 | `; 142 | 143 | exports[`React should render on object add and remove 2`] = ` 144 |

145 | bar 146 |

147 | `; 148 | 149 | exports[`React should render on object add and remove 3`] = ` 150 |

151 | does not exist 152 |

153 | `; 154 | 155 | exports[`React should target state 1`] = ` 156 |
    157 |
  • 158 | foo 159 |
  • 160 |
161 | `; 162 | 163 | exports[`React should target state 2`] = ` 164 |
    165 |
  • 166 | foo2 167 |
  • 168 |
169 | `; 170 | 171 | exports[`React should target state 3`] = ` 172 |
    173 |
  • 174 | foo3 175 |
  • 176 |
177 | `; 178 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | Please note we have a code of conduct, please follow it in all your interactions with the project. 7 | 8 | ## Pull Request Process 9 | 10 | 1. Ensure any install or build dependencies are removed before the end of the layer when doing a 11 | build. 12 | 2. Update the README.md with details of changes to the interface, this includes new environment 13 | variables, exposed ports, useful file locations and container parameters. 14 | 3. Increase the version numbers in any examples files and the README.md to the new version that this 15 | Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). 16 | 4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you 17 | do not have permission to do that, you may request the second reviewer to merge it for you. 18 | 19 | ## Code of Conduct 20 | 21 | ### Our Pledge 22 | 23 | In the interest of fostering an open and welcoming environment, we as 24 | contributors and maintainers pledge to making participation in our project and 25 | our community a harassment-free experience for everyone, regardless of age, body 26 | size, disability, ethnicity, gender identity and expression, level of experience, 27 | nationality, personal appearance, race, religion, or sexual identity and 28 | orientation. 29 | 30 | ### Our Standards 31 | 32 | Examples of behavior that contributes to creating a positive environment 33 | include: 34 | 35 | * Using welcoming and inclusive language 36 | * Being respectful of differing viewpoints and experiences 37 | * Gracefully accepting constructive criticism 38 | * Focusing on what is best for the community 39 | * Showing empathy towards other community members 40 | 41 | Examples of unacceptable behavior by participants include: 42 | 43 | * The use of sexualized language or imagery and unwelcome sexual attention or 44 | advances 45 | * Trolling, insulting/derogatory comments, and personal or political attacks 46 | * Public or private harassment 47 | * Publishing others' private information, such as a physical or electronic 48 | address, without explicit permission 49 | * Other conduct which could reasonably be considered inappropriate in a 50 | professional setting 51 | 52 | ### Our Responsibilities 53 | 54 | Project maintainers are responsible for clarifying the standards of acceptable 55 | behavior and are expected to take appropriate and fair corrective action in 56 | response to any instances of unacceptable behavior. 57 | 58 | Project maintainers have the right and responsibility to remove, edit, or 59 | reject comments, commits, code, wiki edits, issues, and other contributions 60 | that are not aligned to this Code of Conduct, or to ban temporarily or 61 | permanently any contributor for other behaviors that they deem inappropriate, 62 | threatening, offensive, or harmful. 63 | 64 | ### Scope 65 | 66 | This Code of Conduct applies both within project spaces and in public spaces 67 | when an individual is representing the project or its community. Examples of 68 | representing a project or community include using an official project e-mail 69 | address, posting via an official social media account, or acting as an appointed 70 | representative at an online or offline event. Representation of a project may be 71 | further defined and clarified by project maintainers. 72 | 73 | ### Enforcement 74 | 75 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 76 | reported by contacting the project team at amirhosseinebrahimi77@gmail.com. All 77 | complaints will be reviewed and investigated and will result in a response that 78 | is deemed necessary and appropriate to the circumstances. The project team is 79 | obligated to maintain confidentiality with regard to the reporter of an incident. 80 | Further details of specific enforcement policies may be posted separately. 81 | 82 | Project maintainers who do not follow or enforce the Code of Conduct in good 83 | faith may face temporary or permanent repercussions as determined by other 84 | members of the project's leadership. 85 | 86 | ### Attribution 87 | 88 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 89 | available at [http://contributor-covenant.org/version/1/4][version] 90 | 91 | [homepage]: http://contributor-covenant.org 92 | [version]: http://contributor-covenant.org/version/1/4/ 93 | -------------------------------------------------------------------------------- /src/hooks.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | // @ts-ignore 3 | import { __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from 'react' 4 | import { useStoreContext } from './provider' 5 | import { LogType, Config, ActionsWithoutContext, State } from './types' 6 | import { log, getTarget } from './utils' 7 | 8 | // NOTE: it slightly differs with useMounted, it only wants to trigger un-mount 9 | // event when it is not mounted completely (first pass before render) it consider itself mounted 10 | const useUnmounted = () => { 11 | const unmountedRef = React.useRef(false) 12 | 13 | React.useEffect( 14 | () => () => { 15 | unmountedRef.current = true 16 | }, 17 | [] 18 | ) 19 | return unmountedRef 20 | } 21 | 22 | // This proxy manages tracking what components are looking at 23 | function createPathTracker( 24 | state: State, 25 | tracker: { paths: Set; cache?: WeakMap }, 26 | path: string[] = [] 27 | ) { 28 | // We can not proxy the state itself because that is already a proxy that will be 29 | // revoked, also causing this proxy to be revoked. Also the state protects itself 30 | // with "configurable: false" which creates an invariant 31 | const proxyObject = {} 32 | const proxy = new Proxy(proxyObject, { 33 | // When a property descriptor is asked for we make our proxy object look 34 | // like the state target, preventing any invariant issues 35 | getOwnPropertyDescriptor(_, prop) { 36 | // We only track the current path in the proxy and we have access to root state, 37 | // by reducing the path we quickly get to the property asked for. This is used 38 | // throughout this proxy 39 | const target = getTarget(path, state) 40 | 41 | Object.defineProperty( 42 | proxyObject, 43 | prop, 44 | Object.getOwnPropertyDescriptor(target, prop)! 45 | ) 46 | 47 | // TODO: who grantees that target is object? 48 | return Reflect.getOwnPropertyDescriptor(target as object, prop) 49 | }, 50 | 51 | // Just make sure we proxy the keys from the actual state 52 | ownKeys() { 53 | const target = getTarget(path, state) 54 | return Reflect.ownKeys(target as object) 55 | }, 56 | 57 | get(_, prop) { 58 | const target = getTarget(path, state) as object 59 | 60 | // Don't track symbol 61 | if (typeof prop === 'symbol') { 62 | return target[prop] 63 | } 64 | 65 | const newPath = path.concat(prop as string) 66 | tracker.paths.add(newPath.join('.')) 67 | 68 | // If we are calling a function, for example "map" we bind that to a new 69 | // pathTracker so that we keep proxying the iteration 70 | if (typeof target[prop] === 'function') { 71 | return target[prop].bind(createPathTracker(state, tracker, path)) 72 | } 73 | 74 | // create proxy around array or objects 75 | if (typeof target[prop] === 'object' && target[prop] !== null) { 76 | // Ensure same cached version is returned if it exists 77 | const cached = tracker.cache && tracker.cache.get(target[prop]) 78 | if (cached) return cached 79 | 80 | // Create a new proxy and add it if there is a cache. 81 | // Do not use a cache on targeted state, as that only triggers when the targeted state actually changes 82 | const proxy = createPathTracker(state, tracker, newPath) 83 | 84 | if (tracker.cache) tracker.cache.set(target[prop], proxy) 85 | 86 | return proxy 87 | } 88 | 89 | // return primitive value as normal 90 | return target[prop] 91 | }, 92 | 93 | // Proxy trap to the target state 94 | has(_, prop) { 95 | const target = getTarget(path, state) 96 | 97 | return Reflect.has(target as object, prop) 98 | }, 99 | }) 100 | 101 | return proxy 102 | } 103 | 104 | // For typing support we allow you to create a state hook 105 | export function createStateHook>() { 106 | function useState(cb: (state: C['state']) => T): T 107 | function useState(): C['state'] 108 | function useState() { 109 | // Access the name of the component, for logging and subscription 110 | const { 111 | ReactCurrentOwner, 112 | } = __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED 113 | const name = 114 | ReactCurrentOwner && 115 | ReactCurrentOwner.current && 116 | ReactCurrentOwner.current.elementType && 117 | ReactCurrentOwner.current.elementType.name 118 | 119 | const instance = useStoreContext() 120 | 121 | // Since we deal with immutable values we can use a plain "useState" from 122 | // React to handle updates from the store 123 | const [state, updateState] = React.useState(instance.state) 124 | 125 | // Since our subscription ends async (useEffect) we have to 126 | // make sure we do not update the state during an unMount 127 | const unmountedRef = useUnmounted() 128 | 129 | // We create a track which holds the current paths and also a proxy cache. 130 | // This cache ensures that same objects has the same proxies, which is 131 | // important for comparison in React 132 | const tracker = React.useRef({ 133 | paths: new Set(), 134 | cache: new WeakMap(), 135 | }) 136 | 137 | // We always clear out the paths before rendering, so that 138 | // we can collect new paths 139 | tracker.current.paths.clear() 140 | 141 | // If we are targeting state (nested tracking) that would be a callback as first argument 142 | // to our "useState" hook 143 | const targetState = arguments[0] 144 | 145 | // By default we expose the whole state, though if a callback is received 146 | // this targetPath will be replaced with whatever path we tracked to expose 147 | // a nested state value 148 | let targetPath: string[] = [] 149 | 150 | // If we have a callback to nested state 151 | if (targetState) { 152 | // We create a new SET which will be populated with whatever state 153 | // we point to in the callback 154 | const targetPaths = new Set() 155 | 156 | // By creating a pathTracker we can populate this SET 157 | targetState(createPathTracker(state, { paths: targetPaths })) 158 | 159 | // We only want the last path, as that is the complete path to the value we return 160 | // e.g. useState(state => state.items[0]), we track "items", "items[0]". 161 | // We only want "items[0]" 162 | const lastTrackedPath = Array.from(targetPaths).pop() 163 | 164 | // Then we update our targetPath 165 | targetPath = lastTrackedPath ? lastTrackedPath.split('.') : [] 166 | } 167 | 168 | React.useEffect(() => { 169 | // We subscribe to the accessed paths which causes a new render, 170 | // which again creates a new subscription 171 | return instance.subscribe( 172 | (update) => { 173 | log( 174 | LogType.COMPONENT_RENDER, 175 | `"${name}", tracking "${Array.from(tracker.current.paths).join( 176 | ', ' 177 | )}"` 178 | ) 179 | 180 | // We only update the state if it is actually mounted 181 | if (!unmountedRef.current) updateState(update) 182 | }, 183 | tracker.current.paths, 184 | name 185 | ) 186 | }) 187 | 188 | // Lastly we return a pathTracker around the actual state 189 | // we expose to the component 190 | return targetPath.length 191 | ? createPathTracker(state, tracker.current, targetPath) 192 | : createPathTracker(state, tracker.current) 193 | } 194 | 195 | return useState 196 | } 197 | 198 | // For typing support we allow you to create an actions hook 199 | // It just exposes the actions from the store 200 | export function createActionsHook>() { 201 | // @ts-ignore 202 | return (): ActionsWithoutContext => { 203 | const instance = useStoreContext() 204 | return instance.actions 205 | } 206 | } 207 | 208 | // This hook handles computed state, via reselect 209 | // It subscribes globally (no paths) and will be 210 | // notified about any update to state and calls the selector 211 | // with that state. Since "React.useState" only triggers when 212 | // the value actually changes, we do not have to handle that 213 | export function createComputedHook>() { 214 | return (selector: (state: C['state']) => T): T => { 215 | const instance = useStoreContext() 216 | 217 | const [state, setState] = React.useState(selector(instance.state)) 218 | 219 | // Since our subscription ends async (useEffect) we have to 220 | // make sure we do not update the state during an unmount 221 | const unmountedRef = useUnmounted() 222 | 223 | React.useEffect(() => { 224 | // We subscribe to any update 225 | return instance.subscribe((update) => { 226 | // Since React only renders when this state value 227 | // actually changed, this is enough 228 | if (!unmountedRef.current) setState(selector(update)) 229 | }) 230 | }) 231 | 232 | return state 233 | } 234 | } 235 | 236 | // Default hook if you are not using Typescript 237 | export const useState = createStateHook() 238 | 239 | // Default hook if you are not using Typescript 240 | export const useActions = createActionsHook() 241 | 242 | // Default hook if you are not using Typescript 243 | export const useComputed = createComputedHook() 244 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # immer-store 2 | 3 | ## Project for article 4 | 5 | This project was created related to [this article](https://christianalfoni.com/articles/taking-immer-one-step-further). Please have a read to see what it is all about. 6 | 7 | **!NOTE** This project is not officially released, as it would require more testing and a maintainer. 8 | 9 | ## Motivation 10 | 11 | With the success of [Immer](https://github.com/immerjs/immer) there is no doubt that developers has no problems writing pure code in an impure API. The mutation API of JavaScript is straight forward and expressive, but the default result is impure, going against the immutable model favoured by [React](). With **immer-store** we allow Immer to take even more control and basically gets rid of reducers, dispatching and action creators. 12 | 13 | **Instead of having to write this:** 14 | 15 | ```ts 16 | // action creator 17 | const receiveProducts = (products) => ({ 18 | type: RECEIVE_PRODUCTS, 19 | products 20 | }) 21 | 22 | // thunk 23 | const getProducts = () => async (dispatch) => { 24 | dispatch(receiveProducts(await api.getProducts())) 25 | } 26 | 27 | // reducer 28 | const productsById = produce((draft, action) => { 29 | switch (action.type) { 30 | case RECEIVE_PRODUCTS: 31 | action.products.forEach((product) => { 32 | draft[product.id] = product 33 | }) 34 | return 35 | } 36 | }) 37 | ``` 38 | 39 | **You can just write this:** 40 | 41 | ```ts 42 | const getProducts = async ({ state }, payload) => { 43 | const products = await api.getProducts() 44 | 45 | products.forEach((product) => { 46 | state.products[product.id] = product 47 | }) 48 | } 49 | ``` 50 | 51 | Everything is still **immutable**. 52 | 53 | ## How does it work? 54 | 55 | **immer-store** takes inspiration from the "api"-less API of [overmindjs](https://overmindjs.org). The codebase is rather small and commented, so you can take a dive into that. A quick summary though: 56 | 57 | - With a combination of chosen API and [Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) **immer-store** exposes a state object to your actions that produces Immer drafts under the hood. The concept of a draft is completely hidden from you. You only think actions and state 58 | - It supports changing state asynchronously in your actions 59 | - Because **immer-store** exposes an action API it also has access to the execution of the action and access to state. That means it is able to batch up mutations and notify components at optimal times to render 60 | - Instead of using **selectors** to expose state to components the **useState** hook tracks automatically what state you access and subscribes to it. That means there is no value comparison in every single hook on every mutation, but **immer-store** tells specifically what components needs to update related to matching batched set of mutations 61 | - **immer-store** has a concept of **effects** which is a simple injection mechanism allowing you to separate generic code from your application logic. It also simplifies testing 62 | - The library is written in [Typescript](https://www.typescriptlang.org/) and has excellent support for typing with minimal effort 63 | 64 | ## Get started 65 | 66 | ```jsx 67 | import React from 'react' 68 | import { render } from 'react-dom' 69 | import { createStore, Provider, useState, useActions } from 'immer-store' 70 | 71 | const store = createStore({ 72 | state: { 73 | title: '' 74 | }, 75 | actions: { 76 | changeTitle: ({ state }, title) => { 77 | state.title = title 78 | } 79 | } 80 | }) 81 | 82 | function App() { 83 | const state = useState() 84 | const actions = useActions() 85 | 86 | return ( 87 |
88 |

{state.title}

89 | 92 |
93 | ) 94 | } 95 | 96 | render( 97 | 98 | 99 | , 100 | document.querySelector('#app') 101 | ) 102 | ``` 103 | 104 | ## Scaling up 105 | 106 | As your application grows you want to separate things a bit more. 107 | 108 | ```js 109 | // store/index.js 110 | import * as home from '../pages/home' 111 | import * as issues from '../pages/issues' 112 | 113 | export const config = { 114 | state: { 115 | home: home.state, 116 | issues: issues.state 117 | }, 118 | actions: { 119 | home: home.actions, 120 | issues: issues.actions 121 | } 122 | } 123 | 124 | // index.js 125 | import { createStore } from 'immer-store' 126 | import { config } from './store' 127 | 128 | const store = createStore(config) 129 | ``` 130 | 131 | This structure ensures that you can split up your state and actions into different domains. It also separates the definition of your application from the instantiation of it. That means you can easily reuse the definition multiple times for testing purposes or server side rendering. 132 | 133 | ## Using effects 134 | 135 | Instead of importing 3rd party libraries and writing code with browser side effects etc. **immer-store** allows you to separate it from your application logic in the actions. This creates a cleaner codebase and you get several other benefits: 136 | 137 | 1. All the code in your actions will be domain specific, no low level generic APIs 138 | 2. Your actions will have less code and you avoid leaking out things like URLs, types etc. 139 | 3. You decouple the underlying tool from its usage, meaning that you can replace it at any time without changing your application logic 140 | 4. You can more easily expand the functionality of an effect. For example you want to introduce caching or a base URL to an HTTP effect 141 | 5. You can lazy-load the effect, reducing the initial payload of the app 142 | 143 | So you decide what you application **needs** and then an effect will **provide** it: 144 | 145 | ```js 146 | export const config = { 147 | state: {...}, 148 | actions: {...}, 149 | effects: { 150 | storage: { 151 | get: (key) => { 152 | const value = localStorage.getItem(key) 153 | 154 | return typeof value === 'string' ? JSON.parse(value) : value 155 | }, 156 | set: (key, value) => { 157 | localStorage.setItem(key, JSON.stringify(value)) 158 | } 159 | }, 160 | http: { 161 | get: async (url) => { 162 | const response = fetch(url) 163 | 164 | return response.json() 165 | } 166 | } 167 | } 168 | } 169 | ``` 170 | 171 | **Note!** When using Typescript you have to define your effects as functions (as shown above), not methods. This is common convention, though pointing out it being necessary for typing to work. 172 | 173 | ## Typing 174 | 175 | You got typing straight out of the box with **immer-store**. 176 | 177 | ```ts 178 | const store = createStore({ 179 | state: { 180 | title: '' 181 | }, 182 | actions: { 183 | changeTitle: ({ state }, title: string) => { 184 | state.title = title 185 | } 186 | } 187 | }) 188 | 189 | store.state.foo // string 190 | store.actions.changeTitle // (title: string) => void 191 | ``` 192 | 193 | As you scale up you want to do this: 194 | 195 | ```ts 196 | import { IAction } from 'immer-store' 197 | 198 | import * as home from '../pages/home' 199 | import * as issues from '../pages/issues' 200 | 201 | const state = { 202 | home: home.state, 203 | issues: issues.state 204 | } 205 | 206 | const actions = { 207 | home: home.actions, 208 | issues: issues.actions 209 | } 210 | 211 | const effects = {} 212 | 213 | export const config = { 214 | state, 215 | actions, 216 | effects 217 | } 218 | 219 | // This type can be used within the pages to define actions 220 | export interface Action 221 | extends IAction {} 222 | ``` 223 | 224 | And then in for example **pages/home/** 225 | 226 | ```tsx 227 | /* 228 | ./index.ts 229 | */ 230 | export { state } from './state' 231 | export * as actions from './actions' 232 | export const Home: React.FC = () => {} 233 | 234 | /* 235 | ./state.ts 236 | */ 237 | type State { 238 | title: string 239 | } 240 | 241 | export const state: State = { 242 | title: '' 243 | } 244 | 245 | /* 246 | ./actions.ts 247 | */ 248 | import { Action } from '../store' 249 | 250 | export const changeTitle: Action = ({ state }, title) => { 251 | state.home.title = title 252 | } 253 | ``` 254 | 255 | ## Target state 256 | 257 | Since **immer-store** is tracking what components actually use it has a pretty nice optimization especially useful in lists. You can target a piece of state and then ensure that the component only renders again if that specific piece of state changes. 258 | 259 | ```tsx 260 | function Todo({ id }: { id: string }) { 261 | const todo = useState((state) => state.posts[id]) 262 | const actions = useActions() 263 | 264 | return ( 265 |
  • 266 |

    {todo.title}

    267 | actions.toggleTodo(id)} 270 | /> {todo.description} 271 |
  • 272 | ) 273 | } 274 | ``` 275 | 276 | Since we target the **todo** itself this component will only reconcile again if any of its accessed properties change, for example the **completed** state. If you were to rather pass the todo as a prop also the component passing the todo would need to reconcile on any change of the todo. This is an optimization that only makes sense in big lists where individual state items in the list change. Normally when you want to target state you can just: 277 | 278 | ```tsx 279 | const SomeComponent: React.FC_ = () => { 280 | const { home, issues } = useState() 281 | 282 | return ( 283 | ... 284 | ) 285 | } 286 | ``` 287 | 288 | ## Computed 289 | 290 | **immer-store** includes the [reselect](https://github.com/reduxjs/reselect) library for cached computed state. **immer-store** exposes a **createComputed** and **useCOmputed** hook that allows you to compute state: 291 | 292 | ```tsx 293 | const getTitle = (state) => state.title 294 | const titleUpperCase = createComputed( 295 | [getTitle], 296 | (title) => title.toUpperCase() 297 | ) 298 | 299 | const SomeComponent: React.FC_ = () => { 300 | const title = useComputed(titleUpperCase) 301 | 302 | return ( 303 | ... 304 | ) 305 | } 306 | ``` 307 | 308 | The computed concept is just a tiny wrapper around reselect to manage updates. 309 | 310 | ## Debugging 311 | 312 | **immer-store** knows a lot about your application: 313 | 314 | - It knows what actions are changing what state 315 | - It knows what state all components are looking at 316 | - It knows which component renders related to what state change 317 | 318 | It is possible to increase the insight even more to get a similar development tool experience as [overmindjs](https://overmindjs.org). 319 | 320 | ## What is missing? 321 | 322 | - Immer provides the concept of snapshots and patching. This is available, just not implemented. The question is what kind of API you want. An example would be to expose a default effect which allows you to start tracking changes to a specific state path with a limit of number of changes. Then you could takes these snapshots and patch them back in 323 | -------------------------------------------------------------------------------- /src/index.test.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | createStore, 3 | createStateHook, 4 | Provider, 5 | createComputedHook, 6 | IAction, 7 | createComputed, 8 | } from './' 9 | import * as React from 'react' 10 | import * as renderer from 'react-test-renderer' 11 | 12 | const waitForUseEffect = () => new Promise((resolve) => setTimeout(resolve)) 13 | 14 | describe('React', () => { 15 | test('should allow using hooks', async () => { 16 | let renderCount = 0 17 | const config = { 18 | state: { 19 | foo: 'bar', 20 | }, 21 | actions: { 22 | updateFoo: ({ state }) => { 23 | state.foo += '!' 24 | }, 25 | }, 26 | } 27 | const useState = createStateHook() 28 | const store = createStore(config) 29 | const FooComponent: React.FunctionComponent = () => { 30 | const state = useState() 31 | 32 | renderCount++ 33 | 34 | return

    {state.foo}

    35 | } 36 | 37 | const tree = renderer.create( 38 | 39 | 40 | 41 | ) 42 | 43 | expect(renderCount).toBe(1) 44 | 45 | await renderer.act(async () => { 46 | await waitForUseEffect() 47 | store.actions.updateFoo() 48 | }) 49 | 50 | expect(renderCount).toBe(2) 51 | expect(tree.toJSON()).toMatchSnapshot() 52 | }) 53 | test('should handle arrays', async () => { 54 | const config = { 55 | state: { 56 | foo: ['foo', 'bar'], 57 | }, 58 | actions: { 59 | updateFoo: ({ state }) => { 60 | state.foo.push('baz') 61 | }, 62 | }, 63 | } 64 | const useState = createStateHook() 65 | const store = createStore(config) 66 | const FooComponent: React.FunctionComponent = () => { 67 | const state = useState() 68 | 69 | return ( 70 |
      71 | {state.foo.map((text) => ( 72 |
    • {text}
    • 73 | ))} 74 |
    75 | ) 76 | } 77 | 78 | const tree = renderer.create( 79 | 80 | 81 | 82 | ) 83 | 84 | expect(tree).toMatchSnapshot() 85 | 86 | await renderer.act(async () => { 87 | await waitForUseEffect() 88 | store.actions.updateFoo() 89 | }) 90 | 91 | expect(tree.toJSON()).toMatchSnapshot() 92 | }) 93 | test('should handle objects', async () => { 94 | const config = { 95 | state: { 96 | foo: { 97 | foo: 'bar', 98 | bar: 'baz', 99 | baz: 'boing', 100 | }, 101 | }, 102 | actions: { 103 | updateFoo: ({ state }) => { 104 | Object.keys(state.foo).forEach((key) => { 105 | state.foo[key] = state.foo[key].toUpperCase() 106 | }) 107 | }, 108 | }, 109 | } 110 | const useState = createStateHook() 111 | const store = createStore(config) 112 | const FooComponent: React.FunctionComponent = () => { 113 | const state = useState() 114 | 115 | return ( 116 |
      117 | {Object.values(state.foo).map((text) => ( 118 |
    • {text}
    • 119 | ))} 120 |
    121 | ) 122 | } 123 | 124 | const tree = renderer.create( 125 | 126 | 127 | 128 | ) 129 | 130 | expect(tree).toMatchSnapshot() 131 | 132 | await renderer.act(async () => { 133 | await waitForUseEffect() 134 | store.actions.updateFoo() 135 | }) 136 | 137 | expect(tree.toJSON()).toMatchSnapshot() 138 | }) 139 | test('should render on object add and remove', async () => { 140 | const addFoo: Action = ({ state }) => { 141 | state.object.foo = 'bar' 142 | } 143 | 144 | const removeFoo: Action = ({ state }) => { 145 | delete state.object.foo 146 | } 147 | 148 | const config = { 149 | state: { 150 | object: {} as { [key: string]: string }, 151 | }, 152 | actions: { 153 | addFoo, 154 | removeFoo, 155 | }, 156 | } 157 | 158 | interface Action extends IAction {} 159 | 160 | const useState = createStateHook() 161 | const store = createStore(config) 162 | const FooComponent: React.FunctionComponent = () => { 163 | const state = useState() 164 | 165 | return

    {state.object.foo ? state.object.foo : 'does not exist'}

    166 | } 167 | 168 | const tree = renderer.create( 169 | 170 | 171 | 172 | ) 173 | 174 | expect(tree).toMatchSnapshot() 175 | 176 | await renderer.act(async () => { 177 | await waitForUseEffect() 178 | store.actions.addFoo() 179 | }) 180 | 181 | expect(tree.toJSON()).toMatchSnapshot() 182 | 183 | await renderer.act(async () => { 184 | await waitForUseEffect() 185 | store.actions.removeFoo() 186 | }) 187 | 188 | expect(tree.toJSON()).toMatchSnapshot() 189 | }) 190 | 191 | test('should target state', async () => { 192 | const config = { 193 | state: { 194 | foo: [ 195 | { 196 | title: 'foo', 197 | }, 198 | ], 199 | }, 200 | actions: { 201 | updateFoo: async ({ state }) => { 202 | const item = state.foo[0] 203 | item.title = 'foo2' 204 | await Promise.resolve() 205 | item.title = 'foo3' 206 | }, 207 | }, 208 | } 209 | const useState = createStateHook() 210 | const store = createStore(config) 211 | const Item: React.FunctionComponent<{ index: number }> = ({ index }) => { 212 | const item = useState((state) => state.foo[index]) 213 | 214 | return
  • {item.title}
  • 215 | } 216 | const FooComponent: React.FunctionComponent = () => { 217 | const state = useState() 218 | 219 | return ( 220 |
      221 | {state.foo.map((item, index) => ( 222 | 223 | ))} 224 |
    225 | ) 226 | } 227 | 228 | const tree = renderer.create( 229 | 230 | 231 | 232 | ) 233 | 234 | expect(tree).toMatchSnapshot() 235 | 236 | let promise 237 | await renderer.act(async () => { 238 | await waitForUseEffect() 239 | promise = store.actions.updateFoo() 240 | await Promise.resolve() 241 | expect(tree.toJSON()).toMatchSnapshot() 242 | }) 243 | await renderer.act(async () => { 244 | await promise 245 | expect(tree.toJSON()).toMatchSnapshot() 246 | }) 247 | 248 | expect(false) 249 | }) 250 | 251 | test('should allow async changes', async () => { 252 | const config = { 253 | state: { 254 | foo: ['foo', 'bar'], 255 | }, 256 | actions: { 257 | updateFoo: async ({ state }) => { 258 | state.foo[0] += '2' 259 | await Promise.resolve() 260 | state.foo[0] += '3' 261 | }, 262 | }, 263 | } 264 | 265 | const useState = createStateHook() 266 | const store = createStore(config) 267 | const FooComponent: React.FunctionComponent = () => { 268 | const state = useState() 269 | 270 | return ( 271 |
      272 | {state.foo.map((text) => ( 273 |
    • {text}
    • 274 | ))} 275 |
    276 | ) 277 | } 278 | 279 | const tree = renderer.create( 280 | 281 | 282 | 283 | ) 284 | 285 | expect(tree).toMatchSnapshot() 286 | 287 | let promise 288 | await renderer.act(async () => { 289 | await waitForUseEffect() 290 | promise = store.actions.updateFoo() 291 | await Promise.resolve() 292 | expect(tree.toJSON()).toMatchSnapshot() 293 | }) 294 | await renderer.act(async () => { 295 | await promise 296 | expect(tree.toJSON()).toMatchSnapshot() 297 | }) 298 | 299 | expect(tree.toJSON()).toMatchSnapshot() 300 | }) 301 | test('should handle cross async action changes', async () => { 302 | const config = { 303 | state: { 304 | foo: 'bar', 305 | }, 306 | actions: { 307 | updateFoo: async ({ state }) => { 308 | state.foo += '1' 309 | await new Promise((resolve) => setTimeout(resolve)) 310 | state.foo += '1' 311 | }, 312 | updateFoo2: async ({ state }) => { 313 | await Promise.resolve() 314 | state.foo += '2' 315 | }, 316 | }, 317 | } 318 | 319 | const useState = createStateHook() 320 | const store = createStore(config) 321 | const FooComponent: React.FunctionComponent = () => { 322 | const state = useState() 323 | 324 | return

    {state.foo}

    325 | } 326 | 327 | const tree = renderer.create( 328 | 329 | 330 | 331 | ) 332 | 333 | await renderer.act(async () => { 334 | await waitForUseEffect() 335 | return Promise.all([ 336 | store.actions.updateFoo(), 337 | store.actions.updateFoo2(), 338 | ]) 339 | }) 340 | 341 | expect(tree.toJSON()).toMatchSnapshot() 342 | }) 343 | test('should allow usage of computed', async () => { 344 | const config = { 345 | state: { 346 | foo: ['foo', 'bar'], 347 | }, 348 | actions: { 349 | updateFoo: ({ state }) => { 350 | state.foo.push('baz') 351 | }, 352 | }, 353 | } 354 | 355 | const useComputed = createComputedHook() 356 | const store = createStore(config) 357 | 358 | const getFoo = (state: typeof config['state']) => state.foo 359 | const upperFooSelector = createComputed([getFoo], (foo) => 360 | foo.map((text) => text.toUpperCase()) 361 | ) 362 | 363 | const FooComponent: React.FunctionComponent = () => { 364 | const upperFoo = useComputed(upperFooSelector) 365 | 366 | return ( 367 |
      368 | {upperFoo.map((text) => ( 369 |
    • {text}
    • 370 | ))} 371 |
    372 | ) 373 | } 374 | 375 | const tree = renderer.create( 376 | 377 | 378 | 379 | ) 380 | 381 | expect(tree).toMatchSnapshot() 382 | 383 | await renderer.act(async () => { 384 | await waitForUseEffect() 385 | store.actions.updateFoo() 386 | }) 387 | 388 | expect(tree.toJSON()).toMatchSnapshot() 389 | }) 390 | test('should keep reference on proxies when same object to manage comparison', async () => { 391 | let objectRenderCount = 0 392 | const config = { 393 | state: { 394 | foo: 'bar', 395 | objects: [{}], 396 | }, 397 | actions: { 398 | updateFoo: ({ state }) => { 399 | state.foo = 'bar2' 400 | }, 401 | }, 402 | } 403 | 404 | const useState = createStateHook() 405 | const store = createStore(config) 406 | const ObjectComponent = React.memo<{ object: object }>(({ object }) => { 407 | objectRenderCount++ 408 | 409 | return
    410 | }) 411 | const FooComponent: React.FunctionComponent = () => { 412 | const state = useState() 413 | 414 | return ( 415 |
    416 |

    {state.foo}

    417 | {state.objects.map((object, index) => ( 418 | 419 | ))} 420 |
    421 | ) 422 | } 423 | 424 | renderer.create( 425 | 426 | 427 | 428 | ) 429 | 430 | await renderer.act(async () => { 431 | await waitForUseEffect() 432 | store.actions.updateFoo() 433 | }) 434 | 435 | expect(objectRenderCount).toBe(1) 436 | }) 437 | }) 438 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { createDraft, finishDraft, Immutable, Draft } from 'immer' 2 | import { createSelector } from 'reselect' 3 | import { 4 | State, 5 | LogType, 6 | BaseActions, 7 | BaseEffects, 8 | Store, 9 | Config, 10 | Options, 11 | } from './types' 12 | import { log, configureUtils, getTarget } from './utils' 13 | 14 | export { 15 | createStateHook, 16 | createActionsHook, 17 | createComputedHook, 18 | useState, 19 | useActions, 20 | useComputed, 21 | } from './hooks' 22 | export { Provider } from './provider' 23 | export { IAction } from './types' 24 | 25 | export const GET_BASE_STATE = Symbol('GET_BASE_STATE') 26 | 27 | // @ts-ignore 28 | export const createComputed: typeof createSelector = (...args: any[]) => { 29 | // @ts-ignore 30 | const selector = createSelector(...args) 31 | 32 | return (state: object) => selector(state[GET_BASE_STATE] || state) 33 | } 34 | 35 | // Used to give debugging information about what type of mutations 36 | // are being performed 37 | const arrayMutations = new Set([ 38 | 'push', 39 | 'shift', 40 | 'pop', 41 | 'unshift', 42 | 'splice', 43 | 'reverse', 44 | 'sort', 45 | 'copyWithin', 46 | ]) 47 | 48 | // Finishes the draft passed in and produces a SET of 49 | // state paths affected by this draft. This will be used 50 | // to match any paths subscribed to by components 51 | function getNewStateAndChangedPaths(draft: Draft) { 52 | const paths = new Set() 53 | 54 | const newState = finishDraft(draft, (operations) => { 55 | operations.forEach((operation) => { 56 | // When a key/index is added to (removed from) an object/array the path to the object/array itself changes 57 | if (operation.op !== 'replace') { 58 | paths.add(operation.path.slice(0, operation.path.length - 1).join('.')) 59 | } 60 | paths.add(operation.path.join('.')) 61 | }) 62 | }) 63 | 64 | return { newState, paths } 65 | } 66 | 67 | // Creates a nested structure and handling functions with a factory 68 | // Used to create actions 69 | function createNestedStructure( 70 | structure: object, 71 | factory: (target: object, key: string, path: string, func: Function) => any, 72 | path: string[] = [] 73 | ) { 74 | return Object.keys(structure).reduce((aggr, key) => { 75 | const funcOrNested = structure[key] 76 | const newPath = path.concat(key) 77 | 78 | if (typeof funcOrNested === 'function') { 79 | return factory(aggr, key, newPath.join('.'), funcOrNested) 80 | } 81 | 82 | return Object.assign(aggr, { 83 | [key]: createNestedStructure(funcOrNested, factory, newPath), 84 | }) 85 | }, {}) 86 | } 87 | 88 | // Creates the store itself by preparing the state, converting actions to callable 89 | // functions and manage their execution to notify state changes 90 | export function createStore< 91 | S extends State, 92 | E extends BaseEffects, 93 | A extends BaseActions 94 | >(config: Config, options: Options = { debug: true }): Store { 95 | // We force disable debugging in production and in test 96 | if ( 97 | process.env.NODE_ENV === 'production' || 98 | process.env.NODE_ENV === 'test' 99 | ) { 100 | options.debug = false 101 | } 102 | 103 | configureUtils(options) 104 | 105 | // We create the initial immutable state 106 | let currentState = finishDraft(createDraft(config.state)) 107 | 108 | // These listeners are for components, which subscribes to paths 109 | const pathListeners = {} 110 | 111 | // These listeners are for computed which subscribes to any update 112 | const globalListeners: Function[] = [] 113 | 114 | // Allows components to subscribe by passing in the paths they are tracking, 115 | // also computed subscribes here, though without paths 116 | function subscribe( 117 | update: (state: Immutable>) => void, 118 | paths?: Set, 119 | name?: string 120 | ) { 121 | // When a component listens to specific paths we create a subscription 122 | if (paths) { 123 | const currentPaths = Array.from(paths) 124 | const subscription = { update, name } 125 | // The created subscription is added to each path 126 | // that it is interested 127 | currentPaths.forEach((path) => { 128 | if (!pathListeners[path]) { 129 | pathListeners[path] = [] 130 | } 131 | pathListeners[path].push(subscription) 132 | }) 133 | 134 | // We return a dispose function to remove the subscription from the paths 135 | return () => { 136 | currentPaths.forEach((path) => { 137 | pathListeners[path].splice( 138 | pathListeners[path].indexOf(subscription), 139 | 1 140 | ) 141 | }) 142 | } 143 | } else { 144 | // Computed just listens to any update as it uses immutability to compare values 145 | globalListeners.push(update) 146 | 147 | return () => { 148 | globalListeners.splice(globalListeners.indexOf(update), 1) 149 | } 150 | } 151 | } 152 | 153 | // Is used when mutations has been tracked and any subscribers should be notified 154 | function updateListeners(paths: Set) { 155 | const listenersNotified = new Set() 156 | 157 | // We trigger path subscribers, components 158 | paths.forEach((path) => { 159 | if (pathListeners[path]) { 160 | pathListeners[path].forEach((subscription) => { 161 | if (!listenersNotified.has(subscription)) { 162 | listenersNotified.add(subscription) 163 | subscription.update(currentState) 164 | } 165 | }) 166 | } 167 | }) 168 | 169 | // We trigger global subscribers, computed 170 | globalListeners.forEach((update) => update(currentState)) 171 | } 172 | 173 | // Creates a new version of the state and passes any paths 174 | // affected to notify subscribers 175 | function flushMutations(draft: Draft) { 176 | const { newState, paths } = getNewStateAndChangedPaths(draft) 177 | currentState = newState 178 | if (paths.size) { 179 | log( 180 | LogType.FLUSH, 181 | `the following paths: "${Array.from(paths).join(', ')}"` 182 | ) 183 | updateListeners(paths) 184 | } else { 185 | log(LogType.FLUSH, `but no paths changed`) 186 | } 187 | } 188 | 189 | // We keep track of the current draft globally. This ensures that all actions 190 | // always points to the latest draft produced, even when running async 191 | // FIXME: Why it needs extra casting, it may cause problem by being Immutable> at the time 192 | let currentDraft = createDraft(currentState as S) 193 | 194 | // This is the factory for creating actions. It wraps the action from the 195 | // developer and injects state and effects. It also manages draft updates 196 | function createAction( 197 | target: object, 198 | key: string, 199 | name: string, 200 | func: (...args) => any 201 | ) { 202 | target[key] = (payload) => { 203 | // We want to schedule an async update of the draft whenever 204 | // a mutation occurs. This just ensures that a new draft is ready 205 | // when the action continues running. We do not want to create 206 | // it multiple times though, so we keep a flag to ensure we only 207 | // trigger it once per cycle 208 | let isAsync = false 209 | 210 | // We also want a flag to indicate that the action is done running, this 211 | // ensure any async draft requests are prevented when there is no need for one 212 | let hasExecuted = false 213 | 214 | // This function indicates that mutations may have been performed 215 | // and it is time to flush out mutations and create a new draft 216 | function next() { 217 | if (hasExecuted) { 218 | return 219 | } 220 | 221 | flushMutations(currentDraft) 222 | currentDraft = createDraft(currentState as S) 223 | isAsync = false 224 | } 225 | 226 | // Whenever a mutation is performed we trigger this function. We use 227 | // a mutation to indicate this as we might have multiple async steps 228 | // and only hook to know when a draft is due is to prepare creation of the 229 | // next draft when working on the current one 230 | function asyncNext() { 231 | if (isAsync) { 232 | return 233 | } 234 | 235 | isAsync = true 236 | Promise.resolve().then(next) 237 | } 238 | 239 | // This function is called when the action is done execution 240 | // Just flush out all mutations and prepare a new draft for 241 | // any next action being triggered 242 | function finish() { 243 | next() 244 | hasExecuted = true 245 | } 246 | 247 | // This is the proxy the manages the drafts 248 | function createDraftProxy(path: string[] = []) { 249 | // We proxy an empty object as proxying the draft itself will 250 | // cause revoke/invariant issues 251 | const proxy = new Proxy( 252 | {}, 253 | { 254 | // Just a proxy trap needed to target draft state 255 | getOwnPropertyDescriptor(_, prop) { 256 | // We only keep track of the path in this proxy and then 257 | // use that path on the current draft to grab the current draft state 258 | const target = getTarget(path, currentDraft) 259 | 260 | return Reflect.getOwnPropertyDescriptor(target as object, prop) 261 | }, 262 | // Just a proxy trap needed to target draft state 263 | ownKeys() { 264 | const target = getTarget(path, currentDraft) 265 | 266 | return Reflect.ownKeys(target as object) 267 | }, 268 | get(_, prop) { 269 | // Related to using computed in an action we rather want to use 270 | // the base immutable state. We do not want to allow mutations inside 271 | // a computed and the returned result should not be mutated either 272 | if (prop === GET_BASE_STATE) { 273 | return currentState 274 | } 275 | 276 | const target = getTarget(path, currentDraft) as object 277 | 278 | // We do not need to handle symbols 279 | if (typeof prop === 'symbol') { 280 | return target[prop] 281 | } 282 | 283 | // We produce the new path 284 | const newPath = path.concat(prop as string) 285 | 286 | // If we point to a function we need to handle that by 287 | // returning a new function which manages a couple of things 288 | if (typeof target[prop] === 'function') { 289 | return (...args) => { 290 | // If we are performing a mutation, which happens 291 | // to arrays, we want to handle that 292 | if (arrayMutations.has(prop.toString())) { 293 | // First by preparing for a new async draft, as this is a mutation 294 | asyncNext() 295 | log( 296 | LogType.MUTATION, 297 | `${name} did a ${prop 298 | .toString() 299 | .toUpperCase()} on path "${path.join('.')}"`, 300 | ...args 301 | ) 302 | } 303 | 304 | // Then we bind the call of the function to a new draftProxy so 305 | // that we keep proxying 306 | return target[prop].call(createDraftProxy(path), ...args) 307 | } 308 | } 309 | 310 | // If object, array or function we return it in a wrapped proxy 311 | if (typeof target[prop] === 'object' && target[prop] !== null) { 312 | return createDraftProxy(newPath) 313 | } 314 | 315 | // Or we just return the value 316 | return target[prop] 317 | }, 318 | // This is a proxy trap for assigning values, where we want to perform 319 | // the assignment on the draft target and also prepare async draft 320 | set(_, prop, value) { 321 | const target = getTarget(path, currentDraft) 322 | 323 | asyncNext() 324 | log( 325 | LogType.MUTATION, 326 | `${name} did a SET on path "${path.join('.')}"`, 327 | value 328 | ) 329 | return Reflect.set(target as object, prop, value) 330 | }, 331 | // This is a proxy trap for deleting values, same stuff 332 | deleteProperty(_, prop) { 333 | const target = getTarget(path, currentDraft) 334 | 335 | asyncNext() 336 | log( 337 | LogType.MUTATION, 338 | `${name} did a DELETE on path "${path.join('.')}"` 339 | ) 340 | return Reflect.deleteProperty(target as object, prop) 341 | }, 342 | // Just a trap we need to handle 343 | has(_, prop) { 344 | const target = getTarget(path, currentDraft) 345 | 346 | return Reflect.has(target as object, prop) 347 | }, 348 | } 349 | ) 350 | 351 | return proxy 352 | } 353 | 354 | // We call the defined function passing in the "context" 355 | const actionResult = func( 356 | { 357 | state: createDraftProxy(), 358 | // We also pass in the effects. We could also use a proxy here to 359 | // track execution of effects, useful for debugging 360 | effects: config.effects, 361 | }, 362 | // And we pass whatever payload was passed to the original action 363 | payload 364 | ) 365 | 366 | // If the action returns a promise (probably async) we wait for it to finish. 367 | // This indicates that it is time to flush out any mutations and indicate a 368 | // stop of execution 369 | if (actionResult instanceof Promise) { 370 | actionResult 371 | .then(() => { 372 | finish() 373 | }) 374 | .catch(() => console.log('error', name)) 375 | } else { 376 | // If action stops synchronously we immediately finish up 377 | // as those mutations needs to be notified to components. 378 | // Basically handles inputs. A change to an input must run 379 | // completely synchronously. That means you can never change 380 | // the value of an input in your state store with async/await. 381 | // Not special for this library, just the way it is 382 | finish() 383 | } 384 | 385 | return actionResult 386 | } 387 | 388 | return target 389 | } 390 | 391 | const actions = config.actions || {} 392 | 393 | return { 394 | // Exposes the immutable state on the instance 395 | get state() { 396 | return currentState 397 | }, 398 | subscribe, 399 | actions: createNestedStructure(actions, createAction), 400 | } 401 | } 402 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": 6 | version "7.14.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 8 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 9 | dependencies: 10 | "@babel/highlight" "^7.14.5" 11 | 12 | "@babel/compat-data@^7.14.5": 13 | version "7.14.7" 14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" 15 | integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== 16 | 17 | "@babel/core@^7.1.0": 18 | version "7.14.6" 19 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" 20 | integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== 21 | dependencies: 22 | "@babel/code-frame" "^7.14.5" 23 | "@babel/generator" "^7.14.5" 24 | "@babel/helper-compilation-targets" "^7.14.5" 25 | "@babel/helper-module-transforms" "^7.14.5" 26 | "@babel/helpers" "^7.14.6" 27 | "@babel/parser" "^7.14.6" 28 | "@babel/template" "^7.14.5" 29 | "@babel/traverse" "^7.14.5" 30 | "@babel/types" "^7.14.5" 31 | convert-source-map "^1.7.0" 32 | debug "^4.1.0" 33 | gensync "^1.0.0-beta.2" 34 | json5 "^2.1.2" 35 | semver "^6.3.0" 36 | source-map "^0.5.0" 37 | 38 | "@babel/generator@^7.14.5", "@babel/generator@^7.4.0": 39 | version "7.14.5" 40 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" 41 | integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== 42 | dependencies: 43 | "@babel/types" "^7.14.5" 44 | jsesc "^2.5.1" 45 | source-map "^0.5.0" 46 | 47 | "@babel/helper-compilation-targets@^7.14.5": 48 | version "7.14.5" 49 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" 50 | integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== 51 | dependencies: 52 | "@babel/compat-data" "^7.14.5" 53 | "@babel/helper-validator-option" "^7.14.5" 54 | browserslist "^4.16.6" 55 | semver "^6.3.0" 56 | 57 | "@babel/helper-function-name@^7.14.5": 58 | version "7.14.5" 59 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" 60 | integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== 61 | dependencies: 62 | "@babel/helper-get-function-arity" "^7.14.5" 63 | "@babel/template" "^7.14.5" 64 | "@babel/types" "^7.14.5" 65 | 66 | "@babel/helper-get-function-arity@^7.14.5": 67 | version "7.14.5" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" 69 | integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== 70 | dependencies: 71 | "@babel/types" "^7.14.5" 72 | 73 | "@babel/helper-hoist-variables@^7.14.5": 74 | version "7.14.5" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" 76 | integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== 77 | dependencies: 78 | "@babel/types" "^7.14.5" 79 | 80 | "@babel/helper-member-expression-to-functions@^7.14.5": 81 | version "7.14.7" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" 83 | integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== 84 | dependencies: 85 | "@babel/types" "^7.14.5" 86 | 87 | "@babel/helper-module-imports@^7.14.5": 88 | version "7.14.5" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" 90 | integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== 91 | dependencies: 92 | "@babel/types" "^7.14.5" 93 | 94 | "@babel/helper-module-transforms@^7.14.5": 95 | version "7.14.5" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" 97 | integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== 98 | dependencies: 99 | "@babel/helper-module-imports" "^7.14.5" 100 | "@babel/helper-replace-supers" "^7.14.5" 101 | "@babel/helper-simple-access" "^7.14.5" 102 | "@babel/helper-split-export-declaration" "^7.14.5" 103 | "@babel/helper-validator-identifier" "^7.14.5" 104 | "@babel/template" "^7.14.5" 105 | "@babel/traverse" "^7.14.5" 106 | "@babel/types" "^7.14.5" 107 | 108 | "@babel/helper-optimise-call-expression@^7.14.5": 109 | version "7.14.5" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" 111 | integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== 112 | dependencies: 113 | "@babel/types" "^7.14.5" 114 | 115 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": 116 | version "7.14.5" 117 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" 118 | integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== 119 | 120 | "@babel/helper-replace-supers@^7.14.5": 121 | version "7.14.5" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" 123 | integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== 124 | dependencies: 125 | "@babel/helper-member-expression-to-functions" "^7.14.5" 126 | "@babel/helper-optimise-call-expression" "^7.14.5" 127 | "@babel/traverse" "^7.14.5" 128 | "@babel/types" "^7.14.5" 129 | 130 | "@babel/helper-simple-access@^7.14.5": 131 | version "7.14.5" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" 133 | integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== 134 | dependencies: 135 | "@babel/types" "^7.14.5" 136 | 137 | "@babel/helper-split-export-declaration@^7.14.5": 138 | version "7.14.5" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" 140 | integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== 141 | dependencies: 142 | "@babel/types" "^7.14.5" 143 | 144 | "@babel/helper-validator-identifier@^7.14.5": 145 | version "7.14.5" 146 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" 147 | integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== 148 | 149 | "@babel/helper-validator-option@^7.14.5": 150 | version "7.14.5" 151 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" 152 | integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== 153 | 154 | "@babel/helpers@^7.14.6": 155 | version "7.14.6" 156 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" 157 | integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== 158 | dependencies: 159 | "@babel/template" "^7.14.5" 160 | "@babel/traverse" "^7.14.5" 161 | "@babel/types" "^7.14.5" 162 | 163 | "@babel/highlight@^7.14.5": 164 | version "7.14.5" 165 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 166 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 167 | dependencies: 168 | "@babel/helper-validator-identifier" "^7.14.5" 169 | chalk "^2.0.0" 170 | js-tokens "^4.0.0" 171 | 172 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.4.3": 173 | version "7.14.7" 174 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" 175 | integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== 176 | 177 | "@babel/plugin-syntax-object-rest-spread@^7.0.0": 178 | version "7.8.3" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 180 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.8.0" 183 | 184 | "@babel/template@^7.14.5", "@babel/template@^7.4.0": 185 | version "7.14.5" 186 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" 187 | integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== 188 | dependencies: 189 | "@babel/code-frame" "^7.14.5" 190 | "@babel/parser" "^7.14.5" 191 | "@babel/types" "^7.14.5" 192 | 193 | "@babel/traverse@^7.1.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.4.3": 194 | version "7.14.7" 195 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" 196 | integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== 197 | dependencies: 198 | "@babel/code-frame" "^7.14.5" 199 | "@babel/generator" "^7.14.5" 200 | "@babel/helper-function-name" "^7.14.5" 201 | "@babel/helper-hoist-variables" "^7.14.5" 202 | "@babel/helper-split-export-declaration" "^7.14.5" 203 | "@babel/parser" "^7.14.7" 204 | "@babel/types" "^7.14.5" 205 | debug "^4.1.0" 206 | globals "^11.1.0" 207 | 208 | "@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.4.0": 209 | version "7.14.5" 210 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" 211 | integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== 212 | dependencies: 213 | "@babel/helper-validator-identifier" "^7.14.5" 214 | to-fast-properties "^2.0.0" 215 | 216 | "@cnakazawa/watch@^1.0.3": 217 | version "1.0.4" 218 | resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" 219 | integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== 220 | dependencies: 221 | exec-sh "^0.3.2" 222 | minimist "^1.2.0" 223 | 224 | "@jest/console@^24.7.1", "@jest/console@^24.9.0": 225 | version "24.9.0" 226 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" 227 | integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== 228 | dependencies: 229 | "@jest/source-map" "^24.9.0" 230 | chalk "^2.0.1" 231 | slash "^2.0.0" 232 | 233 | "@jest/core@^24.9.0": 234 | version "24.9.0" 235 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" 236 | integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== 237 | dependencies: 238 | "@jest/console" "^24.7.1" 239 | "@jest/reporters" "^24.9.0" 240 | "@jest/test-result" "^24.9.0" 241 | "@jest/transform" "^24.9.0" 242 | "@jest/types" "^24.9.0" 243 | ansi-escapes "^3.0.0" 244 | chalk "^2.0.1" 245 | exit "^0.1.2" 246 | graceful-fs "^4.1.15" 247 | jest-changed-files "^24.9.0" 248 | jest-config "^24.9.0" 249 | jest-haste-map "^24.9.0" 250 | jest-message-util "^24.9.0" 251 | jest-regex-util "^24.3.0" 252 | jest-resolve "^24.9.0" 253 | jest-resolve-dependencies "^24.9.0" 254 | jest-runner "^24.9.0" 255 | jest-runtime "^24.9.0" 256 | jest-snapshot "^24.9.0" 257 | jest-util "^24.9.0" 258 | jest-validate "^24.9.0" 259 | jest-watcher "^24.9.0" 260 | micromatch "^3.1.10" 261 | p-each-series "^1.0.0" 262 | realpath-native "^1.1.0" 263 | rimraf "^2.5.4" 264 | slash "^2.0.0" 265 | strip-ansi "^5.0.0" 266 | 267 | "@jest/environment@^24.9.0": 268 | version "24.9.0" 269 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" 270 | integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== 271 | dependencies: 272 | "@jest/fake-timers" "^24.9.0" 273 | "@jest/transform" "^24.9.0" 274 | "@jest/types" "^24.9.0" 275 | jest-mock "^24.9.0" 276 | 277 | "@jest/fake-timers@^24.9.0": 278 | version "24.9.0" 279 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" 280 | integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== 281 | dependencies: 282 | "@jest/types" "^24.9.0" 283 | jest-message-util "^24.9.0" 284 | jest-mock "^24.9.0" 285 | 286 | "@jest/reporters@^24.9.0": 287 | version "24.9.0" 288 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" 289 | integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== 290 | dependencies: 291 | "@jest/environment" "^24.9.0" 292 | "@jest/test-result" "^24.9.0" 293 | "@jest/transform" "^24.9.0" 294 | "@jest/types" "^24.9.0" 295 | chalk "^2.0.1" 296 | exit "^0.1.2" 297 | glob "^7.1.2" 298 | istanbul-lib-coverage "^2.0.2" 299 | istanbul-lib-instrument "^3.0.1" 300 | istanbul-lib-report "^2.0.4" 301 | istanbul-lib-source-maps "^3.0.1" 302 | istanbul-reports "^2.2.6" 303 | jest-haste-map "^24.9.0" 304 | jest-resolve "^24.9.0" 305 | jest-runtime "^24.9.0" 306 | jest-util "^24.9.0" 307 | jest-worker "^24.6.0" 308 | node-notifier "^5.4.2" 309 | slash "^2.0.0" 310 | source-map "^0.6.0" 311 | string-length "^2.0.0" 312 | 313 | "@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": 314 | version "24.9.0" 315 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" 316 | integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== 317 | dependencies: 318 | callsites "^3.0.0" 319 | graceful-fs "^4.1.15" 320 | source-map "^0.6.0" 321 | 322 | "@jest/test-result@^24.9.0": 323 | version "24.9.0" 324 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" 325 | integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== 326 | dependencies: 327 | "@jest/console" "^24.9.0" 328 | "@jest/types" "^24.9.0" 329 | "@types/istanbul-lib-coverage" "^2.0.0" 330 | 331 | "@jest/test-sequencer@^24.9.0": 332 | version "24.9.0" 333 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" 334 | integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== 335 | dependencies: 336 | "@jest/test-result" "^24.9.0" 337 | jest-haste-map "^24.9.0" 338 | jest-runner "^24.9.0" 339 | jest-runtime "^24.9.0" 340 | 341 | "@jest/transform@^24.9.0": 342 | version "24.9.0" 343 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" 344 | integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== 345 | dependencies: 346 | "@babel/core" "^7.1.0" 347 | "@jest/types" "^24.9.0" 348 | babel-plugin-istanbul "^5.1.0" 349 | chalk "^2.0.1" 350 | convert-source-map "^1.4.0" 351 | fast-json-stable-stringify "^2.0.0" 352 | graceful-fs "^4.1.15" 353 | jest-haste-map "^24.9.0" 354 | jest-regex-util "^24.9.0" 355 | jest-util "^24.9.0" 356 | micromatch "^3.1.10" 357 | pirates "^4.0.1" 358 | realpath-native "^1.1.0" 359 | slash "^2.0.0" 360 | source-map "^0.6.1" 361 | write-file-atomic "2.4.1" 362 | 363 | "@jest/types@^24.9.0": 364 | version "24.9.0" 365 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" 366 | integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== 367 | dependencies: 368 | "@types/istanbul-lib-coverage" "^2.0.0" 369 | "@types/istanbul-reports" "^1.1.1" 370 | "@types/yargs" "^13.0.0" 371 | 372 | "@types/babel__core@^7.1.0": 373 | version "7.1.14" 374 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" 375 | integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== 376 | dependencies: 377 | "@babel/parser" "^7.1.0" 378 | "@babel/types" "^7.0.0" 379 | "@types/babel__generator" "*" 380 | "@types/babel__template" "*" 381 | "@types/babel__traverse" "*" 382 | 383 | "@types/babel__generator@*": 384 | version "7.6.2" 385 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" 386 | integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== 387 | dependencies: 388 | "@babel/types" "^7.0.0" 389 | 390 | "@types/babel__template@*": 391 | version "7.4.0" 392 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" 393 | integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== 394 | dependencies: 395 | "@babel/parser" "^7.1.0" 396 | "@babel/types" "^7.0.0" 397 | 398 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 399 | version "7.14.0" 400 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.0.tgz#a34277cf8acbd3185ea74129e1f100491eb1da7f" 401 | integrity sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w== 402 | dependencies: 403 | "@babel/types" "^7.3.0" 404 | 405 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": 406 | version "2.0.3" 407 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" 408 | integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== 409 | 410 | "@types/istanbul-lib-report@*": 411 | version "3.0.0" 412 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 413 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 414 | dependencies: 415 | "@types/istanbul-lib-coverage" "*" 416 | 417 | "@types/istanbul-reports@^1.1.1": 418 | version "1.1.2" 419 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" 420 | integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== 421 | dependencies: 422 | "@types/istanbul-lib-coverage" "*" 423 | "@types/istanbul-lib-report" "*" 424 | 425 | "@types/jest@^24.0.18": 426 | version "24.9.1" 427 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" 428 | integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== 429 | dependencies: 430 | jest-diff "^24.3.0" 431 | 432 | "@types/node@^10.12.21": 433 | version "10.17.60" 434 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" 435 | integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== 436 | 437 | "@types/prop-types@*": 438 | version "15.7.3" 439 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 440 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 441 | 442 | "@types/react-dom@^16.9.0": 443 | version "16.9.13" 444 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.13.tgz#5898f0ee68fe200685e6b61d3d7d8828692814d0" 445 | integrity sha512-34Hr3XnmUSJbUVDxIw/e7dhQn2BJZhJmlAaPyPwfTQyuVS9mV/CeyghFcXyvkJXxI7notQJz8mF8FeCVvloJrA== 446 | dependencies: 447 | "@types/react" "^16" 448 | 449 | "@types/react@^16", "@types/react@^16.9.2": 450 | version "16.14.8" 451 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.8.tgz#4aee3ab004cb98451917c9b7ada3c7d7e52db3fe" 452 | integrity sha512-QN0/Qhmx+l4moe7WJuTxNiTsjBwlBGHqKGvInSQCBdo7Qio0VtOqwsC0Wq7q3PbJlB0cR4Y4CVo1OOe6BOsOmA== 453 | dependencies: 454 | "@types/prop-types" "*" 455 | "@types/scheduler" "*" 456 | csstype "^3.0.2" 457 | 458 | "@types/scheduler@*": 459 | version "0.16.1" 460 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" 461 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== 462 | 463 | "@types/stack-utils@^1.0.1": 464 | version "1.0.1" 465 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" 466 | integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== 467 | 468 | "@types/yargs-parser@*": 469 | version "20.2.0" 470 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" 471 | integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== 472 | 473 | "@types/yargs@^13.0.0": 474 | version "13.0.11" 475 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" 476 | integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== 477 | dependencies: 478 | "@types/yargs-parser" "*" 479 | 480 | abab@^2.0.0: 481 | version "2.0.5" 482 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" 483 | integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== 484 | 485 | acorn-globals@^4.1.0: 486 | version "4.3.4" 487 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" 488 | integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== 489 | dependencies: 490 | acorn "^6.0.1" 491 | acorn-walk "^6.0.1" 492 | 493 | acorn-walk@^6.0.1: 494 | version "6.2.0" 495 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" 496 | integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== 497 | 498 | acorn@^5.5.3: 499 | version "5.7.4" 500 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 501 | integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== 502 | 503 | acorn@^6.0.1: 504 | version "6.4.2" 505 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 506 | integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 507 | 508 | ajv@^6.12.3: 509 | version "6.12.6" 510 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 511 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 512 | dependencies: 513 | fast-deep-equal "^3.1.1" 514 | fast-json-stable-stringify "^2.0.0" 515 | json-schema-traverse "^0.4.1" 516 | uri-js "^4.2.2" 517 | 518 | ansi-escapes@^3.0.0: 519 | version "3.2.0" 520 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 521 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 522 | 523 | ansi-regex@^3.0.0: 524 | version "3.0.0" 525 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 526 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 527 | 528 | ansi-regex@^4.0.0, ansi-regex@^4.1.0: 529 | version "4.1.0" 530 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 531 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 532 | 533 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 534 | version "3.2.1" 535 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 536 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 537 | dependencies: 538 | color-convert "^1.9.0" 539 | 540 | anymatch@^2.0.0: 541 | version "2.0.0" 542 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 543 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 544 | dependencies: 545 | micromatch "^3.1.4" 546 | normalize-path "^2.1.1" 547 | 548 | arr-diff@^4.0.0: 549 | version "4.0.0" 550 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 551 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 552 | 553 | arr-flatten@^1.1.0: 554 | version "1.1.0" 555 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 556 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 557 | 558 | arr-union@^3.1.0: 559 | version "3.1.0" 560 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 561 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 562 | 563 | array-equal@^1.0.0: 564 | version "1.0.0" 565 | resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 566 | integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= 567 | 568 | array-unique@^0.3.2: 569 | version "0.3.2" 570 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 571 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 572 | 573 | asn1@~0.2.3: 574 | version "0.2.4" 575 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 576 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 577 | dependencies: 578 | safer-buffer "~2.1.0" 579 | 580 | assert-plus@1.0.0, assert-plus@^1.0.0: 581 | version "1.0.0" 582 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 583 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 584 | 585 | assign-symbols@^1.0.0: 586 | version "1.0.0" 587 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 588 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 589 | 590 | astral-regex@^1.0.0: 591 | version "1.0.0" 592 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 593 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 594 | 595 | async-limiter@~1.0.0: 596 | version "1.0.1" 597 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 598 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 599 | 600 | asynckit@^0.4.0: 601 | version "0.4.0" 602 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 603 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 604 | 605 | atob@^2.1.2: 606 | version "2.1.2" 607 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 608 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 609 | 610 | aws-sign2@~0.7.0: 611 | version "0.7.0" 612 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 613 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 614 | 615 | aws4@^1.8.0: 616 | version "1.11.0" 617 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 618 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 619 | 620 | babel-jest@^24.9.0: 621 | version "24.9.0" 622 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" 623 | integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== 624 | dependencies: 625 | "@jest/transform" "^24.9.0" 626 | "@jest/types" "^24.9.0" 627 | "@types/babel__core" "^7.1.0" 628 | babel-plugin-istanbul "^5.1.0" 629 | babel-preset-jest "^24.9.0" 630 | chalk "^2.4.2" 631 | slash "^2.0.0" 632 | 633 | babel-plugin-istanbul@^5.1.0: 634 | version "5.2.0" 635 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" 636 | integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== 637 | dependencies: 638 | "@babel/helper-plugin-utils" "^7.0.0" 639 | find-up "^3.0.0" 640 | istanbul-lib-instrument "^3.3.0" 641 | test-exclude "^5.2.3" 642 | 643 | babel-plugin-jest-hoist@^24.9.0: 644 | version "24.9.0" 645 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" 646 | integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== 647 | dependencies: 648 | "@types/babel__traverse" "^7.0.6" 649 | 650 | babel-preset-jest@^24.9.0: 651 | version "24.9.0" 652 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" 653 | integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== 654 | dependencies: 655 | "@babel/plugin-syntax-object-rest-spread" "^7.0.0" 656 | babel-plugin-jest-hoist "^24.9.0" 657 | 658 | balanced-match@^1.0.0: 659 | version "1.0.2" 660 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 661 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 662 | 663 | base@^0.11.1: 664 | version "0.11.2" 665 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 666 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 667 | dependencies: 668 | cache-base "^1.0.1" 669 | class-utils "^0.3.5" 670 | component-emitter "^1.2.1" 671 | define-property "^1.0.0" 672 | isobject "^3.0.1" 673 | mixin-deep "^1.2.0" 674 | pascalcase "^0.1.1" 675 | 676 | bcrypt-pbkdf@^1.0.0: 677 | version "1.0.2" 678 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 679 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 680 | dependencies: 681 | tweetnacl "^0.14.3" 682 | 683 | bindings@^1.5.0: 684 | version "1.5.0" 685 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 686 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 687 | dependencies: 688 | file-uri-to-path "1.0.0" 689 | 690 | brace-expansion@^1.1.7: 691 | version "1.1.11" 692 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 693 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 694 | dependencies: 695 | balanced-match "^1.0.0" 696 | concat-map "0.0.1" 697 | 698 | braces@^2.3.1: 699 | version "2.3.2" 700 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 701 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 702 | dependencies: 703 | arr-flatten "^1.1.0" 704 | array-unique "^0.3.2" 705 | extend-shallow "^2.0.1" 706 | fill-range "^4.0.0" 707 | isobject "^3.0.1" 708 | repeat-element "^1.1.2" 709 | snapdragon "^0.8.1" 710 | snapdragon-node "^2.0.1" 711 | split-string "^3.0.2" 712 | to-regex "^3.0.1" 713 | 714 | browser-process-hrtime@^1.0.0: 715 | version "1.0.0" 716 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" 717 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 718 | 719 | browser-resolve@^1.11.3: 720 | version "1.11.3" 721 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 722 | integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 723 | dependencies: 724 | resolve "1.1.7" 725 | 726 | browserslist@^4.16.6: 727 | version "4.16.6" 728 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" 729 | integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== 730 | dependencies: 731 | caniuse-lite "^1.0.30001219" 732 | colorette "^1.2.2" 733 | electron-to-chromium "^1.3.723" 734 | escalade "^3.1.1" 735 | node-releases "^1.1.71" 736 | 737 | bs-logger@0.x: 738 | version "0.2.6" 739 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 740 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 741 | dependencies: 742 | fast-json-stable-stringify "2.x" 743 | 744 | bser@2.1.1: 745 | version "2.1.1" 746 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 747 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 748 | dependencies: 749 | node-int64 "^0.4.0" 750 | 751 | buffer-from@1.x, buffer-from@^1.0.0: 752 | version "1.1.1" 753 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 754 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 755 | 756 | cache-base@^1.0.1: 757 | version "1.0.1" 758 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 759 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 760 | dependencies: 761 | collection-visit "^1.0.0" 762 | component-emitter "^1.2.1" 763 | get-value "^2.0.6" 764 | has-value "^1.0.0" 765 | isobject "^3.0.1" 766 | set-value "^2.0.0" 767 | to-object-path "^0.3.0" 768 | union-value "^1.0.0" 769 | unset-value "^1.0.0" 770 | 771 | call-bind@^1.0.0, call-bind@^1.0.2: 772 | version "1.0.2" 773 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 774 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 775 | dependencies: 776 | function-bind "^1.1.1" 777 | get-intrinsic "^1.0.2" 778 | 779 | callsites@^3.0.0: 780 | version "3.1.0" 781 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 782 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 783 | 784 | camelcase@^4.1.0: 785 | version "4.1.0" 786 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 787 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 788 | 789 | camelcase@^5.0.0, camelcase@^5.3.1: 790 | version "5.3.1" 791 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 792 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 793 | 794 | caniuse-lite@^1.0.30001219: 795 | version "1.0.30001241" 796 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001241.tgz#cd3fae47eb3d7691692b406568d7a3e5b23c7598" 797 | integrity sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ== 798 | 799 | capture-exit@^2.0.0: 800 | version "2.0.0" 801 | resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" 802 | integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== 803 | dependencies: 804 | rsvp "^4.8.4" 805 | 806 | caseless@~0.12.0: 807 | version "0.12.0" 808 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 809 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 810 | 811 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: 812 | version "2.4.2" 813 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 814 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 815 | dependencies: 816 | ansi-styles "^3.2.1" 817 | escape-string-regexp "^1.0.5" 818 | supports-color "^5.3.0" 819 | 820 | ci-info@^2.0.0: 821 | version "2.0.0" 822 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 823 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 824 | 825 | class-utils@^0.3.5: 826 | version "0.3.6" 827 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 828 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 829 | dependencies: 830 | arr-union "^3.1.0" 831 | define-property "^0.2.5" 832 | isobject "^3.0.0" 833 | static-extend "^0.1.1" 834 | 835 | cliui@^5.0.0: 836 | version "5.0.0" 837 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 838 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 839 | dependencies: 840 | string-width "^3.1.0" 841 | strip-ansi "^5.2.0" 842 | wrap-ansi "^5.1.0" 843 | 844 | co@^4.6.0: 845 | version "4.6.0" 846 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 847 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 848 | 849 | collection-visit@^1.0.0: 850 | version "1.0.0" 851 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 852 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 853 | dependencies: 854 | map-visit "^1.0.0" 855 | object-visit "^1.0.0" 856 | 857 | color-convert@^1.9.0: 858 | version "1.9.3" 859 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 860 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 861 | dependencies: 862 | color-name "1.1.3" 863 | 864 | color-name@1.1.3: 865 | version "1.1.3" 866 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 867 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 868 | 869 | colorette@^1.2.2: 870 | version "1.2.2" 871 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 872 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 873 | 874 | combined-stream@^1.0.6, combined-stream@~1.0.6: 875 | version "1.0.8" 876 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 877 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 878 | dependencies: 879 | delayed-stream "~1.0.0" 880 | 881 | component-emitter@^1.2.1: 882 | version "1.3.0" 883 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 884 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 885 | 886 | concat-map@0.0.1: 887 | version "0.0.1" 888 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 889 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 890 | 891 | convert-source-map@^1.4.0, convert-source-map@^1.7.0: 892 | version "1.8.0" 893 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 894 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 895 | dependencies: 896 | safe-buffer "~5.1.1" 897 | 898 | copy-descriptor@^0.1.0: 899 | version "0.1.1" 900 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 901 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 902 | 903 | core-util-is@1.0.2: 904 | version "1.0.2" 905 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 906 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 907 | 908 | cross-spawn@^6.0.0: 909 | version "6.0.5" 910 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 911 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 912 | dependencies: 913 | nice-try "^1.0.4" 914 | path-key "^2.0.1" 915 | semver "^5.5.0" 916 | shebang-command "^1.2.0" 917 | which "^1.2.9" 918 | 919 | cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 920 | version "0.3.8" 921 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" 922 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== 923 | 924 | cssstyle@^1.0.0: 925 | version "1.4.0" 926 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" 927 | integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== 928 | dependencies: 929 | cssom "0.3.x" 930 | 931 | csstype@^3.0.2: 932 | version "3.0.8" 933 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" 934 | integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== 935 | 936 | dashdash@^1.12.0: 937 | version "1.14.1" 938 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 939 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 940 | dependencies: 941 | assert-plus "^1.0.0" 942 | 943 | data-urls@^1.0.0: 944 | version "1.1.0" 945 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" 946 | integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== 947 | dependencies: 948 | abab "^2.0.0" 949 | whatwg-mimetype "^2.2.0" 950 | whatwg-url "^7.0.0" 951 | 952 | debug@^2.2.0, debug@^2.3.3: 953 | version "2.6.9" 954 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 955 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 956 | dependencies: 957 | ms "2.0.0" 958 | 959 | debug@^4.1.0, debug@^4.1.1: 960 | version "4.3.1" 961 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 962 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 963 | dependencies: 964 | ms "2.1.2" 965 | 966 | decamelize@^1.2.0: 967 | version "1.2.0" 968 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 969 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 970 | 971 | decode-uri-component@^0.2.0: 972 | version "0.2.0" 973 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 974 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 975 | 976 | deep-is@~0.1.3: 977 | version "0.1.3" 978 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 979 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 980 | 981 | define-properties@^1.1.3: 982 | version "1.1.3" 983 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 984 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 985 | dependencies: 986 | object-keys "^1.0.12" 987 | 988 | define-property@^0.2.5: 989 | version "0.2.5" 990 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 991 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 992 | dependencies: 993 | is-descriptor "^0.1.0" 994 | 995 | define-property@^1.0.0: 996 | version "1.0.0" 997 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 998 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 999 | dependencies: 1000 | is-descriptor "^1.0.0" 1001 | 1002 | define-property@^2.0.2: 1003 | version "2.0.2" 1004 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1005 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 1006 | dependencies: 1007 | is-descriptor "^1.0.2" 1008 | isobject "^3.0.1" 1009 | 1010 | delayed-stream@~1.0.0: 1011 | version "1.0.0" 1012 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1013 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 1014 | 1015 | detect-newline@^2.1.0: 1016 | version "2.1.0" 1017 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" 1018 | integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= 1019 | 1020 | diff-sequences@^24.9.0: 1021 | version "24.9.0" 1022 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" 1023 | integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== 1024 | 1025 | domexception@^1.0.1: 1026 | version "1.0.1" 1027 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" 1028 | integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== 1029 | dependencies: 1030 | webidl-conversions "^4.0.2" 1031 | 1032 | ecc-jsbn@~0.1.1: 1033 | version "0.1.2" 1034 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 1035 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 1036 | dependencies: 1037 | jsbn "~0.1.0" 1038 | safer-buffer "^2.1.0" 1039 | 1040 | electron-to-chromium@^1.3.723: 1041 | version "1.3.761" 1042 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.761.tgz#6a1748bab8ed94984391ec8be8a7e7ec1fe3d843" 1043 | integrity sha512-7a/wV/plM/b95XjTdA2Q4zAxxExTDKkNQpTiaU/nVT8tGCQVtX9NsnTjhALBFICpOB58hU6xg5fFC3CT2Bybpg== 1044 | 1045 | emoji-regex@^7.0.1: 1046 | version "7.0.3" 1047 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1048 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 1049 | 1050 | end-of-stream@^1.1.0: 1051 | version "1.4.4" 1052 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1053 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 1054 | dependencies: 1055 | once "^1.4.0" 1056 | 1057 | error-ex@^1.3.1: 1058 | version "1.3.2" 1059 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1060 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1061 | dependencies: 1062 | is-arrayish "^0.2.1" 1063 | 1064 | es-abstract@^1.18.0-next.2: 1065 | version "1.18.3" 1066 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" 1067 | integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== 1068 | dependencies: 1069 | call-bind "^1.0.2" 1070 | es-to-primitive "^1.2.1" 1071 | function-bind "^1.1.1" 1072 | get-intrinsic "^1.1.1" 1073 | has "^1.0.3" 1074 | has-symbols "^1.0.2" 1075 | is-callable "^1.2.3" 1076 | is-negative-zero "^2.0.1" 1077 | is-regex "^1.1.3" 1078 | is-string "^1.0.6" 1079 | object-inspect "^1.10.3" 1080 | object-keys "^1.1.1" 1081 | object.assign "^4.1.2" 1082 | string.prototype.trimend "^1.0.4" 1083 | string.prototype.trimstart "^1.0.4" 1084 | unbox-primitive "^1.0.1" 1085 | 1086 | es-to-primitive@^1.2.1: 1087 | version "1.2.1" 1088 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1089 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1090 | dependencies: 1091 | is-callable "^1.1.4" 1092 | is-date-object "^1.0.1" 1093 | is-symbol "^1.0.2" 1094 | 1095 | escalade@^3.1.1: 1096 | version "3.1.1" 1097 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1098 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1099 | 1100 | escape-string-regexp@^1.0.5: 1101 | version "1.0.5" 1102 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1103 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1104 | 1105 | escape-string-regexp@^2.0.0: 1106 | version "2.0.0" 1107 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1108 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1109 | 1110 | escodegen@^1.9.1: 1111 | version "1.14.3" 1112 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" 1113 | integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== 1114 | dependencies: 1115 | esprima "^4.0.1" 1116 | estraverse "^4.2.0" 1117 | esutils "^2.0.2" 1118 | optionator "^0.8.1" 1119 | optionalDependencies: 1120 | source-map "~0.6.1" 1121 | 1122 | esprima@^4.0.1: 1123 | version "4.0.1" 1124 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1125 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1126 | 1127 | estraverse@^4.2.0: 1128 | version "4.3.0" 1129 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1130 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1131 | 1132 | esutils@^2.0.2: 1133 | version "2.0.3" 1134 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1135 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1136 | 1137 | exec-sh@^0.3.2: 1138 | version "0.3.6" 1139 | resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" 1140 | integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== 1141 | 1142 | execa@^1.0.0: 1143 | version "1.0.0" 1144 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 1145 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 1146 | dependencies: 1147 | cross-spawn "^6.0.0" 1148 | get-stream "^4.0.0" 1149 | is-stream "^1.1.0" 1150 | npm-run-path "^2.0.0" 1151 | p-finally "^1.0.0" 1152 | signal-exit "^3.0.0" 1153 | strip-eof "^1.0.0" 1154 | 1155 | exit@^0.1.2: 1156 | version "0.1.2" 1157 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1158 | integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= 1159 | 1160 | expand-brackets@^2.1.4: 1161 | version "2.1.4" 1162 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1163 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 1164 | dependencies: 1165 | debug "^2.3.3" 1166 | define-property "^0.2.5" 1167 | extend-shallow "^2.0.1" 1168 | posix-character-classes "^0.1.0" 1169 | regex-not "^1.0.0" 1170 | snapdragon "^0.8.1" 1171 | to-regex "^3.0.1" 1172 | 1173 | expect@^24.9.0: 1174 | version "24.9.0" 1175 | resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" 1176 | integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== 1177 | dependencies: 1178 | "@jest/types" "^24.9.0" 1179 | ansi-styles "^3.2.0" 1180 | jest-get-type "^24.9.0" 1181 | jest-matcher-utils "^24.9.0" 1182 | jest-message-util "^24.9.0" 1183 | jest-regex-util "^24.9.0" 1184 | 1185 | extend-shallow@^2.0.1: 1186 | version "2.0.1" 1187 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1188 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 1189 | dependencies: 1190 | is-extendable "^0.1.0" 1191 | 1192 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1193 | version "3.0.2" 1194 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1195 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 1196 | dependencies: 1197 | assign-symbols "^1.0.0" 1198 | is-extendable "^1.0.1" 1199 | 1200 | extend@~3.0.2: 1201 | version "3.0.2" 1202 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1203 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1204 | 1205 | extglob@^2.0.4: 1206 | version "2.0.4" 1207 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1208 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 1209 | dependencies: 1210 | array-unique "^0.3.2" 1211 | define-property "^1.0.0" 1212 | expand-brackets "^2.1.4" 1213 | extend-shallow "^2.0.1" 1214 | fragment-cache "^0.2.1" 1215 | regex-not "^1.0.0" 1216 | snapdragon "^0.8.1" 1217 | to-regex "^3.0.1" 1218 | 1219 | extsprintf@1.3.0: 1220 | version "1.3.0" 1221 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 1222 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 1223 | 1224 | extsprintf@^1.2.0: 1225 | version "1.4.0" 1226 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 1227 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 1228 | 1229 | fast-deep-equal@^3.1.1: 1230 | version "3.1.3" 1231 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1232 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1233 | 1234 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: 1235 | version "2.1.0" 1236 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1237 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1238 | 1239 | fast-levenshtein@~2.0.6: 1240 | version "2.0.6" 1241 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1242 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1243 | 1244 | fb-watchman@^2.0.0: 1245 | version "2.0.1" 1246 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" 1247 | integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== 1248 | dependencies: 1249 | bser "2.1.1" 1250 | 1251 | file-uri-to-path@1.0.0: 1252 | version "1.0.0" 1253 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1254 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1255 | 1256 | fill-range@^4.0.0: 1257 | version "4.0.0" 1258 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1259 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 1260 | dependencies: 1261 | extend-shallow "^2.0.1" 1262 | is-number "^3.0.0" 1263 | repeat-string "^1.6.1" 1264 | to-regex-range "^2.1.0" 1265 | 1266 | find-up@^3.0.0: 1267 | version "3.0.0" 1268 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1269 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1270 | dependencies: 1271 | locate-path "^3.0.0" 1272 | 1273 | for-each@^0.3.3: 1274 | version "0.3.3" 1275 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 1276 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 1277 | dependencies: 1278 | is-callable "^1.1.3" 1279 | 1280 | for-in@^1.0.2: 1281 | version "1.0.2" 1282 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1283 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 1284 | 1285 | forever-agent@~0.6.1: 1286 | version "0.6.1" 1287 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1288 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 1289 | 1290 | form-data@~2.3.2: 1291 | version "2.3.3" 1292 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 1293 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 1294 | dependencies: 1295 | asynckit "^0.4.0" 1296 | combined-stream "^1.0.6" 1297 | mime-types "^2.1.12" 1298 | 1299 | fragment-cache@^0.2.1: 1300 | version "0.2.1" 1301 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1302 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 1303 | dependencies: 1304 | map-cache "^0.2.2" 1305 | 1306 | fs.realpath@^1.0.0: 1307 | version "1.0.0" 1308 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1309 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1310 | 1311 | fsevents@^1.2.7: 1312 | version "1.2.13" 1313 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" 1314 | integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== 1315 | dependencies: 1316 | bindings "^1.5.0" 1317 | nan "^2.12.1" 1318 | 1319 | function-bind@^1.1.1: 1320 | version "1.1.1" 1321 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1322 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1323 | 1324 | gensync@^1.0.0-beta.2: 1325 | version "1.0.0-beta.2" 1326 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1327 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1328 | 1329 | get-caller-file@^2.0.1: 1330 | version "2.0.5" 1331 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1332 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1333 | 1334 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: 1335 | version "1.1.1" 1336 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1337 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1338 | dependencies: 1339 | function-bind "^1.1.1" 1340 | has "^1.0.3" 1341 | has-symbols "^1.0.1" 1342 | 1343 | get-stream@^4.0.0: 1344 | version "4.1.0" 1345 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1346 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 1347 | dependencies: 1348 | pump "^3.0.0" 1349 | 1350 | get-value@^2.0.3, get-value@^2.0.6: 1351 | version "2.0.6" 1352 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1353 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 1354 | 1355 | getpass@^0.1.1: 1356 | version "0.1.7" 1357 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1358 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 1359 | dependencies: 1360 | assert-plus "^1.0.0" 1361 | 1362 | glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: 1363 | version "7.1.7" 1364 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 1365 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 1366 | dependencies: 1367 | fs.realpath "^1.0.0" 1368 | inflight "^1.0.4" 1369 | inherits "2" 1370 | minimatch "^3.0.4" 1371 | once "^1.3.0" 1372 | path-is-absolute "^1.0.0" 1373 | 1374 | globals@^11.1.0: 1375 | version "11.12.0" 1376 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1377 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1378 | 1379 | graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: 1380 | version "4.2.6" 1381 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1382 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 1383 | 1384 | growly@^1.3.0: 1385 | version "1.3.0" 1386 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 1387 | integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= 1388 | 1389 | har-schema@^2.0.0: 1390 | version "2.0.0" 1391 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1392 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 1393 | 1394 | har-validator@~5.1.3: 1395 | version "5.1.5" 1396 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1397 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 1398 | dependencies: 1399 | ajv "^6.12.3" 1400 | har-schema "^2.0.0" 1401 | 1402 | has-bigints@^1.0.1: 1403 | version "1.0.1" 1404 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 1405 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 1406 | 1407 | has-flag@^3.0.0: 1408 | version "3.0.0" 1409 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1410 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1411 | 1412 | has-symbols@^1.0.1, has-symbols@^1.0.2: 1413 | version "1.0.2" 1414 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1415 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1416 | 1417 | has-value@^0.3.1: 1418 | version "0.3.1" 1419 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1420 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 1421 | dependencies: 1422 | get-value "^2.0.3" 1423 | has-values "^0.1.4" 1424 | isobject "^2.0.0" 1425 | 1426 | has-value@^1.0.0: 1427 | version "1.0.0" 1428 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1429 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 1430 | dependencies: 1431 | get-value "^2.0.6" 1432 | has-values "^1.0.0" 1433 | isobject "^3.0.0" 1434 | 1435 | has-values@^0.1.4: 1436 | version "0.1.4" 1437 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1438 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 1439 | 1440 | has-values@^1.0.0: 1441 | version "1.0.0" 1442 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1443 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 1444 | dependencies: 1445 | is-number "^3.0.0" 1446 | kind-of "^4.0.0" 1447 | 1448 | has@^1.0.3: 1449 | version "1.0.3" 1450 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1451 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1452 | dependencies: 1453 | function-bind "^1.1.1" 1454 | 1455 | hosted-git-info@^2.1.4: 1456 | version "2.8.9" 1457 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" 1458 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 1459 | 1460 | html-encoding-sniffer@^1.0.2: 1461 | version "1.0.2" 1462 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" 1463 | integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== 1464 | dependencies: 1465 | whatwg-encoding "^1.0.1" 1466 | 1467 | html-escaper@^2.0.0: 1468 | version "2.0.2" 1469 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1470 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1471 | 1472 | http-signature@~1.2.0: 1473 | version "1.2.0" 1474 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1475 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 1476 | dependencies: 1477 | assert-plus "^1.0.0" 1478 | jsprim "^1.2.2" 1479 | sshpk "^1.7.0" 1480 | 1481 | iconv-lite@0.4.24: 1482 | version "0.4.24" 1483 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1484 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1485 | dependencies: 1486 | safer-buffer ">= 2.1.2 < 3" 1487 | 1488 | immer@^3.2.0: 1489 | version "3.3.0" 1490 | resolved "https://registry.yarnpkg.com/immer/-/immer-3.3.0.tgz#ee7cf3a248d5dd2d4eedfbe7dfc1e9be8c72041d" 1491 | integrity sha512-vlWRjnZqoTHuEjadquVHK3GxsXe1gNoATffLEA8Qbrdd++Xb+wHEFiWtwAKTscMBoi1AsvEMXhYRzAXA8Ex9FQ== 1492 | 1493 | import-local@^2.0.0: 1494 | version "2.0.0" 1495 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" 1496 | integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== 1497 | dependencies: 1498 | pkg-dir "^3.0.0" 1499 | resolve-cwd "^2.0.0" 1500 | 1501 | imurmurhash@^0.1.4: 1502 | version "0.1.4" 1503 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1504 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1505 | 1506 | inflight@^1.0.4: 1507 | version "1.0.6" 1508 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1509 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1510 | dependencies: 1511 | once "^1.3.0" 1512 | wrappy "1" 1513 | 1514 | inherits@2: 1515 | version "2.0.4" 1516 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1517 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1518 | 1519 | invariant@^2.2.4: 1520 | version "2.2.4" 1521 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1522 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 1523 | dependencies: 1524 | loose-envify "^1.0.0" 1525 | 1526 | is-accessor-descriptor@^0.1.6: 1527 | version "0.1.6" 1528 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1529 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 1530 | dependencies: 1531 | kind-of "^3.0.2" 1532 | 1533 | is-accessor-descriptor@^1.0.0: 1534 | version "1.0.0" 1535 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1536 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 1537 | dependencies: 1538 | kind-of "^6.0.0" 1539 | 1540 | is-arrayish@^0.2.1: 1541 | version "0.2.1" 1542 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1543 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1544 | 1545 | is-bigint@^1.0.1: 1546 | version "1.0.2" 1547 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" 1548 | integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== 1549 | 1550 | is-boolean-object@^1.1.0: 1551 | version "1.1.1" 1552 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" 1553 | integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== 1554 | dependencies: 1555 | call-bind "^1.0.2" 1556 | 1557 | is-buffer@^1.1.5: 1558 | version "1.1.6" 1559 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1560 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 1561 | 1562 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: 1563 | version "1.2.3" 1564 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 1565 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 1566 | 1567 | is-ci@^2.0.0: 1568 | version "2.0.0" 1569 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1570 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 1571 | dependencies: 1572 | ci-info "^2.0.0" 1573 | 1574 | is-core-module@^2.2.0: 1575 | version "2.4.0" 1576 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" 1577 | integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== 1578 | dependencies: 1579 | has "^1.0.3" 1580 | 1581 | is-data-descriptor@^0.1.4: 1582 | version "0.1.4" 1583 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1584 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 1585 | dependencies: 1586 | kind-of "^3.0.2" 1587 | 1588 | is-data-descriptor@^1.0.0: 1589 | version "1.0.0" 1590 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1591 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 1592 | dependencies: 1593 | kind-of "^6.0.0" 1594 | 1595 | is-date-object@^1.0.1: 1596 | version "1.0.4" 1597 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" 1598 | integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== 1599 | 1600 | is-descriptor@^0.1.0: 1601 | version "0.1.6" 1602 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1603 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 1604 | dependencies: 1605 | is-accessor-descriptor "^0.1.6" 1606 | is-data-descriptor "^0.1.4" 1607 | kind-of "^5.0.0" 1608 | 1609 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1610 | version "1.0.2" 1611 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1612 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 1613 | dependencies: 1614 | is-accessor-descriptor "^1.0.0" 1615 | is-data-descriptor "^1.0.0" 1616 | kind-of "^6.0.2" 1617 | 1618 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1619 | version "0.1.1" 1620 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1621 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1622 | 1623 | is-extendable@^1.0.1: 1624 | version "1.0.1" 1625 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1626 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 1627 | dependencies: 1628 | is-plain-object "^2.0.4" 1629 | 1630 | is-fullwidth-code-point@^2.0.0: 1631 | version "2.0.0" 1632 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1633 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1634 | 1635 | is-generator-fn@^2.0.0: 1636 | version "2.1.0" 1637 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1638 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1639 | 1640 | is-negative-zero@^2.0.1: 1641 | version "2.0.1" 1642 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1643 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1644 | 1645 | is-number-object@^1.0.4: 1646 | version "1.0.5" 1647 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" 1648 | integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== 1649 | 1650 | is-number@^3.0.0: 1651 | version "3.0.0" 1652 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1653 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 1654 | dependencies: 1655 | kind-of "^3.0.2" 1656 | 1657 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1658 | version "2.0.4" 1659 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1660 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1661 | dependencies: 1662 | isobject "^3.0.1" 1663 | 1664 | is-regex@^1.1.3: 1665 | version "1.1.3" 1666 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" 1667 | integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== 1668 | dependencies: 1669 | call-bind "^1.0.2" 1670 | has-symbols "^1.0.2" 1671 | 1672 | is-stream@^1.1.0: 1673 | version "1.1.0" 1674 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1675 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1676 | 1677 | is-string@^1.0.5, is-string@^1.0.6: 1678 | version "1.0.6" 1679 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" 1680 | integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== 1681 | 1682 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1683 | version "1.0.4" 1684 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1685 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1686 | dependencies: 1687 | has-symbols "^1.0.2" 1688 | 1689 | is-typedarray@~1.0.0: 1690 | version "1.0.0" 1691 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1692 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1693 | 1694 | is-windows@^1.0.2: 1695 | version "1.0.2" 1696 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1697 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1698 | 1699 | is-wsl@^1.1.0: 1700 | version "1.1.0" 1701 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" 1702 | integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= 1703 | 1704 | isarray@1.0.0: 1705 | version "1.0.0" 1706 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1707 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1708 | 1709 | isexe@^2.0.0: 1710 | version "2.0.0" 1711 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1712 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1713 | 1714 | isobject@^2.0.0: 1715 | version "2.1.0" 1716 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1717 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1718 | dependencies: 1719 | isarray "1.0.0" 1720 | 1721 | isobject@^3.0.0, isobject@^3.0.1: 1722 | version "3.0.1" 1723 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1724 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 1725 | 1726 | isstream@~0.1.2: 1727 | version "0.1.2" 1728 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1729 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1730 | 1731 | istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: 1732 | version "2.0.5" 1733 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" 1734 | integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== 1735 | 1736 | istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: 1737 | version "3.3.0" 1738 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" 1739 | integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== 1740 | dependencies: 1741 | "@babel/generator" "^7.4.0" 1742 | "@babel/parser" "^7.4.3" 1743 | "@babel/template" "^7.4.0" 1744 | "@babel/traverse" "^7.4.3" 1745 | "@babel/types" "^7.4.0" 1746 | istanbul-lib-coverage "^2.0.5" 1747 | semver "^6.0.0" 1748 | 1749 | istanbul-lib-report@^2.0.4: 1750 | version "2.0.8" 1751 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" 1752 | integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== 1753 | dependencies: 1754 | istanbul-lib-coverage "^2.0.5" 1755 | make-dir "^2.1.0" 1756 | supports-color "^6.1.0" 1757 | 1758 | istanbul-lib-source-maps@^3.0.1: 1759 | version "3.0.6" 1760 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" 1761 | integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== 1762 | dependencies: 1763 | debug "^4.1.1" 1764 | istanbul-lib-coverage "^2.0.5" 1765 | make-dir "^2.1.0" 1766 | rimraf "^2.6.3" 1767 | source-map "^0.6.1" 1768 | 1769 | istanbul-reports@^2.2.6: 1770 | version "2.2.7" 1771 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" 1772 | integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== 1773 | dependencies: 1774 | html-escaper "^2.0.0" 1775 | 1776 | jest-changed-files@^24.9.0: 1777 | version "24.9.0" 1778 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" 1779 | integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== 1780 | dependencies: 1781 | "@jest/types" "^24.9.0" 1782 | execa "^1.0.0" 1783 | throat "^4.0.0" 1784 | 1785 | jest-cli@^24.9.0: 1786 | version "24.9.0" 1787 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" 1788 | integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== 1789 | dependencies: 1790 | "@jest/core" "^24.9.0" 1791 | "@jest/test-result" "^24.9.0" 1792 | "@jest/types" "^24.9.0" 1793 | chalk "^2.0.1" 1794 | exit "^0.1.2" 1795 | import-local "^2.0.0" 1796 | is-ci "^2.0.0" 1797 | jest-config "^24.9.0" 1798 | jest-util "^24.9.0" 1799 | jest-validate "^24.9.0" 1800 | prompts "^2.0.1" 1801 | realpath-native "^1.1.0" 1802 | yargs "^13.3.0" 1803 | 1804 | jest-config@^24.9.0: 1805 | version "24.9.0" 1806 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" 1807 | integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== 1808 | dependencies: 1809 | "@babel/core" "^7.1.0" 1810 | "@jest/test-sequencer" "^24.9.0" 1811 | "@jest/types" "^24.9.0" 1812 | babel-jest "^24.9.0" 1813 | chalk "^2.0.1" 1814 | glob "^7.1.1" 1815 | jest-environment-jsdom "^24.9.0" 1816 | jest-environment-node "^24.9.0" 1817 | jest-get-type "^24.9.0" 1818 | jest-jasmine2 "^24.9.0" 1819 | jest-regex-util "^24.3.0" 1820 | jest-resolve "^24.9.0" 1821 | jest-util "^24.9.0" 1822 | jest-validate "^24.9.0" 1823 | micromatch "^3.1.10" 1824 | pretty-format "^24.9.0" 1825 | realpath-native "^1.1.0" 1826 | 1827 | jest-diff@^24.3.0, jest-diff@^24.9.0: 1828 | version "24.9.0" 1829 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" 1830 | integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== 1831 | dependencies: 1832 | chalk "^2.0.1" 1833 | diff-sequences "^24.9.0" 1834 | jest-get-type "^24.9.0" 1835 | pretty-format "^24.9.0" 1836 | 1837 | jest-docblock@^24.3.0: 1838 | version "24.9.0" 1839 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" 1840 | integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== 1841 | dependencies: 1842 | detect-newline "^2.1.0" 1843 | 1844 | jest-each@^24.9.0: 1845 | version "24.9.0" 1846 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" 1847 | integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== 1848 | dependencies: 1849 | "@jest/types" "^24.9.0" 1850 | chalk "^2.0.1" 1851 | jest-get-type "^24.9.0" 1852 | jest-util "^24.9.0" 1853 | pretty-format "^24.9.0" 1854 | 1855 | jest-environment-jsdom@^24.9.0: 1856 | version "24.9.0" 1857 | resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" 1858 | integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== 1859 | dependencies: 1860 | "@jest/environment" "^24.9.0" 1861 | "@jest/fake-timers" "^24.9.0" 1862 | "@jest/types" "^24.9.0" 1863 | jest-mock "^24.9.0" 1864 | jest-util "^24.9.0" 1865 | jsdom "^11.5.1" 1866 | 1867 | jest-environment-node@^24.9.0: 1868 | version "24.9.0" 1869 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" 1870 | integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== 1871 | dependencies: 1872 | "@jest/environment" "^24.9.0" 1873 | "@jest/fake-timers" "^24.9.0" 1874 | "@jest/types" "^24.9.0" 1875 | jest-mock "^24.9.0" 1876 | jest-util "^24.9.0" 1877 | 1878 | jest-get-type@^24.9.0: 1879 | version "24.9.0" 1880 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" 1881 | integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== 1882 | 1883 | jest-haste-map@^24.9.0: 1884 | version "24.9.0" 1885 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" 1886 | integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== 1887 | dependencies: 1888 | "@jest/types" "^24.9.0" 1889 | anymatch "^2.0.0" 1890 | fb-watchman "^2.0.0" 1891 | graceful-fs "^4.1.15" 1892 | invariant "^2.2.4" 1893 | jest-serializer "^24.9.0" 1894 | jest-util "^24.9.0" 1895 | jest-worker "^24.9.0" 1896 | micromatch "^3.1.10" 1897 | sane "^4.0.3" 1898 | walker "^1.0.7" 1899 | optionalDependencies: 1900 | fsevents "^1.2.7" 1901 | 1902 | jest-jasmine2@^24.9.0: 1903 | version "24.9.0" 1904 | resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" 1905 | integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== 1906 | dependencies: 1907 | "@babel/traverse" "^7.1.0" 1908 | "@jest/environment" "^24.9.0" 1909 | "@jest/test-result" "^24.9.0" 1910 | "@jest/types" "^24.9.0" 1911 | chalk "^2.0.1" 1912 | co "^4.6.0" 1913 | expect "^24.9.0" 1914 | is-generator-fn "^2.0.0" 1915 | jest-each "^24.9.0" 1916 | jest-matcher-utils "^24.9.0" 1917 | jest-message-util "^24.9.0" 1918 | jest-runtime "^24.9.0" 1919 | jest-snapshot "^24.9.0" 1920 | jest-util "^24.9.0" 1921 | pretty-format "^24.9.0" 1922 | throat "^4.0.0" 1923 | 1924 | jest-leak-detector@^24.9.0: 1925 | version "24.9.0" 1926 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" 1927 | integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== 1928 | dependencies: 1929 | jest-get-type "^24.9.0" 1930 | pretty-format "^24.9.0" 1931 | 1932 | jest-matcher-utils@^24.9.0: 1933 | version "24.9.0" 1934 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" 1935 | integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== 1936 | dependencies: 1937 | chalk "^2.0.1" 1938 | jest-diff "^24.9.0" 1939 | jest-get-type "^24.9.0" 1940 | pretty-format "^24.9.0" 1941 | 1942 | jest-message-util@^24.9.0: 1943 | version "24.9.0" 1944 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" 1945 | integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== 1946 | dependencies: 1947 | "@babel/code-frame" "^7.0.0" 1948 | "@jest/test-result" "^24.9.0" 1949 | "@jest/types" "^24.9.0" 1950 | "@types/stack-utils" "^1.0.1" 1951 | chalk "^2.0.1" 1952 | micromatch "^3.1.10" 1953 | slash "^2.0.0" 1954 | stack-utils "^1.0.1" 1955 | 1956 | jest-mock@^24.9.0: 1957 | version "24.9.0" 1958 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" 1959 | integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== 1960 | dependencies: 1961 | "@jest/types" "^24.9.0" 1962 | 1963 | jest-pnp-resolver@^1.2.1: 1964 | version "1.2.2" 1965 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 1966 | integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== 1967 | 1968 | jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: 1969 | version "24.9.0" 1970 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" 1971 | integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== 1972 | 1973 | jest-resolve-dependencies@^24.9.0: 1974 | version "24.9.0" 1975 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" 1976 | integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== 1977 | dependencies: 1978 | "@jest/types" "^24.9.0" 1979 | jest-regex-util "^24.3.0" 1980 | jest-snapshot "^24.9.0" 1981 | 1982 | jest-resolve@^24.9.0: 1983 | version "24.9.0" 1984 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" 1985 | integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== 1986 | dependencies: 1987 | "@jest/types" "^24.9.0" 1988 | browser-resolve "^1.11.3" 1989 | chalk "^2.0.1" 1990 | jest-pnp-resolver "^1.2.1" 1991 | realpath-native "^1.1.0" 1992 | 1993 | jest-runner@^24.9.0: 1994 | version "24.9.0" 1995 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" 1996 | integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== 1997 | dependencies: 1998 | "@jest/console" "^24.7.1" 1999 | "@jest/environment" "^24.9.0" 2000 | "@jest/test-result" "^24.9.0" 2001 | "@jest/types" "^24.9.0" 2002 | chalk "^2.4.2" 2003 | exit "^0.1.2" 2004 | graceful-fs "^4.1.15" 2005 | jest-config "^24.9.0" 2006 | jest-docblock "^24.3.0" 2007 | jest-haste-map "^24.9.0" 2008 | jest-jasmine2 "^24.9.0" 2009 | jest-leak-detector "^24.9.0" 2010 | jest-message-util "^24.9.0" 2011 | jest-resolve "^24.9.0" 2012 | jest-runtime "^24.9.0" 2013 | jest-util "^24.9.0" 2014 | jest-worker "^24.6.0" 2015 | source-map-support "^0.5.6" 2016 | throat "^4.0.0" 2017 | 2018 | jest-runtime@^24.9.0: 2019 | version "24.9.0" 2020 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" 2021 | integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== 2022 | dependencies: 2023 | "@jest/console" "^24.7.1" 2024 | "@jest/environment" "^24.9.0" 2025 | "@jest/source-map" "^24.3.0" 2026 | "@jest/transform" "^24.9.0" 2027 | "@jest/types" "^24.9.0" 2028 | "@types/yargs" "^13.0.0" 2029 | chalk "^2.0.1" 2030 | exit "^0.1.2" 2031 | glob "^7.1.3" 2032 | graceful-fs "^4.1.15" 2033 | jest-config "^24.9.0" 2034 | jest-haste-map "^24.9.0" 2035 | jest-message-util "^24.9.0" 2036 | jest-mock "^24.9.0" 2037 | jest-regex-util "^24.3.0" 2038 | jest-resolve "^24.9.0" 2039 | jest-snapshot "^24.9.0" 2040 | jest-util "^24.9.0" 2041 | jest-validate "^24.9.0" 2042 | realpath-native "^1.1.0" 2043 | slash "^2.0.0" 2044 | strip-bom "^3.0.0" 2045 | yargs "^13.3.0" 2046 | 2047 | jest-serializer@^24.9.0: 2048 | version "24.9.0" 2049 | resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" 2050 | integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== 2051 | 2052 | jest-snapshot@^24.9.0: 2053 | version "24.9.0" 2054 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" 2055 | integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== 2056 | dependencies: 2057 | "@babel/types" "^7.0.0" 2058 | "@jest/types" "^24.9.0" 2059 | chalk "^2.0.1" 2060 | expect "^24.9.0" 2061 | jest-diff "^24.9.0" 2062 | jest-get-type "^24.9.0" 2063 | jest-matcher-utils "^24.9.0" 2064 | jest-message-util "^24.9.0" 2065 | jest-resolve "^24.9.0" 2066 | mkdirp "^0.5.1" 2067 | natural-compare "^1.4.0" 2068 | pretty-format "^24.9.0" 2069 | semver "^6.2.0" 2070 | 2071 | jest-util@^24.9.0: 2072 | version "24.9.0" 2073 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" 2074 | integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== 2075 | dependencies: 2076 | "@jest/console" "^24.9.0" 2077 | "@jest/fake-timers" "^24.9.0" 2078 | "@jest/source-map" "^24.9.0" 2079 | "@jest/test-result" "^24.9.0" 2080 | "@jest/types" "^24.9.0" 2081 | callsites "^3.0.0" 2082 | chalk "^2.0.1" 2083 | graceful-fs "^4.1.15" 2084 | is-ci "^2.0.0" 2085 | mkdirp "^0.5.1" 2086 | slash "^2.0.0" 2087 | source-map "^0.6.0" 2088 | 2089 | jest-validate@^24.9.0: 2090 | version "24.9.0" 2091 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" 2092 | integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== 2093 | dependencies: 2094 | "@jest/types" "^24.9.0" 2095 | camelcase "^5.3.1" 2096 | chalk "^2.0.1" 2097 | jest-get-type "^24.9.0" 2098 | leven "^3.1.0" 2099 | pretty-format "^24.9.0" 2100 | 2101 | jest-watcher@^24.9.0: 2102 | version "24.9.0" 2103 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" 2104 | integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== 2105 | dependencies: 2106 | "@jest/test-result" "^24.9.0" 2107 | "@jest/types" "^24.9.0" 2108 | "@types/yargs" "^13.0.0" 2109 | ansi-escapes "^3.0.0" 2110 | chalk "^2.0.1" 2111 | jest-util "^24.9.0" 2112 | string-length "^2.0.0" 2113 | 2114 | jest-worker@^24.6.0, jest-worker@^24.9.0: 2115 | version "24.9.0" 2116 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" 2117 | integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== 2118 | dependencies: 2119 | merge-stream "^2.0.0" 2120 | supports-color "^6.1.0" 2121 | 2122 | jest@^24.9.0: 2123 | version "24.9.0" 2124 | resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" 2125 | integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== 2126 | dependencies: 2127 | import-local "^2.0.0" 2128 | jest-cli "^24.9.0" 2129 | 2130 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 2131 | version "4.0.0" 2132 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2133 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 2134 | 2135 | jsbn@~0.1.0: 2136 | version "0.1.1" 2137 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 2138 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 2139 | 2140 | jsdom@^11.5.1: 2141 | version "11.12.0" 2142 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" 2143 | integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== 2144 | dependencies: 2145 | abab "^2.0.0" 2146 | acorn "^5.5.3" 2147 | acorn-globals "^4.1.0" 2148 | array-equal "^1.0.0" 2149 | cssom ">= 0.3.2 < 0.4.0" 2150 | cssstyle "^1.0.0" 2151 | data-urls "^1.0.0" 2152 | domexception "^1.0.1" 2153 | escodegen "^1.9.1" 2154 | html-encoding-sniffer "^1.0.2" 2155 | left-pad "^1.3.0" 2156 | nwsapi "^2.0.7" 2157 | parse5 "4.0.0" 2158 | pn "^1.1.0" 2159 | request "^2.87.0" 2160 | request-promise-native "^1.0.5" 2161 | sax "^1.2.4" 2162 | symbol-tree "^3.2.2" 2163 | tough-cookie "^2.3.4" 2164 | w3c-hr-time "^1.0.1" 2165 | webidl-conversions "^4.0.2" 2166 | whatwg-encoding "^1.0.3" 2167 | whatwg-mimetype "^2.1.0" 2168 | whatwg-url "^6.4.1" 2169 | ws "^5.2.0" 2170 | xml-name-validator "^3.0.0" 2171 | 2172 | jsesc@^2.5.1: 2173 | version "2.5.2" 2174 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 2175 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 2176 | 2177 | json-parse-better-errors@^1.0.1: 2178 | version "1.0.2" 2179 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 2180 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 2181 | 2182 | json-schema-traverse@^0.4.1: 2183 | version "0.4.1" 2184 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 2185 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 2186 | 2187 | json-schema@0.2.3: 2188 | version "0.2.3" 2189 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 2190 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 2191 | 2192 | json-stringify-safe@~5.0.1: 2193 | version "5.0.1" 2194 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 2195 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 2196 | 2197 | json5@2.x, json5@^2.1.2: 2198 | version "2.2.0" 2199 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 2200 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 2201 | dependencies: 2202 | minimist "^1.2.5" 2203 | 2204 | jsprim@^1.2.2: 2205 | version "1.4.1" 2206 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 2207 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 2208 | dependencies: 2209 | assert-plus "1.0.0" 2210 | extsprintf "1.3.0" 2211 | json-schema "0.2.3" 2212 | verror "1.10.0" 2213 | 2214 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 2215 | version "3.2.2" 2216 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 2217 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 2218 | dependencies: 2219 | is-buffer "^1.1.5" 2220 | 2221 | kind-of@^4.0.0: 2222 | version "4.0.0" 2223 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 2224 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 2225 | dependencies: 2226 | is-buffer "^1.1.5" 2227 | 2228 | kind-of@^5.0.0: 2229 | version "5.1.0" 2230 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 2231 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 2232 | 2233 | kind-of@^6.0.0, kind-of@^6.0.2: 2234 | version "6.0.3" 2235 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 2236 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 2237 | 2238 | kleur@^3.0.3: 2239 | version "3.0.3" 2240 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2241 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 2242 | 2243 | left-pad@^1.3.0: 2244 | version "1.3.0" 2245 | resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" 2246 | integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== 2247 | 2248 | leven@^3.1.0: 2249 | version "3.1.0" 2250 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2251 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 2252 | 2253 | levn@~0.3.0: 2254 | version "0.3.0" 2255 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 2256 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 2257 | dependencies: 2258 | prelude-ls "~1.1.2" 2259 | type-check "~0.3.2" 2260 | 2261 | load-json-file@^4.0.0: 2262 | version "4.0.0" 2263 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 2264 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 2265 | dependencies: 2266 | graceful-fs "^4.1.2" 2267 | parse-json "^4.0.0" 2268 | pify "^3.0.0" 2269 | strip-bom "^3.0.0" 2270 | 2271 | locate-path@^3.0.0: 2272 | version "3.0.0" 2273 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 2274 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 2275 | dependencies: 2276 | p-locate "^3.0.0" 2277 | path-exists "^3.0.0" 2278 | 2279 | lodash.memoize@4.x: 2280 | version "4.1.2" 2281 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 2282 | integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= 2283 | 2284 | lodash.sortby@^4.7.0: 2285 | version "4.7.0" 2286 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 2287 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 2288 | 2289 | lodash@^4.17.19: 2290 | version "4.17.21" 2291 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2292 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2293 | 2294 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: 2295 | version "1.4.0" 2296 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 2297 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 2298 | dependencies: 2299 | js-tokens "^3.0.0 || ^4.0.0" 2300 | 2301 | make-dir@^2.1.0: 2302 | version "2.1.0" 2303 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 2304 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 2305 | dependencies: 2306 | pify "^4.0.1" 2307 | semver "^5.6.0" 2308 | 2309 | make-error@1.x: 2310 | version "1.3.6" 2311 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2312 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2313 | 2314 | makeerror@1.0.x: 2315 | version "1.0.11" 2316 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 2317 | integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= 2318 | dependencies: 2319 | tmpl "1.0.x" 2320 | 2321 | map-cache@^0.2.2: 2322 | version "0.2.2" 2323 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 2324 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 2325 | 2326 | map-visit@^1.0.0: 2327 | version "1.0.0" 2328 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 2329 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 2330 | dependencies: 2331 | object-visit "^1.0.0" 2332 | 2333 | merge-stream@^2.0.0: 2334 | version "2.0.0" 2335 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2336 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2337 | 2338 | micromatch@^3.1.10, micromatch@^3.1.4: 2339 | version "3.1.10" 2340 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2341 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 2342 | dependencies: 2343 | arr-diff "^4.0.0" 2344 | array-unique "^0.3.2" 2345 | braces "^2.3.1" 2346 | define-property "^2.0.2" 2347 | extend-shallow "^3.0.2" 2348 | extglob "^2.0.4" 2349 | fragment-cache "^0.2.1" 2350 | kind-of "^6.0.2" 2351 | nanomatch "^1.2.9" 2352 | object.pick "^1.3.0" 2353 | regex-not "^1.0.0" 2354 | snapdragon "^0.8.1" 2355 | to-regex "^3.0.2" 2356 | 2357 | mime-db@1.48.0: 2358 | version "1.48.0" 2359 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" 2360 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== 2361 | 2362 | mime-types@^2.1.12, mime-types@~2.1.19: 2363 | version "2.1.31" 2364 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" 2365 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== 2366 | dependencies: 2367 | mime-db "1.48.0" 2368 | 2369 | minimatch@^3.0.4: 2370 | version "3.0.4" 2371 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2372 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 2373 | dependencies: 2374 | brace-expansion "^1.1.7" 2375 | 2376 | minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: 2377 | version "1.2.5" 2378 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 2379 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 2380 | 2381 | mixin-deep@^1.2.0: 2382 | version "1.3.2" 2383 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 2384 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 2385 | dependencies: 2386 | for-in "^1.0.2" 2387 | is-extendable "^1.0.1" 2388 | 2389 | mkdirp@0.x, mkdirp@^0.5.1: 2390 | version "0.5.5" 2391 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 2392 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 2393 | dependencies: 2394 | minimist "^1.2.5" 2395 | 2396 | ms@2.0.0: 2397 | version "2.0.0" 2398 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2399 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 2400 | 2401 | ms@2.1.2: 2402 | version "2.1.2" 2403 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2404 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2405 | 2406 | nan@^2.12.1: 2407 | version "2.14.2" 2408 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 2409 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 2410 | 2411 | nanomatch@^1.2.9: 2412 | version "1.2.13" 2413 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2414 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 2415 | dependencies: 2416 | arr-diff "^4.0.0" 2417 | array-unique "^0.3.2" 2418 | define-property "^2.0.2" 2419 | extend-shallow "^3.0.2" 2420 | fragment-cache "^0.2.1" 2421 | is-windows "^1.0.2" 2422 | kind-of "^6.0.2" 2423 | object.pick "^1.3.0" 2424 | regex-not "^1.0.0" 2425 | snapdragon "^0.8.1" 2426 | to-regex "^3.0.1" 2427 | 2428 | natural-compare@^1.4.0: 2429 | version "1.4.0" 2430 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2431 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 2432 | 2433 | nice-try@^1.0.4: 2434 | version "1.0.5" 2435 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 2436 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 2437 | 2438 | node-int64@^0.4.0: 2439 | version "0.4.0" 2440 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2441 | integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= 2442 | 2443 | node-modules-regexp@^1.0.0: 2444 | version "1.0.0" 2445 | resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 2446 | integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 2447 | 2448 | node-notifier@^5.4.2: 2449 | version "5.4.5" 2450 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" 2451 | integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== 2452 | dependencies: 2453 | growly "^1.3.0" 2454 | is-wsl "^1.1.0" 2455 | semver "^5.5.0" 2456 | shellwords "^0.1.1" 2457 | which "^1.3.0" 2458 | 2459 | node-releases@^1.1.71: 2460 | version "1.1.73" 2461 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" 2462 | integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== 2463 | 2464 | normalize-package-data@^2.3.2: 2465 | version "2.5.0" 2466 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 2467 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 2468 | dependencies: 2469 | hosted-git-info "^2.1.4" 2470 | resolve "^1.10.0" 2471 | semver "2 || 3 || 4 || 5" 2472 | validate-npm-package-license "^3.0.1" 2473 | 2474 | normalize-path@^2.1.1: 2475 | version "2.1.1" 2476 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2477 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 2478 | dependencies: 2479 | remove-trailing-separator "^1.0.1" 2480 | 2481 | npm-run-path@^2.0.0: 2482 | version "2.0.2" 2483 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2484 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 2485 | dependencies: 2486 | path-key "^2.0.0" 2487 | 2488 | nwsapi@^2.0.7: 2489 | version "2.2.0" 2490 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" 2491 | integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== 2492 | 2493 | oauth-sign@~0.9.0: 2494 | version "0.9.0" 2495 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 2496 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 2497 | 2498 | object-assign@^4.1.1: 2499 | version "4.1.1" 2500 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2501 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 2502 | 2503 | object-copy@^0.1.0: 2504 | version "0.1.0" 2505 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2506 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 2507 | dependencies: 2508 | copy-descriptor "^0.1.0" 2509 | define-property "^0.2.5" 2510 | kind-of "^3.0.3" 2511 | 2512 | object-inspect@^1.10.3: 2513 | version "1.10.3" 2514 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" 2515 | integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== 2516 | 2517 | object-keys@^1.0.12, object-keys@^1.1.1: 2518 | version "1.1.1" 2519 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2520 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2521 | 2522 | object-visit@^1.0.0: 2523 | version "1.0.1" 2524 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2525 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 2526 | dependencies: 2527 | isobject "^3.0.0" 2528 | 2529 | object.assign@^4.1.2: 2530 | version "4.1.2" 2531 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 2532 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 2533 | dependencies: 2534 | call-bind "^1.0.0" 2535 | define-properties "^1.1.3" 2536 | has-symbols "^1.0.1" 2537 | object-keys "^1.1.1" 2538 | 2539 | object.getownpropertydescriptors@^2.1.1: 2540 | version "2.1.2" 2541 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" 2542 | integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== 2543 | dependencies: 2544 | call-bind "^1.0.2" 2545 | define-properties "^1.1.3" 2546 | es-abstract "^1.18.0-next.2" 2547 | 2548 | object.pick@^1.3.0: 2549 | version "1.3.0" 2550 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2551 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 2552 | dependencies: 2553 | isobject "^3.0.1" 2554 | 2555 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2556 | version "1.4.0" 2557 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2558 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2559 | dependencies: 2560 | wrappy "1" 2561 | 2562 | optionator@^0.8.1: 2563 | version "0.8.3" 2564 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 2565 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 2566 | dependencies: 2567 | deep-is "~0.1.3" 2568 | fast-levenshtein "~2.0.6" 2569 | levn "~0.3.0" 2570 | prelude-ls "~1.1.2" 2571 | type-check "~0.3.2" 2572 | word-wrap "~1.2.3" 2573 | 2574 | p-each-series@^1.0.0: 2575 | version "1.0.0" 2576 | resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" 2577 | integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= 2578 | dependencies: 2579 | p-reduce "^1.0.0" 2580 | 2581 | p-finally@^1.0.0: 2582 | version "1.0.0" 2583 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2584 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 2585 | 2586 | p-limit@^2.0.0: 2587 | version "2.3.0" 2588 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2589 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2590 | dependencies: 2591 | p-try "^2.0.0" 2592 | 2593 | p-locate@^3.0.0: 2594 | version "3.0.0" 2595 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 2596 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 2597 | dependencies: 2598 | p-limit "^2.0.0" 2599 | 2600 | p-reduce@^1.0.0: 2601 | version "1.0.0" 2602 | resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" 2603 | integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= 2604 | 2605 | p-try@^2.0.0: 2606 | version "2.2.0" 2607 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2608 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2609 | 2610 | parse-json@^4.0.0: 2611 | version "4.0.0" 2612 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 2613 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 2614 | dependencies: 2615 | error-ex "^1.3.1" 2616 | json-parse-better-errors "^1.0.1" 2617 | 2618 | parse5@4.0.0: 2619 | version "4.0.0" 2620 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" 2621 | integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== 2622 | 2623 | pascalcase@^0.1.1: 2624 | version "0.1.1" 2625 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2626 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 2627 | 2628 | path-exists@^3.0.0: 2629 | version "3.0.0" 2630 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2631 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2632 | 2633 | path-is-absolute@^1.0.0: 2634 | version "1.0.1" 2635 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2636 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2637 | 2638 | path-key@^2.0.0, path-key@^2.0.1: 2639 | version "2.0.1" 2640 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2641 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2642 | 2643 | path-parse@^1.0.6: 2644 | version "1.0.7" 2645 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2646 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2647 | 2648 | path-type@^3.0.0: 2649 | version "3.0.0" 2650 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2651 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 2652 | dependencies: 2653 | pify "^3.0.0" 2654 | 2655 | performance-now@^2.1.0: 2656 | version "2.1.0" 2657 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2658 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 2659 | 2660 | pify@^3.0.0: 2661 | version "3.0.0" 2662 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2663 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2664 | 2665 | pify@^4.0.1: 2666 | version "4.0.1" 2667 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 2668 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 2669 | 2670 | pirates@^4.0.1: 2671 | version "4.0.1" 2672 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" 2673 | integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== 2674 | dependencies: 2675 | node-modules-regexp "^1.0.0" 2676 | 2677 | pkg-dir@^3.0.0: 2678 | version "3.0.0" 2679 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 2680 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 2681 | dependencies: 2682 | find-up "^3.0.0" 2683 | 2684 | pn@^1.1.0: 2685 | version "1.1.0" 2686 | resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" 2687 | integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== 2688 | 2689 | posix-character-classes@^0.1.0: 2690 | version "0.1.1" 2691 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2692 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 2693 | 2694 | prelude-ls@~1.1.2: 2695 | version "1.1.2" 2696 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2697 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 2698 | 2699 | prettier@^1.18.2: 2700 | version "1.19.1" 2701 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 2702 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 2703 | 2704 | pretty-format@^24.9.0: 2705 | version "24.9.0" 2706 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" 2707 | integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== 2708 | dependencies: 2709 | "@jest/types" "^24.9.0" 2710 | ansi-regex "^4.0.0" 2711 | ansi-styles "^3.2.0" 2712 | react-is "^16.8.4" 2713 | 2714 | prompts@^2.0.1: 2715 | version "2.4.1" 2716 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" 2717 | integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== 2718 | dependencies: 2719 | kleur "^3.0.3" 2720 | sisteransi "^1.0.5" 2721 | 2722 | prop-types@^15.6.2: 2723 | version "15.7.2" 2724 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 2725 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 2726 | dependencies: 2727 | loose-envify "^1.4.0" 2728 | object-assign "^4.1.1" 2729 | react-is "^16.8.1" 2730 | 2731 | psl@^1.1.28: 2732 | version "1.8.0" 2733 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 2734 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 2735 | 2736 | pump@^3.0.0: 2737 | version "3.0.0" 2738 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2739 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 2740 | dependencies: 2741 | end-of-stream "^1.1.0" 2742 | once "^1.3.1" 2743 | 2744 | punycode@^2.1.0, punycode@^2.1.1: 2745 | version "2.1.1" 2746 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2747 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2748 | 2749 | qs@~6.5.2: 2750 | version "6.5.2" 2751 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 2752 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 2753 | 2754 | react-dom@^16.9.0: 2755 | version "16.14.0" 2756 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" 2757 | integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== 2758 | dependencies: 2759 | loose-envify "^1.1.0" 2760 | object-assign "^4.1.1" 2761 | prop-types "^15.6.2" 2762 | scheduler "^0.19.1" 2763 | 2764 | react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: 2765 | version "16.13.1" 2766 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2767 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 2768 | 2769 | react-test-renderer@^16.9.0: 2770 | version "16.14.0" 2771 | resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" 2772 | integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== 2773 | dependencies: 2774 | object-assign "^4.1.1" 2775 | prop-types "^15.6.2" 2776 | react-is "^16.8.6" 2777 | scheduler "^0.19.1" 2778 | 2779 | react@^16.9.0: 2780 | version "16.14.0" 2781 | resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" 2782 | integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== 2783 | dependencies: 2784 | loose-envify "^1.1.0" 2785 | object-assign "^4.1.1" 2786 | prop-types "^15.6.2" 2787 | 2788 | read-pkg-up@^4.0.0: 2789 | version "4.0.0" 2790 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 2791 | integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== 2792 | dependencies: 2793 | find-up "^3.0.0" 2794 | read-pkg "^3.0.0" 2795 | 2796 | read-pkg@^3.0.0: 2797 | version "3.0.0" 2798 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2799 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2800 | dependencies: 2801 | load-json-file "^4.0.0" 2802 | normalize-package-data "^2.3.2" 2803 | path-type "^3.0.0" 2804 | 2805 | realpath-native@^1.1.0: 2806 | version "1.1.0" 2807 | resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" 2808 | integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== 2809 | dependencies: 2810 | util.promisify "^1.0.0" 2811 | 2812 | regex-not@^1.0.0, regex-not@^1.0.2: 2813 | version "1.0.2" 2814 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2815 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 2816 | dependencies: 2817 | extend-shallow "^3.0.2" 2818 | safe-regex "^1.1.0" 2819 | 2820 | remove-trailing-separator@^1.0.1: 2821 | version "1.1.0" 2822 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2823 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 2824 | 2825 | repeat-element@^1.1.2: 2826 | version "1.1.4" 2827 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" 2828 | integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== 2829 | 2830 | repeat-string@^1.6.1: 2831 | version "1.6.1" 2832 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2833 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 2834 | 2835 | request-promise-core@1.1.4: 2836 | version "1.1.4" 2837 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" 2838 | integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== 2839 | dependencies: 2840 | lodash "^4.17.19" 2841 | 2842 | request-promise-native@^1.0.5: 2843 | version "1.0.9" 2844 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" 2845 | integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== 2846 | dependencies: 2847 | request-promise-core "1.1.4" 2848 | stealthy-require "^1.1.1" 2849 | tough-cookie "^2.3.3" 2850 | 2851 | request@^2.87.0: 2852 | version "2.88.2" 2853 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 2854 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 2855 | dependencies: 2856 | aws-sign2 "~0.7.0" 2857 | aws4 "^1.8.0" 2858 | caseless "~0.12.0" 2859 | combined-stream "~1.0.6" 2860 | extend "~3.0.2" 2861 | forever-agent "~0.6.1" 2862 | form-data "~2.3.2" 2863 | har-validator "~5.1.3" 2864 | http-signature "~1.2.0" 2865 | is-typedarray "~1.0.0" 2866 | isstream "~0.1.2" 2867 | json-stringify-safe "~5.0.1" 2868 | mime-types "~2.1.19" 2869 | oauth-sign "~0.9.0" 2870 | performance-now "^2.1.0" 2871 | qs "~6.5.2" 2872 | safe-buffer "^5.1.2" 2873 | tough-cookie "~2.5.0" 2874 | tunnel-agent "^0.6.0" 2875 | uuid "^3.3.2" 2876 | 2877 | require-directory@^2.1.1: 2878 | version "2.1.1" 2879 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2880 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2881 | 2882 | require-main-filename@^2.0.0: 2883 | version "2.0.0" 2884 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2885 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2886 | 2887 | reselect@^4.0.0: 2888 | version "4.0.0" 2889 | resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" 2890 | integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== 2891 | 2892 | resolve-cwd@^2.0.0: 2893 | version "2.0.0" 2894 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" 2895 | integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= 2896 | dependencies: 2897 | resolve-from "^3.0.0" 2898 | 2899 | resolve-from@^3.0.0: 2900 | version "3.0.0" 2901 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 2902 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= 2903 | 2904 | resolve-url@^0.2.1: 2905 | version "0.2.1" 2906 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2907 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 2908 | 2909 | resolve@1.1.7: 2910 | version "1.1.7" 2911 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2912 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 2913 | 2914 | resolve@1.x, resolve@^1.10.0: 2915 | version "1.20.0" 2916 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 2917 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 2918 | dependencies: 2919 | is-core-module "^2.2.0" 2920 | path-parse "^1.0.6" 2921 | 2922 | ret@~0.1.10: 2923 | version "0.1.15" 2924 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2925 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 2926 | 2927 | rimraf@^2.5.4, rimraf@^2.6.3: 2928 | version "2.7.1" 2929 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2930 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2931 | dependencies: 2932 | glob "^7.1.3" 2933 | 2934 | rsvp@^4.8.4: 2935 | version "4.8.5" 2936 | resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" 2937 | integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== 2938 | 2939 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 2940 | version "5.2.1" 2941 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2942 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2943 | 2944 | safe-buffer@~5.1.1: 2945 | version "5.1.2" 2946 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2947 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2948 | 2949 | safe-regex@^1.1.0: 2950 | version "1.1.0" 2951 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2952 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 2953 | dependencies: 2954 | ret "~0.1.10" 2955 | 2956 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2957 | version "2.1.2" 2958 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2959 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2960 | 2961 | sane@^4.0.3: 2962 | version "4.1.0" 2963 | resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" 2964 | integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== 2965 | dependencies: 2966 | "@cnakazawa/watch" "^1.0.3" 2967 | anymatch "^2.0.0" 2968 | capture-exit "^2.0.0" 2969 | exec-sh "^0.3.2" 2970 | execa "^1.0.0" 2971 | fb-watchman "^2.0.0" 2972 | micromatch "^3.1.4" 2973 | minimist "^1.1.1" 2974 | walker "~1.0.5" 2975 | 2976 | sax@^1.2.4: 2977 | version "1.2.4" 2978 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2979 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 2980 | 2981 | scheduler@^0.19.1: 2982 | version "0.19.1" 2983 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" 2984 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== 2985 | dependencies: 2986 | loose-envify "^1.1.0" 2987 | object-assign "^4.1.1" 2988 | 2989 | "semver@2 || 3 || 4 || 5", semver@^5.5, semver@^5.5.0, semver@^5.6.0: 2990 | version "5.7.1" 2991 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2992 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2993 | 2994 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 2995 | version "6.3.0" 2996 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2997 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2998 | 2999 | set-blocking@^2.0.0: 3000 | version "2.0.0" 3001 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 3002 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 3003 | 3004 | set-value@^2.0.0, set-value@^2.0.1: 3005 | version "2.0.1" 3006 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 3007 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 3008 | dependencies: 3009 | extend-shallow "^2.0.1" 3010 | is-extendable "^0.1.1" 3011 | is-plain-object "^2.0.3" 3012 | split-string "^3.0.1" 3013 | 3014 | shebang-command@^1.2.0: 3015 | version "1.2.0" 3016 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 3017 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 3018 | dependencies: 3019 | shebang-regex "^1.0.0" 3020 | 3021 | shebang-regex@^1.0.0: 3022 | version "1.0.0" 3023 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 3024 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 3025 | 3026 | shellwords@^0.1.1: 3027 | version "0.1.1" 3028 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 3029 | integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== 3030 | 3031 | signal-exit@^3.0.0, signal-exit@^3.0.2: 3032 | version "3.0.3" 3033 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 3034 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 3035 | 3036 | sisteransi@^1.0.5: 3037 | version "1.0.5" 3038 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 3039 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 3040 | 3041 | slash@^2.0.0: 3042 | version "2.0.0" 3043 | resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" 3044 | integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== 3045 | 3046 | snapdragon-node@^2.0.1: 3047 | version "2.1.1" 3048 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 3049 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 3050 | dependencies: 3051 | define-property "^1.0.0" 3052 | isobject "^3.0.0" 3053 | snapdragon-util "^3.0.1" 3054 | 3055 | snapdragon-util@^3.0.1: 3056 | version "3.0.1" 3057 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 3058 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 3059 | dependencies: 3060 | kind-of "^3.2.0" 3061 | 3062 | snapdragon@^0.8.1: 3063 | version "0.8.2" 3064 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 3065 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 3066 | dependencies: 3067 | base "^0.11.1" 3068 | debug "^2.2.0" 3069 | define-property "^0.2.5" 3070 | extend-shallow "^2.0.1" 3071 | map-cache "^0.2.2" 3072 | source-map "^0.5.6" 3073 | source-map-resolve "^0.5.0" 3074 | use "^3.1.0" 3075 | 3076 | source-map-resolve@^0.5.0: 3077 | version "0.5.3" 3078 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" 3079 | integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== 3080 | dependencies: 3081 | atob "^2.1.2" 3082 | decode-uri-component "^0.2.0" 3083 | resolve-url "^0.2.1" 3084 | source-map-url "^0.4.0" 3085 | urix "^0.1.0" 3086 | 3087 | source-map-support@^0.5.6: 3088 | version "0.5.19" 3089 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 3090 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 3091 | dependencies: 3092 | buffer-from "^1.0.0" 3093 | source-map "^0.6.0" 3094 | 3095 | source-map-url@^0.4.0: 3096 | version "0.4.1" 3097 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" 3098 | integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== 3099 | 3100 | source-map@^0.5.0, source-map@^0.5.6: 3101 | version "0.5.7" 3102 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 3103 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 3104 | 3105 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 3106 | version "0.6.1" 3107 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 3108 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 3109 | 3110 | spdx-correct@^3.0.0: 3111 | version "3.1.1" 3112 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 3113 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 3114 | dependencies: 3115 | spdx-expression-parse "^3.0.0" 3116 | spdx-license-ids "^3.0.0" 3117 | 3118 | spdx-exceptions@^2.1.0: 3119 | version "2.3.0" 3120 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 3121 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 3122 | 3123 | spdx-expression-parse@^3.0.0: 3124 | version "3.0.1" 3125 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 3126 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 3127 | dependencies: 3128 | spdx-exceptions "^2.1.0" 3129 | spdx-license-ids "^3.0.0" 3130 | 3131 | spdx-license-ids@^3.0.0: 3132 | version "3.0.9" 3133 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" 3134 | integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== 3135 | 3136 | split-string@^3.0.1, split-string@^3.0.2: 3137 | version "3.1.0" 3138 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 3139 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 3140 | dependencies: 3141 | extend-shallow "^3.0.0" 3142 | 3143 | sshpk@^1.7.0: 3144 | version "1.16.1" 3145 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 3146 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 3147 | dependencies: 3148 | asn1 "~0.2.3" 3149 | assert-plus "^1.0.0" 3150 | bcrypt-pbkdf "^1.0.0" 3151 | dashdash "^1.12.0" 3152 | ecc-jsbn "~0.1.1" 3153 | getpass "^0.1.1" 3154 | jsbn "~0.1.0" 3155 | safer-buffer "^2.0.2" 3156 | tweetnacl "~0.14.0" 3157 | 3158 | stack-utils@^1.0.1: 3159 | version "1.0.5" 3160 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" 3161 | integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== 3162 | dependencies: 3163 | escape-string-regexp "^2.0.0" 3164 | 3165 | static-extend@^0.1.1: 3166 | version "0.1.2" 3167 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 3168 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 3169 | dependencies: 3170 | define-property "^0.2.5" 3171 | object-copy "^0.1.0" 3172 | 3173 | stealthy-require@^1.1.1: 3174 | version "1.1.1" 3175 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 3176 | integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= 3177 | 3178 | string-length@^2.0.0: 3179 | version "2.0.0" 3180 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" 3181 | integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= 3182 | dependencies: 3183 | astral-regex "^1.0.0" 3184 | strip-ansi "^4.0.0" 3185 | 3186 | string-width@^3.0.0, string-width@^3.1.0: 3187 | version "3.1.0" 3188 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 3189 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 3190 | dependencies: 3191 | emoji-regex "^7.0.1" 3192 | is-fullwidth-code-point "^2.0.0" 3193 | strip-ansi "^5.1.0" 3194 | 3195 | string.prototype.trimend@^1.0.4: 3196 | version "1.0.4" 3197 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 3198 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 3199 | dependencies: 3200 | call-bind "^1.0.2" 3201 | define-properties "^1.1.3" 3202 | 3203 | string.prototype.trimstart@^1.0.4: 3204 | version "1.0.4" 3205 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 3206 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 3207 | dependencies: 3208 | call-bind "^1.0.2" 3209 | define-properties "^1.1.3" 3210 | 3211 | strip-ansi@^4.0.0: 3212 | version "4.0.0" 3213 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 3214 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 3215 | dependencies: 3216 | ansi-regex "^3.0.0" 3217 | 3218 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 3219 | version "5.2.0" 3220 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 3221 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 3222 | dependencies: 3223 | ansi-regex "^4.1.0" 3224 | 3225 | strip-bom@^3.0.0: 3226 | version "3.0.0" 3227 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 3228 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 3229 | 3230 | strip-eof@^1.0.0: 3231 | version "1.0.0" 3232 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 3233 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 3234 | 3235 | supports-color@^5.3.0: 3236 | version "5.5.0" 3237 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 3238 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 3239 | dependencies: 3240 | has-flag "^3.0.0" 3241 | 3242 | supports-color@^6.1.0: 3243 | version "6.1.0" 3244 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 3245 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 3246 | dependencies: 3247 | has-flag "^3.0.0" 3248 | 3249 | symbol-tree@^3.2.2: 3250 | version "3.2.4" 3251 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 3252 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 3253 | 3254 | test-exclude@^5.2.3: 3255 | version "5.2.3" 3256 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" 3257 | integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== 3258 | dependencies: 3259 | glob "^7.1.3" 3260 | minimatch "^3.0.4" 3261 | read-pkg-up "^4.0.0" 3262 | require-main-filename "^2.0.0" 3263 | 3264 | throat@^4.0.0: 3265 | version "4.1.0" 3266 | resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" 3267 | integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= 3268 | 3269 | tmpl@1.0.x: 3270 | version "1.0.4" 3271 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 3272 | integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= 3273 | 3274 | to-fast-properties@^2.0.0: 3275 | version "2.0.0" 3276 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 3277 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 3278 | 3279 | to-object-path@^0.3.0: 3280 | version "0.3.0" 3281 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3282 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 3283 | dependencies: 3284 | kind-of "^3.0.2" 3285 | 3286 | to-regex-range@^2.1.0: 3287 | version "2.1.1" 3288 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3289 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 3290 | dependencies: 3291 | is-number "^3.0.0" 3292 | repeat-string "^1.6.1" 3293 | 3294 | to-regex@^3.0.1, to-regex@^3.0.2: 3295 | version "3.0.2" 3296 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3297 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 3298 | dependencies: 3299 | define-property "^2.0.2" 3300 | extend-shallow "^3.0.2" 3301 | regex-not "^1.0.2" 3302 | safe-regex "^1.1.0" 3303 | 3304 | tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: 3305 | version "2.5.0" 3306 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 3307 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 3308 | dependencies: 3309 | psl "^1.1.28" 3310 | punycode "^2.1.1" 3311 | 3312 | tr46@^1.0.1: 3313 | version "1.0.1" 3314 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 3315 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= 3316 | dependencies: 3317 | punycode "^2.1.0" 3318 | 3319 | ts-jest@^24.0.2: 3320 | version "24.3.0" 3321 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869" 3322 | integrity sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ== 3323 | dependencies: 3324 | bs-logger "0.x" 3325 | buffer-from "1.x" 3326 | fast-json-stable-stringify "2.x" 3327 | json5 "2.x" 3328 | lodash.memoize "4.x" 3329 | make-error "1.x" 3330 | mkdirp "0.x" 3331 | resolve "1.x" 3332 | semver "^5.5" 3333 | yargs-parser "10.x" 3334 | 3335 | tslib@^1.9.3: 3336 | version "1.14.1" 3337 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 3338 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 3339 | 3340 | tunnel-agent@^0.6.0: 3341 | version "0.6.0" 3342 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 3343 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 3344 | dependencies: 3345 | safe-buffer "^5.0.1" 3346 | 3347 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 3348 | version "0.14.5" 3349 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 3350 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 3351 | 3352 | type-check@~0.3.2: 3353 | version "0.3.2" 3354 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 3355 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 3356 | dependencies: 3357 | prelude-ls "~1.1.2" 3358 | 3359 | typescript@^3.6.2: 3360 | version "3.9.10" 3361 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" 3362 | integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== 3363 | 3364 | unbox-primitive@^1.0.1: 3365 | version "1.0.1" 3366 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 3367 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 3368 | dependencies: 3369 | function-bind "^1.1.1" 3370 | has-bigints "^1.0.1" 3371 | has-symbols "^1.0.2" 3372 | which-boxed-primitive "^1.0.2" 3373 | 3374 | union-value@^1.0.0: 3375 | version "1.0.1" 3376 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" 3377 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== 3378 | dependencies: 3379 | arr-union "^3.1.0" 3380 | get-value "^2.0.6" 3381 | is-extendable "^0.1.1" 3382 | set-value "^2.0.1" 3383 | 3384 | unset-value@^1.0.0: 3385 | version "1.0.0" 3386 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3387 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 3388 | dependencies: 3389 | has-value "^0.3.1" 3390 | isobject "^3.0.0" 3391 | 3392 | uri-js@^4.2.2: 3393 | version "4.4.1" 3394 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 3395 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 3396 | dependencies: 3397 | punycode "^2.1.0" 3398 | 3399 | urix@^0.1.0: 3400 | version "0.1.0" 3401 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3402 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 3403 | 3404 | use@^3.1.0: 3405 | version "3.1.1" 3406 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3407 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 3408 | 3409 | util.promisify@^1.0.0: 3410 | version "1.1.1" 3411 | resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" 3412 | integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== 3413 | dependencies: 3414 | call-bind "^1.0.0" 3415 | define-properties "^1.1.3" 3416 | for-each "^0.3.3" 3417 | has-symbols "^1.0.1" 3418 | object.getownpropertydescriptors "^2.1.1" 3419 | 3420 | uuid@^3.3.2: 3421 | version "3.4.0" 3422 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 3423 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 3424 | 3425 | validate-npm-package-license@^3.0.1: 3426 | version "3.0.4" 3427 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3428 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 3429 | dependencies: 3430 | spdx-correct "^3.0.0" 3431 | spdx-expression-parse "^3.0.0" 3432 | 3433 | verror@1.10.0: 3434 | version "1.10.0" 3435 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 3436 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 3437 | dependencies: 3438 | assert-plus "^1.0.0" 3439 | core-util-is "1.0.2" 3440 | extsprintf "^1.2.0" 3441 | 3442 | w3c-hr-time@^1.0.1: 3443 | version "1.0.2" 3444 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" 3445 | integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== 3446 | dependencies: 3447 | browser-process-hrtime "^1.0.0" 3448 | 3449 | walker@^1.0.7, walker@~1.0.5: 3450 | version "1.0.7" 3451 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 3452 | integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= 3453 | dependencies: 3454 | makeerror "1.0.x" 3455 | 3456 | webidl-conversions@^4.0.2: 3457 | version "4.0.2" 3458 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 3459 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 3460 | 3461 | whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: 3462 | version "1.0.5" 3463 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 3464 | integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== 3465 | dependencies: 3466 | iconv-lite "0.4.24" 3467 | 3468 | whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: 3469 | version "2.3.0" 3470 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 3471 | integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== 3472 | 3473 | whatwg-url@^6.4.1: 3474 | version "6.5.0" 3475 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" 3476 | integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== 3477 | dependencies: 3478 | lodash.sortby "^4.7.0" 3479 | tr46 "^1.0.1" 3480 | webidl-conversions "^4.0.2" 3481 | 3482 | whatwg-url@^7.0.0: 3483 | version "7.1.0" 3484 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" 3485 | integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== 3486 | dependencies: 3487 | lodash.sortby "^4.7.0" 3488 | tr46 "^1.0.1" 3489 | webidl-conversions "^4.0.2" 3490 | 3491 | which-boxed-primitive@^1.0.2: 3492 | version "1.0.2" 3493 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 3494 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 3495 | dependencies: 3496 | is-bigint "^1.0.1" 3497 | is-boolean-object "^1.1.0" 3498 | is-number-object "^1.0.4" 3499 | is-string "^1.0.5" 3500 | is-symbol "^1.0.3" 3501 | 3502 | which-module@^2.0.0: 3503 | version "2.0.0" 3504 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3505 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 3506 | 3507 | which@^1.2.9, which@^1.3.0: 3508 | version "1.3.1" 3509 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3510 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 3511 | dependencies: 3512 | isexe "^2.0.0" 3513 | 3514 | word-wrap@~1.2.3: 3515 | version "1.2.3" 3516 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 3517 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 3518 | 3519 | wrap-ansi@^5.1.0: 3520 | version "5.1.0" 3521 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 3522 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 3523 | dependencies: 3524 | ansi-styles "^3.2.0" 3525 | string-width "^3.0.0" 3526 | strip-ansi "^5.0.0" 3527 | 3528 | wrappy@1: 3529 | version "1.0.2" 3530 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3531 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 3532 | 3533 | write-file-atomic@2.4.1: 3534 | version "2.4.1" 3535 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" 3536 | integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== 3537 | dependencies: 3538 | graceful-fs "^4.1.11" 3539 | imurmurhash "^0.1.4" 3540 | signal-exit "^3.0.2" 3541 | 3542 | ws@^5.2.0: 3543 | version "5.2.3" 3544 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" 3545 | integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== 3546 | dependencies: 3547 | async-limiter "~1.0.0" 3548 | 3549 | xml-name-validator@^3.0.0: 3550 | version "3.0.0" 3551 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 3552 | integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== 3553 | 3554 | y18n@^4.0.0: 3555 | version "4.0.3" 3556 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 3557 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 3558 | 3559 | yargs-parser@10.x: 3560 | version "10.1.0" 3561 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" 3562 | integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== 3563 | dependencies: 3564 | camelcase "^4.1.0" 3565 | 3566 | yargs-parser@^13.1.2: 3567 | version "13.1.2" 3568 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 3569 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 3570 | dependencies: 3571 | camelcase "^5.0.0" 3572 | decamelize "^1.2.0" 3573 | 3574 | yargs@^13.3.0: 3575 | version "13.3.2" 3576 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 3577 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 3578 | dependencies: 3579 | cliui "^5.0.0" 3580 | find-up "^3.0.0" 3581 | get-caller-file "^2.0.1" 3582 | require-directory "^2.1.1" 3583 | require-main-filename "^2.0.0" 3584 | set-blocking "^2.0.0" 3585 | string-width "^3.0.0" 3586 | which-module "^2.0.0" 3587 | y18n "^4.0.0" 3588 | yargs-parser "^13.1.2" 3589 | --------------------------------------------------------------------------------