├── .gitignore ├── public ├── robots.txt ├── favicon.ico └── index.html ├── .prettierrc ├── web-test-runner.config.js ├── src ├── index.css ├── index.tsx ├── 5th-episode-Functors │ ├── MapExample.tsx │ ├── index.tsx │ ├── BimapExample.tsx │ ├── Profunctor.tsx │ └── ContramapExample.tsx ├── shared │ ├── types │ │ └── user.types.ts │ └── utils │ │ └── safeRequest.ts ├── App.css ├── App.tsx ├── 3rd-episode-either-form-validation │ ├── either-form.css │ ├── validators.ts │ └── index.tsx ├── 1st-episode-ADTs │ ├── ADTsComponent.tsx │ └── index.tsx ├── 4th-episode-taskeither │ ├── styles.css │ └── index.tsx ├── logo.svg └── 2nd-episode-Type-Classes │ ├── example.types.ts │ └── example.test.ts ├── snowpack.config.js ├── README.md ├── tsconfig.json ├── package.json ├── types └── static.d.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .snowpack 2 | build 3 | node_modules -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "semi": false 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monsieurBoutte/fp-101-series/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /web-test-runner.config.js: -------------------------------------------------------------------------------- 1 | // NODE_ENV=test - Needed by "@snowpack/web-test-runner-plugin" 2 | process.env.NODE_ENV = 'test'; 3 | 4 | module.exports = { 5 | plugins: [require('@snowpack/web-test-runner-plugin')()], 6 | }; 7 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | import './index.css'; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById('root'), 11 | ); 12 | 13 | // Hot Module Replacement (HMR) - Remove this snippet to remove HMR. 14 | // Learn more: https://snowpack.dev/concepts/hot-module-replacement 15 | if (import.meta.hot) { 16 | import.meta.hot.accept(); 17 | } 18 | -------------------------------------------------------------------------------- /src/5th-episode-Functors/MapExample.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { pipe } from 'fp-ts/function' 3 | import * as O from 'fp-ts/Option' 4 | 5 | export const MapExample = () => { 6 | const noValue = O.none 7 | const someValue = O.some('Elliot') 8 | const [nameOption, setNameOption] = React.useState>( 9 | someValue, 10 | ) 11 | 12 | return pipe( 13 | nameOption, 14 | O.map((name) =>

my name is {name.toUpperCase()}!

), 15 | O.toNullable, 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/5th-episode-Functors/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { MapExample } from './MapExample' 4 | import { BimapExample } from './BimapExample' 5 | import { ContramapExample } from './ContramapExample' 6 | import { ProfunctorExample } from './Profunctor' 7 | 8 | export const FunctorExample = () => { 9 | return ( 10 |
11 |

Hello friend

12 | 13 | 14 | 15 | 16 |
17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /src/shared/types/user.types.ts: -------------------------------------------------------------------------------- 1 | import * as D from 'io-ts/Decoder' 2 | 3 | export type User = { 4 | id: number 5 | email: string 6 | first_name: string 7 | last_name: string 8 | avatar?: string 9 | } 10 | 11 | export const FetchUserPayload = D.type({ 12 | data: D.type({ 13 | id: D.number, 14 | email: D.string, 15 | first_name: D.string, 16 | last_name: D.string, 17 | avatar: D.nullable(D.string), 18 | }), 19 | }) 20 | 21 | export type FetchUserPayloadDecoded = D.TypeOf 22 | -------------------------------------------------------------------------------- /snowpack.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import("snowpack").SnowpackUserConfig } */ 2 | module.exports = { 3 | mount: { 4 | public: {url: '/', static: true}, 5 | src: {url: '/dist'}, 6 | }, 7 | plugins: [ 8 | '@snowpack/plugin-react-refresh', 9 | '@snowpack/plugin-dotenv', 10 | '@snowpack/plugin-typescript', 11 | ], 12 | routes: [ 13 | /* Enable an SPA Fallback in development: */ 14 | // {"match": "routes", "src": ".*", "dest": "/index.html"}, 15 | ], 16 | optimize: { 17 | /* Example: Bundle your final build: */ 18 | // "bundle": true, 19 | }, 20 | packageOptions: { 21 | /* ... */ 22 | }, 23 | devOptions: { 24 | /* ... */ 25 | }, 26 | buildOptions: { 27 | /* ... */ 28 | }, 29 | }; 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # New Project 2 | 3 | > ✨ Bootstrapped with Create Snowpack App (CSA). 4 | 5 | ## Available Scripts 6 | 7 | ### npm start 8 | 9 | Runs the app in the development mode. 10 | Open http://localhost:8080 to view it in the browser. 11 | 12 | The page will reload if you make edits. 13 | You will also see any lint errors in the console. 14 | 15 | ### npm run build 16 | 17 | Builds a static copy of your site to the `build/` folder. 18 | Your app is ready to be deployed! 19 | 20 | **For the best production performance:** Add a build bundler plugin like "@snowpack/plugin-webpack" to your `snowpack.config.js` config file. 21 | 22 | ### npm test 23 | 24 | Launches the application test runner. 25 | Run with the `--watch` flag (`npm test -- --watch`) to run in interactive watch mode. 26 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | .App code { 2 | background: #fff3; 3 | padding: 4px 8px; 4 | border-radius: 4px; 5 | } 6 | .App p { 7 | margin: 0.4rem; 8 | } 9 | 10 | .App-logo { 11 | height: 40vmin; 12 | pointer-events: none; 13 | } 14 | 15 | @media (prefers-reduced-motion: no-preference) { 16 | .App-logo { 17 | animation: App-logo-spin infinite 20s linear; 18 | } 19 | } 20 | 21 | .App-header { 22 | background-color: #282c34; 23 | min-height: 100vh; 24 | display: flex; 25 | flex-direction: column; 26 | align-items: center; 27 | justify-content: center; 28 | font-size: calc(10px + 2vmin); 29 | color: white; 30 | } 31 | 32 | .App-link { 33 | color: #61dafb; 34 | } 35 | 36 | @keyframes App-logo-spin { 37 | from { 38 | transform: rotate(0deg); 39 | } 40 | to { 41 | transform: rotate(360deg); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/shared/utils/safeRequest.ts: -------------------------------------------------------------------------------- 1 | import * as D from 'io-ts/Decoder' 2 | import * as E from 'fp-ts/lib/Either' 3 | import { pipe } from 'fp-ts/lib/function' 4 | import { get } from '@contactlab/appy' 5 | import { withBody } from '@contactlab/appy/combinators/body' 6 | import { withHeaders } from '@contactlab/appy/combinators/headers' 7 | import { 8 | withDecoder, 9 | Decoder, 10 | toDecoder, 11 | } from '@contactlab/appy/combinators/decoder' 12 | 13 | export type RequestStatus = 'idle' | 'loading' | 'error' | 'success' 14 | 15 | type Config = { 16 | url: string 17 | decoder: D.Decoder 18 | } 19 | 20 | const fromIots = (d: D.Decoder): Decoder => 21 | toDecoder(d.decode, (e) => new Error(D.draw(e))) 22 | 23 | export const safeRequest = (config: Config) => 24 | pipe(get, withDecoder(fromIots(config.decoder)))(config.url) 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src", "types"], 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "target": "esnext", 6 | "moduleResolution": "node", 7 | "jsx": "preserve", 8 | "baseUrl": "./", 9 | /* paths - import rewriting/resolving */ 10 | "paths": { 11 | // If you configured any Snowpack aliases, add them here. 12 | // Add this line to get types for streaming imports (packageOptions.source="remote"): 13 | // "*": [".snowpack/types/*"] 14 | // More info: https://www.snowpack.dev/guides/streaming-imports 15 | }, 16 | /* noEmit - Snowpack builds (emits) files, not tsc. */ 17 | "noEmit": true, 18 | /* Additional Options */ 19 | "strict": true, 20 | "skipLibCheck": true, 21 | "forceConsistentCasingInFileNames": true, 22 | "resolveJsonModule": true, 23 | "allowSyntheticDefaultImports": true, 24 | "importsNotUsedAsValues": "error" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Snowpack App 9 | 10 | 11 |
12 | 13 | 14 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { ADTsComponent } from './1st-episode-ADTs/ADTsComponent' 3 | import { EitherFormValidation } from './3rd-episode-either-form-validation' 4 | import { TaskEitherExample } from './4th-episode-taskeither' 5 | import { FunctorExample } from './5th-episode-Functors' 6 | 7 | import './App.css' 8 | 9 | const App = () => { 10 | return ( 11 |
12 |
13 | {/* Video 1 - ADTs */} 14 | {/* */} 15 | {/* Video 2 - doesn't have a component, it's only test */} 16 | {/* Video 3 - Either Form Validation */} 17 | {/* */} 18 | {/* Video 4 - TaskEither for network request */} 19 | {/* */} 20 | {/* Video 5 - Functor, Bifunctor, Profunctor examples */} 21 | {/* */} 22 | 23 |
24 |
25 | ) 26 | } 27 | 28 | export default App 29 | -------------------------------------------------------------------------------- /src/5th-episode-Functors/BimapExample.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { pipe } from 'fp-ts/function' 3 | import * as E from 'fp-ts/Either' 4 | 5 | export const BimapExample = () => { 6 | const leftValue = E.left('invalid form') 7 | const rightValue = E.right(6) 8 | const [formValidation, setFormValidation] = React.useState< 9 | E.Either 10 | >(rightValue) 11 | 12 | return pipe( 13 | formValidation, 14 | E.bimap( 15 | // onLeft i.e. error channel 16 | (errorMessage) => errorMessage.toUpperCase(), 17 | // onRight i.e. success channel 18 | (num) => num * 2, 19 | ), 20 | E.match( 21 | // onLeft i.e. error channel 22 | (errorMessage) => ( 23 |

24 | uh oh{' '} 25 | 26 | 🙀 27 | {' '} 28 | {errorMessage} 29 |

30 | ), 31 | // onRight i.e. success channel 32 | (num) =>

validated form with value: {num}

, 33 | ), 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "start": "snowpack dev", 4 | "build": "snowpack build", 5 | "test": "web-test-runner \"src/**/*.test.{ts,tsx}\"", 6 | "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 7 | "lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"" 8 | }, 9 | "dependencies": { 10 | "@contactlab/appy": "^4.0.1", 11 | "fp-ts": "^2.10.0", 12 | "io-ts": "^2.2.13", 13 | "react": "^17.0.0", 14 | "react-dom": "^17.0.0" 15 | }, 16 | "devDependencies": { 17 | "@snowpack/plugin-dotenv": "^2.0.5", 18 | "@snowpack/plugin-react-refresh": "^2.4.0", 19 | "@snowpack/plugin-typescript": "^1.2.0", 20 | "@snowpack/web-test-runner-plugin": "^0.2.0", 21 | "@testing-library/react": "^11.0.0", 22 | "@types/chai": "^4.2.13", 23 | "@types/mocha": "^8.2.0", 24 | "@types/react": "^17.0.0", 25 | "@types/react-dom": "^17.0.0", 26 | "@types/snowpack-env": "^2.3.2", 27 | "@web/test-runner": "^0.12.0", 28 | "chai": "^4.2.0", 29 | "prettier": "^2.0.5", 30 | "snowpack": "^3.0.1", 31 | "typescript": "^4.0.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/5th-episode-Functors/Profunctor.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { pipe, identity } from 'fp-ts/function' 3 | import * as R from 'fp-ts/Reader' 4 | 5 | interface UserProfile { 6 | handle: string 7 | email: string 8 | createdAt: string 9 | } 10 | 11 | export const ProfunctorExample = () => { 12 | // promap: (f: (d: D) => E, g: (a: A) => B) => (fea: R.Reader) => R.Reader 13 | // (a) => g(fea(f(a))) 14 | const promap = R.promap 15 | 16 | const foo: UserProfile = { 17 | handle: '@hello', 18 | email: 'foo@example.com', 19 | createdAt: '2021-10-04T16:46:23.560875Z', 20 | } 21 | 22 | const isHandleLongEnough = (config: UserProfile) => 23 | pipe( 24 | config, 25 | promap( 26 | // f: (d: D) => E 27 | (c: UserProfile) => ({ ...c, handle: c.handle + 'friend' }), 28 | // g: (a: A) => B 29 | (n: number) => n >= 12, 30 | // => (fea: R.Reader) 31 | )((c: UserProfile) => c.handle.length), 32 | // => R.Reader 33 | identity, 34 | ) 35 | 36 | return ( 37 |

is handle long enough? {isHandleLongEnough(foo) ? 'yes' : 'no'}

38 | ) 39 | } 40 | -------------------------------------------------------------------------------- /src/3rd-episode-either-form-validation/either-form.css: -------------------------------------------------------------------------------- 1 | .grid-container { 2 | display: grid; 3 | grid-template-columns: repeat(2, minmax(0, 1fr)); 4 | gap: 3rem; 5 | } 6 | 7 | .input-label { 8 | display: block; 9 | font-size: 1rem; 10 | line-height: 1.25rem; 11 | color: rgb(0, 238, 255); 12 | } 13 | 14 | .input-field { 15 | display: block; 16 | width: 100%; 17 | font-size: 1rem; 18 | line-height: 1.25rem; 19 | border: none; 20 | border-radius: 0.375rem; 21 | padding: 0.25rem 0.5rem; 22 | margin-bottom: 0.5rem; 23 | } 24 | 25 | .form-btn { 26 | display: inline-flex; 27 | align-items: center; 28 | padding-left: 0.625rem; 29 | padding-right: 0.625rem; 30 | padding-top: 0.375rem; 31 | padding-bottom: 0.375rem; 32 | box-sizing: border-box; 33 | border-color: transparent; 34 | font-weight: 500; 35 | font-size: medium; 36 | border-radius: 0.25rem; 37 | color: rgb(43, 43, 43); 38 | background-color: rgb(20, 196, 235); 39 | margin-top: 0.25rem; 40 | cursor: pointer; 41 | } 42 | 43 | .validation-output { 44 | border: 1px dashed rgb(0, 255, 179); 45 | color: rgb(0, 255, 179); 46 | border-radius: 0.25rem; 47 | font-size: large; 48 | padding: 0.5rem; 49 | } 50 | -------------------------------------------------------------------------------- /types/static.d.ts: -------------------------------------------------------------------------------- 1 | /* Use this file to declare any custom file extensions for importing */ 2 | /* Use this folder to also add/extend a package d.ts file, if needed. */ 3 | 4 | /* CSS MODULES */ 5 | declare module '*.module.css' { 6 | const classes: { [key: string]: string } 7 | export default classes 8 | } 9 | declare module '*.module.scss' { 10 | const classes: { [key: string]: string } 11 | export default classes 12 | } 13 | declare module '*.module.sass' { 14 | const classes: { [key: string]: string } 15 | export default classes 16 | } 17 | declare module '*.module.less' { 18 | const classes: { [key: string]: string } 19 | export default classes 20 | } 21 | declare module '*.module.styl' { 22 | const classes: { [key: string]: string } 23 | export default classes 24 | } 25 | 26 | /* CSS */ 27 | declare module '*.css' 28 | declare module '*.scss' 29 | declare module '*.sass' 30 | declare module '*.less' 31 | declare module '*.styl' 32 | 33 | /* IMAGES */ 34 | declare module '*.svg' { 35 | const ref: string 36 | export default ref 37 | } 38 | declare module '*.bmp' { 39 | const ref: string 40 | export default ref 41 | } 42 | declare module '*.gif' { 43 | const ref: string 44 | export default ref 45 | } 46 | declare module '*.jpg' { 47 | const ref: string 48 | export default ref 49 | } 50 | declare module '*.jpeg' { 51 | const ref: string 52 | export default ref 53 | } 54 | declare module '*.png' { 55 | const ref: string 56 | export default ref 57 | } 58 | 59 | /* CUSTOM: ADD YOUR OWN HERE */ 60 | -------------------------------------------------------------------------------- /src/1st-episode-ADTs/ADTsComponent.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as O from 'fp-ts/Option' 3 | import * as E from 'fp-ts/Either' 4 | import { RequestStatus, safeRequest } from '../shared/utils/safeRequest' 5 | import { 6 | FetchUserPayload, 7 | FetchUserPayloadDecoded, 8 | } from '../shared/types/user.types' 9 | import { pipe } from 'fp-ts/function' 10 | 11 | export const ADTsComponent = () => { 12 | const [avatarOpt, setAvatarOpt] = React.useState>(O.none) 13 | const [reqStatus, setReqStatus] = React.useState('idle') 14 | 15 | const fetchUser = safeRequest({ 16 | url: 'https://reqres.in/api/users/1', 17 | decoder: FetchUserPayload, 18 | }) 19 | 20 | React.useEffect(() => { 21 | setReqStatus('loading') 22 | fetchUser().then( 23 | E.fold( 24 | (err) => { 25 | console.log('onError -> E.Left', err) 26 | setReqStatus('error') 27 | }, 28 | ({ data: response }) => { 29 | console.log('onSuccess -> E.Right', response) 30 | pipe( 31 | O.fromNullable(response.data.avatar), 32 | O.fold( 33 | () => {}, 34 | (avatar) => { 35 | setAvatarOpt(O.some(avatar)) 36 | setReqStatus('success') 37 | }, 38 | ), 39 | ) 40 | }, 41 | ), 42 | ) 43 | }, []) 44 | 45 | return ( 46 | <> 47 | {`Option`} 48 |
{JSON.stringify(avatarOpt, null, 2)}
49 | Request Status 50 |
{JSON.stringify(reqStatus, null, 2)}
51 | 52 | ) 53 | } 54 | -------------------------------------------------------------------------------- /src/1st-episode-ADTs/index.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * The two most common ADT types are "product" and "sum". 3 | * Whether or not the data type is a product or sum can be derived 4 | * by counting the "inhabitants" or (values) of a given type. 5 | */ 6 | 7 | // ******* Option ******** 8 | type Option
= { _tag: 'None' } | { _tag: 'Some'; value: A } 9 | 10 | // ******* Either ******** 11 | //#region Either 12 | interface Left { 13 | readonly _tag: 'Left' 14 | readonly left: E 15 | } 16 | 17 | interface Right { 18 | readonly _tag: 'Right' 19 | readonly right: A 20 | } 21 | 22 | type Either = Left | Right 23 | //#endregion 24 | 25 | // ******* Remote Data ******** 26 | //#region Remote Data 27 | type RemoteProgress = { 28 | readonly loaded: number 29 | readonly total: Option 30 | } 31 | 32 | type RemoteInitial = { 33 | readonly _tag: 'RemoteInitial' 34 | } 35 | 36 | type RemotePending = { 37 | readonly _tag: 'RemotePending' 38 | readonly progress: Option 39 | } 40 | 41 | type RemoteFailure = { 42 | readonly _tag: 'RemoteFailure' 43 | readonly error: E 44 | } 45 | 46 | type RemoteSuccess = { 47 | readonly _tag: 'RemoteSuccess' 48 | readonly value: A 49 | } 50 | 51 | // reference: https://github.com/devexperts/remote-data-ts/blob/master/src/remote-data.ts#L68 52 | type RemoteData = 53 | | RemoteInitial 54 | | RemotePending 55 | | RemoteFailure 56 | | RemoteSuccess 57 | //#endregion 58 | 59 | //#region Product Type example 60 | type Hour = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 61 | type Period = 'AM' | 'PM' 62 | type Clock = [Hour, Period] 63 | 64 | // The Clock type has 12 * 2 = 24 inhabitants. 65 | //#endregion 66 | -------------------------------------------------------------------------------- /src/5th-episode-Functors/ContramapExample.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as A from 'fp-ts/ReadonlyArray' 3 | import * as D from 'fp-ts/Date' 4 | import * as Ord from 'fp-ts/Ord' 5 | import { pipe } from 'fp-ts/function' 6 | 7 | interface UserProfile { 8 | handle: string 9 | email: string 10 | createdAt: string 11 | } 12 | 13 | export const pluckDateFromProfile: Ord.Ord = pipe( 14 | D.Ord, 15 | Ord.contramap((a: UserProfile) => new Date(a.createdAt)), 16 | ) 17 | 18 | export const ContramapExample = () => { 19 | const userProfiles: Array = [ 20 | { 21 | handle: '@hello', 22 | email: 'foo@example.com', 23 | createdAt: '2021-10-04T16:46:23.560875Z', 24 | }, 25 | { 26 | handle: '@hi', 27 | email: 'bar@example.com', 28 | createdAt: '2020-12-04T16:46:23.560875Z', 29 | }, 30 | { 31 | handle: '@yo', 32 | email: 'baz@example.com', 33 | createdAt: '2021-09-04T16:46:23.560875Z', 34 | }, 35 | ] 36 | 37 | const sortedProfilesByDateCreated = (profiles: Array) => 38 | pipe(profiles, A.sort(pluckDateFromProfile)) 39 | 40 | return ( 41 |
42 |

unsorted profiles

43 |
50 |         {JSON.stringify(userProfiles, null, 2)}
51 |       
52 |

sorted profiles

53 |
60 |         {JSON.stringify(sortedProfilesByDateCreated(userProfiles), null, 2)}
61 |       
62 |
63 | ) 64 | } 65 | -------------------------------------------------------------------------------- /src/3rd-episode-either-form-validation/validators.ts: -------------------------------------------------------------------------------- 1 | import * as O from 'fp-ts/lib/Option' 2 | import * as E from 'fp-ts/lib/Either' 3 | import { pipe } from 'fp-ts/function' 4 | 5 | /** 6 | * Returns a E.left value if empty, 7 | * and a E.right if the value is not empty. 8 | */ 9 | export const nonEmpty = ( 10 | error: string, 11 | a: O.Option, 12 | ): E.Either, T> => { 13 | return O.isNone(a) ? E.left([error]) : E.right(a.value) 14 | } 15 | 16 | /** 17 | * Returns a E.left value if the value supplied isn't atleast 6 characters long, 18 | * and a E.right if the value is 6 characters or longer. 19 | */ 20 | export const minLength = ( 21 | strOpt: O.Option, 22 | ): Either, string> => 23 | pipe( 24 | strOpt, 25 | O.chain(O.fromPredicate((s) => s.length >= 6)), 26 | O.fold( 27 | () => E.left(['at least 6 characters']), 28 | (s) => E.right(s), 29 | ), 30 | ) 31 | 32 | /** 33 | * Returns a E.left value if the value supplied doesn't contain a single captial letter, 34 | * and a E.right if the value has atleast one captial letter. 35 | */ 36 | export const oneCapital = ( 37 | strOpt: O.Option, 38 | ): Either, string> => 39 | pipe( 40 | strOpt, 41 | O.chain(O.fromPredicate((s) => /[A-Z]/g.test(s))), 42 | O.fold( 43 | () => E.left(['at least one capital letter']), 44 | (s) => E.right(s), 45 | ), 46 | ) 47 | 48 | /** 49 | * Returns a E.left value if the value supplied doesn't contain at least one number, 50 | * and a E.right if the value has atleast one number. 51 | */ 52 | export const oneNumber = ( 53 | strOpt: O.Option, 54 | ): Either, string> => 55 | pipe( 56 | strOpt, 57 | O.chain(O.fromPredicate((s) => /[0-9]/g.test(s))), 58 | O.fold( 59 | () => E.left(['at least one number']), 60 | (s) => E.right(s), 61 | ), 62 | ) 63 | -------------------------------------------------------------------------------- /src/4th-episode-taskeither/styles.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --tw-border-opacity: 1; 3 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 4 | 0 2px 4px -1px rgba(0, 0, 0, 0.06); 5 | } 6 | 7 | h1 { 8 | text-align: center; 9 | color: rgb(255, 234, 0); 10 | } 11 | 12 | .PersonSection { 13 | min-height: 726px; 14 | } 15 | 16 | .Container { 17 | display: grid; 18 | grid-template-columns: repeat(2, minmax(0, 1fr)); 19 | gap: 0.75rem; 20 | list-style-type: none; 21 | } 22 | 23 | .Tile { 24 | padding: 2rem; 25 | background-color: rgb(48 53 64); 26 | border-radius: 0.375rem; 27 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 28 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 29 | } 30 | 31 | footer { 32 | text-align: center; 33 | justify-self: flex-end; 34 | flex-shrink: 1; 35 | padding-bottom: 2rem; 36 | } 37 | 38 | footer p { 39 | font-size: 1.5rem; 40 | color: rgb(112, 120, 136); 41 | } 42 | 43 | .Pagination { 44 | position: relative; 45 | display: inline-flex; 46 | z-index: 0; 47 | border-radius: 0.375rem; 48 | font-size: 0.875rem; 49 | font-weight: 500; 50 | color: rgba(107, 114, 128, 1); 51 | line-height: 1.25rem; 52 | background-color: rgba(255, 255, 255, 1); 53 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 54 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 55 | } 56 | 57 | .Pagination__button { 58 | cursor: pointer; 59 | position: relative; 60 | display: inline-flex; 61 | justify-items: center; 62 | padding: 0.5rem; 63 | box-sizing: border-box; 64 | border: none; 65 | border-color: rgba(209, 213, 219, var(--tw-border-opacity)); 66 | } 67 | 68 | .Left { 69 | border-top-left-radius: 0.375rem; 70 | border-bottom-left-radius: 0.375rem; 71 | } 72 | 73 | .Forward { 74 | border-top-right-radius: 0.375rem; 75 | border-bottom-right-radius: 0.375rem; 76 | } 77 | 78 | svg { 79 | width: 1.25rem; 80 | height: 1.25rem; 81 | } 82 | 83 | .FilmContent { 84 | min-height: 800px; 85 | min-width: 669px; 86 | } 87 | 88 | .Character { 89 | display: flex; 90 | align-items: center; 91 | color: rgb(245, 231, 72); 92 | } 93 | 94 | .GoBack { 95 | margin: 0.5rem; 96 | cursor: pointer; 97 | } 98 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/2nd-episode-Type-Classes/example.types.ts: -------------------------------------------------------------------------------- 1 | //#region HKT 2 | /** 3 | * The HKT (Higher Kinded Type) type is the fp-ts way to represent 4 | * a generic type constructor. 5 | * 6 | * so when you see HKT 7 | * - you can think to the type constructor F applied to the type X (i.e. F) 8 | */ 9 | interface HKT { 10 | readonly _URI: URI 11 | readonly _A: A 12 | } 13 | //#endregion 14 | 15 | //#region Functor 16 | //#region Functor Laws 17 | /** 18 | * associated laws: 19 | * Identity: F.map(fa, a => a) <-> fa 20 | * - note: (<->) just means these things are equivalent 21 | * Composition: F.map(fa, a => bc(ab(a))) <-> F.map(F.map(fa, ab), bc) 22 | */ 23 | //#endregion 24 | interface Functor { 25 | readonly URI: F 26 | readonly map: (fa: HKT, f: (a: A) => B) => HKT 27 | // basic example -> map: (Foo
, A => B) => Foo 28 | } 29 | //#endregion 30 | 31 | //#region Apply 32 | //#region Apply Laws 33 | /** 34 | * associated laws (in addition to the Functor laws): 35 | * Associative composition: F.ap(F.ap(F.map(fbc, bc => ab => a => bc(ab(a))), fab), fa) <-> F.ap(fbc, F.ap(fab, fa)) 36 | * note: `fbc` in F.ap(fbc, F.ap(fab, fa)) 👉 can be read as "Eff of Bee to Cee" or F C> 37 | */ 38 | //#endregion 39 | interface Apply extends Functor { 40 | readonly ap: (fab: HKT B>, fa: HKT) => HKT 41 | // basic example -> ap: (Foo B>, Foo) => Foo 42 | // another basic example -> ap: (Foo, Foo) => Foo<[A, B]> 43 | } 44 | //#endregion 45 | 46 | //#region Chain 47 | //#region Chain Laws 48 | /** 49 | * associated laws: 50 | * Associativity: F.chain(F.chain(fa, afb), bfc) <-> F.chain(fa, a => F.chain(afb(a), bfc)) 51 | */ 52 | //#endregion 53 | interface Chain extends Apply { 54 | readonly chain: (fa: HKT, f: (a: A) => HKT) => HKT 55 | // basic example -> chain: (Foo, (A => Foo)) => Foo 56 | } 57 | //#endregion 58 | 59 | //#region Applicative 60 | //#region Applicative Laws 61 | /** 62 | * Identity: A.ap(A.of(a => a), fa) <-> fa 63 | * Homomorphism: A.ap(A.of(ab), A.of(a)) <-> A.of(ab(a)) 64 | * Interchange: A.ap(fab, A.of(a)) <-> A.ap(A.of(ab => ab(a)), fab) 65 | */ 66 | //#endregion 67 | interface Applicative extends Apply { 68 | readonly of: (a: A) => HKT 69 | // basic example -> of: A => Foo 70 | } 71 | //#endregion 72 | -------------------------------------------------------------------------------- /src/2nd-episode-Type-Classes/example.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai' 2 | 3 | import * as Ap from 'fp-ts/Apply' 4 | import * as O from 'fp-ts/Option' 5 | import * as T from 'fp-ts/Task' 6 | import { pipe } from 'fp-ts/function' 7 | 8 | import type { User } from 'src/shared/types/user.types' 9 | 10 | type UserProfile = User & { 11 | account_balance: number 12 | favorite_quote?: string 13 | } 14 | 15 | const johnDoe: UserProfile = { 16 | id: 6, 17 | account_balance: 30000, 18 | first_name: 'John', 19 | last_name: 'Doe', 20 | email: 'johnDoe@example.com', 21 | avatar: 'example-photos.com/johnsAvatarPhoto', 22 | } 23 | 24 | const janeDoe: UserProfile = { 25 | id: 7, 26 | account_balance: 60000, 27 | first_name: 'Jane', 28 | last_name: 'Doe', 29 | email: 'janeDoe@example.com', 30 | favorite_quote: 31 | 'Almost always, the creative dedicated minority has made the world better', 32 | } 33 | 34 | const quoteOpt = (userOpt: O.Option) => 35 | pipe( 36 | userOpt, 37 | O.chain((x) => O.fromNullable(x.favorite_quote)), 38 | O.map((x) => x.toLocaleUpperCase()), 39 | O.map((x) => `'${x}' - MLK`), 40 | ) 41 | 42 | describe('Option', () => { 43 | it("can map values via it's Functor implementation", () => { 44 | const userOpt = O.some(johnDoe) 45 | 46 | expect( 47 | pipe( 48 | userOpt, 49 | O.map((x) => x.account_balance + 100), 50 | ), 51 | ).to.be.eql(O.some(30100)) 52 | 53 | expect( 54 | pipe( 55 | userOpt, 56 | O.map((x) => `${x.first_name} ${x.last_name}`), 57 | O.map((x) => x.toLocaleUpperCase()), 58 | ), 59 | ).to.be.eql(O.some('JOHN DOE')) 60 | }) 61 | 62 | it("can chain operations via it's Chain implementation", () => { 63 | const userJohnOpt = O.some(johnDoe) 64 | const userJaneOpt = O.some(janeDoe) 65 | 66 | const expected = 67 | "'ALMOST ALWAYS, THE CREATIVE DEDICATED MINORITY HAS MADE THE WORLD BETTER' - MLK" 68 | 69 | //#region Jane's assertion 70 | expect(quoteOpt(userJaneOpt)).to.be.eql(O.some(expected)) 71 | //#endregion 72 | 73 | //#region John's assertion 74 | expect(quoteOpt(userJohnOpt)).to.be.eql(O.none) 75 | //#endregion 76 | }) 77 | }) 78 | 79 | describe('Apply', () => { 80 | it('can handle sequential composition with an ADTs Applicative implementation', () => { 81 | const userJohnOpt = O.some(johnDoe) 82 | const userJaneOpt = O.some(janeDoe) 83 | 84 | const expected = 85 | "'ALMOST ALWAYS, THE CREATIVE DEDICATED MINORITY HAS MADE THE WORLD BETTER' - MLK" 86 | 87 | //#region Applicative test 88 | const sequenceOptionStruct = Ap.sequenceS(O.Applicative) 89 | 90 | const assertion = pipe( 91 | sequenceOptionStruct({ 92 | johnsQuote: pipe( 93 | userJohnOpt, 94 | quoteOpt, 95 | O.getOrElse(() => 'default quote'), 96 | O.some, 97 | ), 98 | janesQuote: pipe(userJaneOpt, quoteOpt), 99 | }), 100 | (x) => x, 101 | O.map((people) => ({ 102 | ...people, 103 | johnsQuote: people.johnsQuote.toLocaleUpperCase(), 104 | })), 105 | ) 106 | expect(assertion).to.be.eql( 107 | O.some({ 108 | janesQuote: expected, 109 | johnsQuote: 'DEFAULT QUOTE', 110 | }), 111 | ) 112 | //#endregion 113 | }) 114 | 115 | it('can handle parallel composition where the provided ADT supports it', () => { 116 | const sequentialExample = Ap.sequenceT(T.ApplicativeSeq)( 117 | T.delay(100)(T.of(1)), 118 | T.delay(100)(T.of(2)), 119 | T.delay(100)(T.of(3)), 120 | )().then((x) => x) 121 | // will evaluate in ~300ms 122 | 123 | const parallelExample = Ap.sequenceT(T.ApplicativePar)( 124 | T.delay(100)(T.of(1)), 125 | T.delay(100)(T.of(2)), 126 | T.delay(100)(T.of(3)), 127 | )().then((x) => x) 128 | // will evaluate in ~100ms 129 | }) 130 | }) 131 | -------------------------------------------------------------------------------- /src/3rd-episode-either-form-validation/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as O from 'fp-ts/Option' 3 | import * as E from 'fp-ts/Either' 4 | import * as A from 'fp-ts/Array' 5 | import * as Ap from 'fp-ts/Apply' 6 | 7 | import { pipe } from 'fp-ts/function' 8 | 9 | import { nonEmpty, minLength, oneCapital, oneNumber } from './validators' 10 | import './either-form.css' 11 | 12 | export const EitherFormValidation = () => { 13 | const [emailOpt, setEmailOpt] = React.useState>(O.none) 14 | const [pwOpt, setPwOpt] = React.useState>(O.none) 15 | const [validationErrors, setValidationErrors] = React.useState< 16 | O.Option> 17 | >(O.none) 18 | 19 | const applicativeValidation = E.getValidation(A.getMonoid()) 20 | const sequencedValidation = Ap.sequenceT(applicativeValidation) 21 | const validateInputField = ( 22 | emptyErrorMessage: string, 23 | strOpt: O.Option, 24 | ) => 25 | pipe( 26 | // run all validation checks in parallel 27 | sequencedValidation( 28 | nonEmpty(emptyErrorMessage, strOpt), 29 | minLength(strOpt), 30 | oneCapital(strOpt), 31 | oneNumber(strOpt), 32 | ), 33 | // pull out the first value 34 | E.map(([s]) => s), 35 | ) 36 | 37 | // parallel operations 38 | const handleFormValidation = () => 39 | pipe( 40 | sequencedValidation( 41 | validateInputField('email cannot be empty', emailOpt), 42 | validateInputField('password cannot be empty', pwOpt), 43 | ), 44 | E.fold( 45 | (errs) => setValidationErrors(O.some(errs)), 46 | ([email, password]) => { 47 | console.log( 48 | `%c validatedform -> ${JSON.stringify( 49 | { email, password }, 50 | null, 51 | 1, 52 | )}`, 53 | `background: #7f2bff; color: #fff; padding: 4px; border-radius: 2px;`, 54 | ) 55 | setValidationErrors(O.none) 56 | }, 57 | ), 58 | ) 59 | 60 | // fail-fast 61 | const doFormValidation = () => 62 | pipe( 63 | E.Do, 64 | E.bind('email', () => 65 | validateInputField('email cannot be empty', emailOpt), 66 | ), 67 | E.apS('password', validateInputField('password cannot be empty', pwOpt)), 68 | E.fold( 69 | (errs) => setValidationErrors(O.some(errs)), 70 | ({ email, password }) => { 71 | console.log( 72 | `%c validatedform -> ${JSON.stringify( 73 | { email, password }, 74 | null, 75 | 1, 76 | )}`, 77 | `background: #7f2bff; color: #fff; padding: 4px; border-radius: 2px;`, 78 | ) 79 | setValidationErrors(O.none) 80 | }, 81 | ), 82 | ) 83 | 84 | // accumulates 85 | // const apS = Ap.apS(E.getApplicativeValidation(A.getMonoid())) 86 | // const doAccumulatedFormValidation = () => 87 | // pipe( 88 | // E.Do, 89 | // E.bind('email', () => 90 | // validateInputField('email cannot be empty', emailOpt), 91 | // ), 92 | // apS('password', validateInputField('password cannot be empty', pwOpt)), 93 | // E.fold( 94 | // (errs) => setValidationErrors(O.some(errs)), 95 | // ({ email, password }) => { 96 | // console.log( 97 | // `%c validatedform -> ${JSON.stringify( 98 | // { email, password }, 99 | // null, 100 | // 1, 101 | // )}`, 102 | // `background: #7f2bff; color: #fff; padding: 4px; border-radius: 2px;`, 103 | // ) 104 | // setValidationErrors(O.none) 105 | // }, 106 | // ), 107 | // ) 108 | 109 | return ( 110 |
111 |
112 | 115 |
116 | 123 | setEmailOpt( 124 | e.target.value !== '' ? O.some(e.target.value) : O.none, 125 | ) 126 | } 127 | value={pipe(emailOpt, O.toUndefined)} 128 | /> 129 |
130 | 133 |
134 | 141 | setPwOpt(e.target.value !== '' ? O.some(e.target.value) : O.none) 142 | } 143 | value={pipe(pwOpt, O.toUndefined)} 144 | /> 145 |
146 | 153 |
154 |
155 | 166 |
177 |           {JSON.stringify(validationErrors, null, 2)}
178 |         
179 |
180 |
181 | ) 182 | } 183 | -------------------------------------------------------------------------------- /src/4th-episode-taskeither/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as TE from 'fp-ts/TaskEither' 3 | import * as D from 'io-ts/Decoder' 4 | import * as E from 'fp-ts/Either' 5 | import * as O from 'fp-ts/Option' 6 | import * as A from 'fp-ts/Array' 7 | import { flow, pipe } from 'fp-ts/function' 8 | import type { Task } from 'fp-ts/lib/Task' 9 | 10 | import './styles.css' 11 | 12 | const LIST_ALL_PEOPLE_URL = 'https://swapi.dev/api/people' 13 | const PERSON_COUNT = 10 14 | 15 | /** 16 | * TaskEither example using fetch requests and the Star Wars API. It requests 17 | * 10 people at a time allowing for you to paginate through all 82 people. 18 | */ 19 | export const TaskEitherExample = () => { 20 | // Create state to help manage TaskEither lifecycle 21 | const [matchPeople, getPeople] = useTaskEither(600) 22 | // Track the currently selected person 23 | const [person, setPerson] = React.useState>(O.none) 24 | // Track the current page for pagination 25 | const [page, setPage] = React.useState(1) 26 | // Go back, but no less than 1 27 | const back = React.useCallback(() => setPage((x) => Math.max(x - 1, 1)), []) 28 | // Go forwards 29 | const forward = React.useCallback( 30 | () => setPage((x) => Math.max(x + 1, 0)), 31 | [], 32 | ) 33 | 34 | // Request for people given the page that we are currently on 35 | React.useEffect( 36 | () => getPeople(makeRequest(createPeopleUrl(page), peoplePayloadDecoder)), 37 | [page], 38 | ) 39 | 40 | return ( 41 |
42 |

Star Wars {O.isSome(person) ? 'Films' : 'Characters'}

43 | 44 | {matchPeople( 45 | renderNone, 46 | renderLoading, 47 | renderError, 48 | ({ count, results: people }, isLoading) => 49 | pipe( 50 | person, 51 | O.match( 52 | () => { 53 | // Determine the range of values 54 | const start = Math.min(page * PERSON_COUNT, count) 55 | const end = Math.min(start + people.length, count) 56 | 57 | return ( 58 | <> 59 |
60 | {isLoading ? ( 61 | renderLoading() 62 | ) : ( 63 | 67 | )} 68 |
69 | 70 |
71 |

72 | Showing{' '} 73 | 74 | {start}-{end} 75 | {' '} 76 | of {count} 77 |

78 | 79 |
80 | 99 | 118 |
119 |
120 | 121 | ) 122 | }, 123 | (person) => ( 124 | setPerson(O.none)} 128 | /> 129 | ), 130 | ), 131 | ), 132 | )} 133 |
134 | ) 135 | } 136 | 137 | // Create a paginated people's URL 138 | const createPeopleUrl = (page: number) => { 139 | const url = new URL(LIST_ALL_PEOPLE_URL) 140 | 141 | url.searchParams.set('page', page.toString()) 142 | 143 | return url.toString() 144 | } 145 | 146 | type PersonListProps = { 147 | people: Array 148 | selectPerson: (person: Person) => void 149 | } 150 | 151 | /** 152 | * A list of people 153 | */ 154 | const PersonList = ({ people, selectPerson }: PersonListProps) => ( 155 | <> 156 |
    157 | {people.map((person) => ( 158 |
  • 159 | selectPerson(person)} 163 | /> 164 |
  • 165 | ))} 166 |
167 | 168 | ) 169 | 170 | type PersonNameProps = { 171 | person: Person 172 | onClick: () => void 173 | } 174 | 175 | /** 176 | * A component just for putting a person's name in a

tag 177 | */ 178 | const PersonName = ({ person, onClick }: PersonNameProps) => ( 179 |

{person.name}

180 | ) 181 | 182 | /** 183 | * Our view of a single person that has been selected from the list 184 | */ 185 | const PersonView = ({ person, goBack }: PersonViewProps) => { 186 | // Create a place to track a person's films 187 | const [matchFilms, getFilms] = useTaskEither>(600) 188 | 189 | React.useEffect(() => { 190 | // Give the ability to cancel our requests 191 | const controller = new AbortController() 192 | 193 | pipe( 194 | person.films, 195 | A.map((filmUrl) => makeRequest(filmUrl, filmDecoder, controller.signal)), 196 | TE.sequenceArray, 197 | getFilms, 198 | ) 199 | 200 | // When person changes we will cancel the previous requests 201 | return () => controller.abort() 202 | }, [person]) 203 | 204 | return ( 205 |
206 |
207 | 215 | 216 | 217 |

{person.name}

218 |
219 | 220 | {matchFilms(renderNone, renderLoading, renderError, (films) => ( 221 |
    222 | {films.map((film) => ( 223 |
  • 224 | {film.title} 225 |
  • 226 | ))} 227 |
228 | ))} 229 |
230 | ) 231 | } 232 | 233 | type PersonViewProps = { 234 | readonly person: Person 235 | readonly goBack: () => void 236 | } 237 | 238 | // Really basic rendering helpers 239 | const renderNone = () => null 240 | const renderError = (error: Error) =>
{error.message}
241 | const renderLoading = () =>

Loading...

242 | 243 | /** 244 | * Constructs a TaskEither that is capable of making a GET request that 245 | * will use the provided Decoder to validate the current type. Optionally 246 | * and AbortSignal can be passed along to support cancelation of the fetch request. 247 | */ 248 | function makeRequest
( 249 | url: string, 250 | decoder: D.Decoder, 251 | signal?: AbortSignal, 252 | ): TE.TaskEither { 253 | return TE.tryCatch( 254 | async () => { 255 | const response = await fetch(url, { signal }) 256 | const result = await response.json() 257 | const decoded = decoder.decode(result) 258 | 259 | if (E.isLeft(decoded)) { 260 | throw new TypeError(D.draw(decoded.left)) 261 | } 262 | 263 | return decoded.right 264 | }, 265 | (error): Error => 266 | error instanceof Error ? error : new Error(JSON.stringify(error)), 267 | ) 268 | } 269 | 270 | /** 271 | * Constructs React state for managing the lifecycle of a TaskEither with 272 | * the ability to pattern match over all of its states. Using the given timeToLoad 273 | * we can ensure that the user is able to see the process of loading ocurring. 274 | */ 275 | function useTaskEither(timeToLoad: number) { 276 | const [value, setValue] = React.useState>>(O.none) 277 | const [isLoading, setIsLoading] = React.useState(false) 278 | const run = React.useCallback((te: TE.TaskEither) => { 279 | const start = performance.now() 280 | 281 | const task = pipe( 282 | // Set Loading to true 283 | TE.fromIO(() => setIsLoading(true)), 284 | // Run the provided TaskEither 285 | TE.chain(() => te), 286 | // Simulate a longer load time if required for user experience 287 | TE.chainFirstTaskK(() => delay(timeToLoad - (performance.now() - start))), 288 | // Set loading back to false 289 | TE.chainFirst(() => TE.fromIO(() => setIsLoading(false))), 290 | ) 291 | 292 | // Run our task and then update our value with the Either 293 | task().then((either) => pipe(either, O.some, setValue)) 294 | }, []) 295 | 296 | // Pattern match over all possible states 297 | const match = React.useCallback( 298 | ( 299 | onNone: () => B, 300 | onLoading: () => C, 301 | onError: (error: E, isLoading: boolean) => D, 302 | onSuccess: (value: A, isLoading: boolean) => F, 303 | ) => 304 | pipe( 305 | value, 306 | O.matchW( 307 | () => (isLoading ? onLoading() : onNone()), 308 | E.matchW( 309 | (e) => onError(e, isLoading), 310 | (a) => onSuccess(a, isLoading), 311 | ), 312 | ), 313 | ), 314 | [value, isLoading], 315 | ) 316 | 317 | return [match, run] as const 318 | } 319 | 320 | const delay = (ms: number): Task => () => 321 | new Promise((resolve) => setTimeout(resolve, ms)) 322 | 323 | const filmDecoder = D.type({ 324 | title: D.string, 325 | episode_id: D.number, 326 | url: D.string, 327 | }) 328 | 329 | type Film = D.TypeOf 330 | 331 | const peopleDecoder = D.type({ 332 | name: D.string, 333 | films: D.array(D.string), 334 | }) 335 | 336 | type Person = D.TypeOf 337 | 338 | const peoplePayloadDecoder = D.type({ 339 | count: D.number, 340 | results: pipe( 341 | D.array(peopleDecoder), 342 | D.refine(A.isNonEmpty, 'NonEmptyArray'), 343 | ), 344 | }) 345 | 346 | export type PeoplePayload = D.TypeOf 347 | -------------------------------------------------------------------------------- /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.10.4", "@babel/code-frame@^7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/core@^7.0.0": 13 | version "7.12.10" 14 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" 15 | integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== 16 | dependencies: 17 | "@babel/code-frame" "^7.10.4" 18 | "@babel/generator" "^7.12.10" 19 | "@babel/helper-module-transforms" "^7.12.1" 20 | "@babel/helpers" "^7.12.5" 21 | "@babel/parser" "^7.12.10" 22 | "@babel/template" "^7.12.7" 23 | "@babel/traverse" "^7.12.10" 24 | "@babel/types" "^7.12.10" 25 | convert-source-map "^1.7.0" 26 | debug "^4.1.0" 27 | gensync "^1.0.0-beta.1" 28 | json5 "^2.1.2" 29 | lodash "^4.17.19" 30 | semver "^5.4.1" 31 | source-map "^0.5.0" 32 | 33 | "@babel/generator@^7.12.10", "@babel/generator@^7.12.11": 34 | version "7.12.11" 35 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" 36 | integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== 37 | dependencies: 38 | "@babel/types" "^7.12.11" 39 | jsesc "^2.5.1" 40 | source-map "^0.5.0" 41 | 42 | "@babel/helper-function-name@^7.12.11": 43 | version "7.12.11" 44 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" 45 | integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== 46 | dependencies: 47 | "@babel/helper-get-function-arity" "^7.12.10" 48 | "@babel/template" "^7.12.7" 49 | "@babel/types" "^7.12.11" 50 | 51 | "@babel/helper-get-function-arity@^7.12.10": 52 | version "7.12.10" 53 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" 54 | integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== 55 | dependencies: 56 | "@babel/types" "^7.12.10" 57 | 58 | "@babel/helper-member-expression-to-functions@^7.12.7": 59 | version "7.12.7" 60 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" 61 | integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== 62 | dependencies: 63 | "@babel/types" "^7.12.7" 64 | 65 | "@babel/helper-module-imports@^7.12.1": 66 | version "7.12.5" 67 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" 68 | integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== 69 | dependencies: 70 | "@babel/types" "^7.12.5" 71 | 72 | "@babel/helper-module-transforms@^7.12.1": 73 | version "7.12.1" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" 75 | integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== 76 | dependencies: 77 | "@babel/helper-module-imports" "^7.12.1" 78 | "@babel/helper-replace-supers" "^7.12.1" 79 | "@babel/helper-simple-access" "^7.12.1" 80 | "@babel/helper-split-export-declaration" "^7.11.0" 81 | "@babel/helper-validator-identifier" "^7.10.4" 82 | "@babel/template" "^7.10.4" 83 | "@babel/traverse" "^7.12.1" 84 | "@babel/types" "^7.12.1" 85 | lodash "^4.17.19" 86 | 87 | "@babel/helper-optimise-call-expression@^7.12.10": 88 | version "7.12.10" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" 90 | integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== 91 | dependencies: 92 | "@babel/types" "^7.12.10" 93 | 94 | "@babel/helper-plugin-utils@^7.10.4": 95 | version "7.10.4" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" 97 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== 98 | 99 | "@babel/helper-replace-supers@^7.12.1": 100 | version "7.12.11" 101 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" 102 | integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== 103 | dependencies: 104 | "@babel/helper-member-expression-to-functions" "^7.12.7" 105 | "@babel/helper-optimise-call-expression" "^7.12.10" 106 | "@babel/traverse" "^7.12.10" 107 | "@babel/types" "^7.12.11" 108 | 109 | "@babel/helper-simple-access@^7.12.1": 110 | version "7.12.1" 111 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" 112 | integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== 113 | dependencies: 114 | "@babel/types" "^7.12.1" 115 | 116 | "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": 117 | version "7.12.11" 118 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" 119 | integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== 120 | dependencies: 121 | "@babel/types" "^7.12.11" 122 | 123 | "@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": 124 | version "7.12.11" 125 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 126 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 127 | 128 | "@babel/helpers@^7.12.5": 129 | version "7.12.5" 130 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" 131 | integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== 132 | dependencies: 133 | "@babel/template" "^7.10.4" 134 | "@babel/traverse" "^7.12.5" 135 | "@babel/types" "^7.12.5" 136 | 137 | "@babel/highlight@^7.10.4": 138 | version "7.10.4" 139 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 140 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 141 | dependencies: 142 | "@babel/helper-validator-identifier" "^7.10.4" 143 | chalk "^2.0.0" 144 | js-tokens "^4.0.0" 145 | 146 | "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": 147 | version "7.12.11" 148 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" 149 | integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== 150 | 151 | "@babel/plugin-syntax-class-properties@^7.10.0": 152 | version "7.12.1" 153 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" 154 | integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== 155 | dependencies: 156 | "@babel/helper-plugin-utils" "^7.10.4" 157 | 158 | "@babel/runtime-corejs3@^7.10.2": 159 | version "7.12.5" 160 | resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" 161 | integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== 162 | dependencies: 163 | core-js-pure "^3.0.0" 164 | regenerator-runtime "^0.13.4" 165 | 166 | "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5": 167 | version "7.12.5" 168 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" 169 | integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== 170 | dependencies: 171 | regenerator-runtime "^0.13.4" 172 | 173 | "@babel/template@^7.10.4", "@babel/template@^7.12.7": 174 | version "7.12.7" 175 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" 176 | integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== 177 | dependencies: 178 | "@babel/code-frame" "^7.10.4" 179 | "@babel/parser" "^7.12.7" 180 | "@babel/types" "^7.12.7" 181 | 182 | "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": 183 | version "7.12.12" 184 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" 185 | integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== 186 | dependencies: 187 | "@babel/code-frame" "^7.12.11" 188 | "@babel/generator" "^7.12.11" 189 | "@babel/helper-function-name" "^7.12.11" 190 | "@babel/helper-split-export-declaration" "^7.12.11" 191 | "@babel/parser" "^7.12.11" 192 | "@babel/types" "^7.12.12" 193 | debug "^4.1.0" 194 | globals "^11.1.0" 195 | lodash "^4.17.19" 196 | 197 | "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7": 198 | version "7.12.12" 199 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" 200 | integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== 201 | dependencies: 202 | "@babel/helper-validator-identifier" "^7.12.11" 203 | lodash "^4.17.19" 204 | to-fast-properties "^2.0.0" 205 | 206 | "@contactlab/appy@^4.0.1": 207 | version "4.0.1" 208 | resolved "https://registry.yarnpkg.com/@contactlab/appy/-/appy-4.0.1.tgz#853604941fd4fa461fbffcb6bb1c79cac8f2ba22" 209 | integrity sha512-yjeRkLpc1/WctPpOvRV6l10l6u4cfzEUJ4HKvreEBFhPFDybJ4A0u2lY6HrYYeShyXlWdOYVkt/t3qbMVVmxZA== 210 | 211 | "@jest/types@^26.6.2": 212 | version "26.6.2" 213 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" 214 | integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== 215 | dependencies: 216 | "@types/istanbul-lib-coverage" "^2.0.0" 217 | "@types/istanbul-reports" "^3.0.0" 218 | "@types/node" "*" 219 | "@types/yargs" "^15.0.0" 220 | chalk "^4.0.0" 221 | 222 | "@nodelib/fs.scandir@2.1.4": 223 | version "2.1.4" 224 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" 225 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== 226 | dependencies: 227 | "@nodelib/fs.stat" "2.0.4" 228 | run-parallel "^1.1.9" 229 | 230 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": 231 | version "2.0.4" 232 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" 233 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== 234 | 235 | "@nodelib/fs.walk@^1.2.3": 236 | version "1.2.6" 237 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" 238 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== 239 | dependencies: 240 | "@nodelib/fs.scandir" "2.1.4" 241 | fastq "^1.6.0" 242 | 243 | "@rollup/plugin-node-resolve@^11.0.1": 244 | version "11.1.1" 245 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz#47bc34252914794a1b06fb50371d7520a03f91f3" 246 | integrity sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg== 247 | dependencies: 248 | "@rollup/pluginutils" "^3.1.0" 249 | "@types/resolve" "1.17.1" 250 | builtin-modules "^3.1.0" 251 | deepmerge "^4.2.2" 252 | is-module "^1.0.0" 253 | resolve "^1.19.0" 254 | 255 | "@rollup/pluginutils@^3.1.0": 256 | version "3.1.0" 257 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 258 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 259 | dependencies: 260 | "@types/estree" "0.0.39" 261 | estree-walker "^1.0.1" 262 | picomatch "^2.2.2" 263 | 264 | "@snowpack/plugin-dotenv@^2.0.5": 265 | version "2.0.5" 266 | resolved "https://registry.yarnpkg.com/@snowpack/plugin-dotenv/-/plugin-dotenv-2.0.5.tgz#e8bcc5cb59c951f7d560e36397960dd2252a56ee" 267 | integrity sha512-y54lwYRDpTfDTU3uopHLND0DKIjjyWiYxhvOPfZvC4OpOd7UIRwMdSOd5XLZJPEBJ4BD38lDLiXh+ODfNDqhnQ== 268 | dependencies: 269 | dotenv "^8.2.0" 270 | dotenv-expand "^5.1.0" 271 | 272 | "@snowpack/plugin-react-refresh@^2.4.0": 273 | version "2.4.0" 274 | resolved "https://registry.yarnpkg.com/@snowpack/plugin-react-refresh/-/plugin-react-refresh-2.4.0.tgz#a91ae1285621763438d759a75a04b0a7bf26fc23" 275 | integrity sha512-qz2BzdWa5DPK7teTRrh8/SY81mWt//NZmRUUzrQZS2I9d9St8GfSAbFgeJunpBCpPXW9QaaI7huNaoTx/+1/Ag== 276 | dependencies: 277 | "@babel/core" "^7.0.0" 278 | "@babel/plugin-syntax-class-properties" "^7.10.0" 279 | react-refresh "^0.9.0" 280 | 281 | "@snowpack/plugin-typescript@^1.2.0": 282 | version "1.2.1" 283 | resolved "https://registry.yarnpkg.com/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz#7170b039d16d41963cc61a714fe7c37f3fdd9d51" 284 | integrity sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg== 285 | dependencies: 286 | execa "^5.0.0" 287 | npm-run-path "^4.0.1" 288 | 289 | "@snowpack/web-test-runner-plugin@^0.2.0": 290 | version "0.2.1" 291 | resolved "https://registry.yarnpkg.com/@snowpack/web-test-runner-plugin/-/web-test-runner-plugin-0.2.1.tgz#bc05c7e99b8c44f696a918e19a7ac663b49ff507" 292 | integrity sha512-NaltAArVffxcLGX1/aN03wG8cZAS/gd7LqoU9YaZkSv4a9ygA0UeMK03+GdtqekHnwZ1uyboNByNPpPrBAMMdQ== 293 | 294 | "@testing-library/dom@^7.28.1": 295 | version "7.29.4" 296 | resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.4.tgz#1647c2b478789621ead7a50614ad81ab5ae5b86c" 297 | integrity sha512-CtrJRiSYEfbtNGtEsd78mk1n1v2TUbeABlNIcOCJdDfkN5/JTOwQEbbQpoSRxGqzcWPgStMvJ4mNolSuBRv1NA== 298 | dependencies: 299 | "@babel/code-frame" "^7.10.4" 300 | "@babel/runtime" "^7.12.5" 301 | "@types/aria-query" "^4.2.0" 302 | aria-query "^4.2.2" 303 | chalk "^4.1.0" 304 | dom-accessibility-api "^0.5.4" 305 | lz-string "^1.4.4" 306 | pretty-format "^26.6.2" 307 | 308 | "@testing-library/react@^11.0.0": 309 | version "11.2.3" 310 | resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.3.tgz#9971ede1c8465a231d7982eeca3c39fc362d5443" 311 | integrity sha512-BirBUGPkTW28ULuCwIbYo0y2+0aavHczBT6N9r3LrsswEW3pg25l1wgoE7I8QBIy1upXWkwKpYdWY7NYYP0Bxw== 312 | dependencies: 313 | "@babel/runtime" "^7.12.5" 314 | "@testing-library/dom" "^7.28.1" 315 | 316 | "@types/accepts@*": 317 | version "1.3.5" 318 | resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" 319 | integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ== 320 | dependencies: 321 | "@types/node" "*" 322 | 323 | "@types/aria-query@^4.2.0": 324 | version "4.2.1" 325 | resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" 326 | integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== 327 | 328 | "@types/body-parser@*": 329 | version "1.19.0" 330 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" 331 | integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== 332 | dependencies: 333 | "@types/connect" "*" 334 | "@types/node" "*" 335 | 336 | "@types/chai@^4.2.13": 337 | version "4.2.14" 338 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.14.tgz#44d2dd0b5de6185089375d976b4ec5caf6861193" 339 | integrity sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ== 340 | 341 | "@types/command-line-args@^5.0.0": 342 | version "5.0.0" 343 | resolved "https://registry.yarnpkg.com/@types/command-line-args/-/command-line-args-5.0.0.tgz#484e704d20dbb8754a8f091eee45cdd22bcff28c" 344 | integrity sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg== 345 | 346 | "@types/connect@*": 347 | version "3.4.34" 348 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" 349 | integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== 350 | dependencies: 351 | "@types/node" "*" 352 | 353 | "@types/content-disposition@*": 354 | version "0.5.3" 355 | resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96" 356 | integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg== 357 | 358 | "@types/cookies@*": 359 | version "0.7.6" 360 | resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.6.tgz#71212c5391a976d3bae57d4b09fac20fc6bda504" 361 | integrity sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w== 362 | dependencies: 363 | "@types/connect" "*" 364 | "@types/express" "*" 365 | "@types/keygrip" "*" 366 | "@types/node" "*" 367 | 368 | "@types/estree@0.0.39": 369 | version "0.0.39" 370 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 371 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 372 | 373 | "@types/express-serve-static-core@^4.17.18": 374 | version "4.17.18" 375 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" 376 | integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== 377 | dependencies: 378 | "@types/node" "*" 379 | "@types/qs" "*" 380 | "@types/range-parser" "*" 381 | 382 | "@types/express@*": 383 | version "4.17.11" 384 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" 385 | integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== 386 | dependencies: 387 | "@types/body-parser" "*" 388 | "@types/express-serve-static-core" "^4.17.18" 389 | "@types/qs" "*" 390 | "@types/serve-static" "*" 391 | 392 | "@types/http-assert@*": 393 | version "1.5.1" 394 | resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b" 395 | integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ== 396 | 397 | "@types/http-errors@*": 398 | version "1.8.0" 399 | resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" 400 | integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== 401 | 402 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 403 | version "2.0.3" 404 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" 405 | integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== 406 | 407 | "@types/istanbul-lib-report@*": 408 | version "3.0.0" 409 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 410 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 411 | dependencies: 412 | "@types/istanbul-lib-coverage" "*" 413 | 414 | "@types/istanbul-reports@^3.0.0": 415 | version "3.0.0" 416 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" 417 | integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== 418 | dependencies: 419 | "@types/istanbul-lib-report" "*" 420 | 421 | "@types/keygrip@*": 422 | version "1.0.2" 423 | resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72" 424 | integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw== 425 | 426 | "@types/koa-compose@*": 427 | version "3.2.5" 428 | resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d" 429 | integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ== 430 | dependencies: 431 | "@types/koa" "*" 432 | 433 | "@types/koa@*", "@types/koa@^2.11.6": 434 | version "2.11.7" 435 | resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.7.tgz#3b38f3b9faa66315a84890a771d166fb36463100" 436 | integrity sha512-1iXJZZWCePoMe9LGSIPWsu5k5RI4ooXijW78c+nljMn3YbUts8PXoEESu1OeFmrazLPl1l97vTxzwvmH32TWVQ== 437 | dependencies: 438 | "@types/accepts" "*" 439 | "@types/content-disposition" "*" 440 | "@types/cookies" "*" 441 | "@types/http-assert" "*" 442 | "@types/http-errors" "*" 443 | "@types/keygrip" "*" 444 | "@types/koa-compose" "*" 445 | "@types/node" "*" 446 | 447 | "@types/mime@^1": 448 | version "1.3.2" 449 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 450 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 451 | 452 | "@types/mocha@^8.2.0": 453 | version "8.2.0" 454 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" 455 | integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== 456 | 457 | "@types/node@*": 458 | version "14.14.22" 459 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" 460 | integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== 461 | 462 | "@types/parse5@^5.0.3": 463 | version "5.0.3" 464 | resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" 465 | integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== 466 | 467 | "@types/prop-types@*": 468 | version "15.7.3" 469 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 470 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 471 | 472 | "@types/qs@*": 473 | version "6.9.5" 474 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" 475 | integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== 476 | 477 | "@types/range-parser@*": 478 | version "1.2.3" 479 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 480 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 481 | 482 | "@types/react-dom@^17.0.0": 483 | version "17.0.0" 484 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.0.tgz#b3b691eb956c4b3401777ee67b900cb28415d95a" 485 | integrity sha512-lUqY7OlkF/RbNtD5nIq7ot8NquXrdFrjSOR6+w9a9RFQevGi1oZO1dcJbXMeONAPKtZ2UrZOEJ5UOCVsxbLk/g== 486 | dependencies: 487 | "@types/react" "*" 488 | 489 | "@types/react@*", "@types/react@^17.0.0": 490 | version "17.0.0" 491 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.0.tgz#5af3eb7fad2807092f0046a1302b7823e27919b8" 492 | integrity sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw== 493 | dependencies: 494 | "@types/prop-types" "*" 495 | csstype "^3.0.2" 496 | 497 | "@types/resolve@1.17.1": 498 | version "1.17.1" 499 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 500 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 501 | dependencies: 502 | "@types/node" "*" 503 | 504 | "@types/serve-static@*": 505 | version "1.13.9" 506 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" 507 | integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== 508 | dependencies: 509 | "@types/mime" "^1" 510 | "@types/node" "*" 511 | 512 | "@types/snowpack-env@^2.3.2": 513 | version "2.3.3" 514 | resolved "https://registry.yarnpkg.com/@types/snowpack-env/-/snowpack-env-2.3.3.tgz#d2dfb1fb8557aa8bb517606d5dfa249cc861c3ff" 515 | integrity sha512-riJuu2fR3qhBfpWJtqQtNwYJFvquiXfqdprXvZjSNmscnZbIVyHoM49ZVEM1bciKM1mWOCdjXymOYHyGh2WLtg== 516 | 517 | "@types/ws@^7.4.0": 518 | version "7.4.0" 519 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.0.tgz#499690ea08736e05a8186113dac37769ab251a0e" 520 | integrity sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw== 521 | dependencies: 522 | "@types/node" "*" 523 | 524 | "@types/yargs-parser@*": 525 | version "20.2.0" 526 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" 527 | integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== 528 | 529 | "@types/yargs@^15.0.0": 530 | version "15.0.13" 531 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" 532 | integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== 533 | dependencies: 534 | "@types/yargs-parser" "*" 535 | 536 | "@types/yauzl@^2.9.1": 537 | version "2.9.1" 538 | resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" 539 | integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== 540 | dependencies: 541 | "@types/node" "*" 542 | 543 | "@web/browser-logs@^0.2.0": 544 | version "0.2.0" 545 | resolved "https://registry.yarnpkg.com/@web/browser-logs/-/browser-logs-0.2.0.tgz#3f39d59154bf668f0bce467026354ff2b9f3e06b" 546 | integrity sha512-BExeD4Rlak10X+R38dDfc3waYu2dHEvMNqIottCwFXXoMvLeQs0+fYB2fqpcQwMoAIhhKRo9NENtuQQLaR1y0A== 547 | dependencies: 548 | errorstacks "^2.2.0" 549 | 550 | "@web/config-loader@^0.1.3": 551 | version "0.1.3" 552 | resolved "https://registry.yarnpkg.com/@web/config-loader/-/config-loader-0.1.3.tgz#8325ea54f75ef2ee7166783e64e66936db25bff7" 553 | integrity sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ== 554 | dependencies: 555 | semver "^7.3.4" 556 | 557 | "@web/dev-server-core@^0.3.2", "@web/dev-server-core@^0.3.3": 558 | version "0.3.3" 559 | resolved "https://registry.yarnpkg.com/@web/dev-server-core/-/dev-server-core-0.3.3.tgz#814bc86460c43ab9d66b640f2b3b65d452ce30e0" 560 | integrity sha512-zj70hj6FBIFAGZfyqrOlDY1bYtqTea5ioTcgGx55tIeHiUmblDCcpbBUIqj4pcw/GjpQPBBFw5oX1WyuiHQNhA== 561 | dependencies: 562 | "@types/koa" "^2.11.6" 563 | "@types/ws" "^7.4.0" 564 | "@web/parse5-utils" "^1.0.0" 565 | chokidar "^3.4.3" 566 | clone "^2.1.2" 567 | es-module-lexer "^0.3.26" 568 | get-stream "^6.0.0" 569 | is-stream "^2.0.0" 570 | isbinaryfile "^4.0.6" 571 | koa "^2.13.0" 572 | koa-etag "^4.0.0" 573 | koa-send "^5.0.1" 574 | koa-static "^5.0.0" 575 | lru-cache "^6.0.0" 576 | mime-types "^2.1.27" 577 | parse5 "^6.0.1" 578 | picomatch "^2.2.2" 579 | ws "^7.4.2" 580 | 581 | "@web/dev-server-rollup@^0.3.2": 582 | version "0.3.2" 583 | resolved "https://registry.yarnpkg.com/@web/dev-server-rollup/-/dev-server-rollup-0.3.2.tgz#8cf0df70fdca6f92f085f2840472677d29cf5862" 584 | integrity sha512-c5ROnMAUrOJPXTQFFXZiOy0ta4Y5yXLA2QkD71htNhIcqeOI4yx6ueDtuFqovRxVI0qcWGk46UdfZ0UGT/9MIg== 585 | dependencies: 586 | "@web/dev-server-core" "^0.3.3" 587 | chalk "^4.1.0" 588 | parse5 "^6.0.1" 589 | rollup "^2.35.1" 590 | whatwg-url "^8.4.0" 591 | 592 | "@web/dev-server@^0.1.5": 593 | version "0.1.5" 594 | resolved "https://registry.yarnpkg.com/@web/dev-server/-/dev-server-0.1.5.tgz#e26ce32fb432f833366cb50cd84405a0e6734723" 595 | integrity sha512-6fiaKH6WKOO2Va6uIQW4WRbHLtLkIreSSH9dAWkMnw9u4+DVhSOhl58n60zwBbzbN6uwRDAQqMvZO+nKnoV5lg== 596 | dependencies: 597 | "@babel/code-frame" "^7.12.11" 598 | "@rollup/plugin-node-resolve" "^11.0.1" 599 | "@types/command-line-args" "^5.0.0" 600 | "@web/config-loader" "^0.1.3" 601 | "@web/dev-server-core" "^0.3.2" 602 | "@web/dev-server-rollup" "^0.3.2" 603 | camelcase "^6.2.0" 604 | chalk "^4.1.0" 605 | command-line-args "^5.1.1" 606 | command-line-usage "^6.1.1" 607 | debounce "^1.2.0" 608 | deepmerge "^4.2.2" 609 | ip "^1.1.5" 610 | open "^7.3.0" 611 | portfinder "^1.0.28" 612 | 613 | "@web/parse5-utils@^1.0.0": 614 | version "1.1.2" 615 | resolved "https://registry.yarnpkg.com/@web/parse5-utils/-/parse5-utils-1.1.2.tgz#b53e7f62679170371da36023517b23bbb1f7c582" 616 | integrity sha512-/JQHbK53BmYiFK2igr2B+Psl2Ivp2ju75Nx1InZweTbxLQNGG9yUBaudER85aqebIH6smkPkKwVtpdBXBiwy1A== 617 | dependencies: 618 | "@types/parse5" "^5.0.3" 619 | parse5 "^6.0.1" 620 | 621 | "@web/test-runner-chrome@^0.9.1": 622 | version "0.9.1" 623 | resolved "https://registry.yarnpkg.com/@web/test-runner-chrome/-/test-runner-chrome-0.9.1.tgz#c1e8689fe1810fecfe695222f0e85ee3afb85a2a" 624 | integrity sha512-0oU4EbZYEbUeUO2mLklBBQjfedOd/aV6XA30iYWUxpcS6nuZdqyL1TsHo+YnzN3aWM0eDNFMSUiKgrPcKWdXAw== 625 | dependencies: 626 | "@web/test-runner-core" "^0.10.5" 627 | "@web/test-runner-coverage-v8" "^0.4.2" 628 | chrome-launcher "^0.13.4" 629 | puppeteer-core "^5.5.0" 630 | 631 | "@web/test-runner-commands@^0.4.0": 632 | version "0.4.0" 633 | resolved "https://registry.yarnpkg.com/@web/test-runner-commands/-/test-runner-commands-0.4.0.tgz#14d5ec6de2f08d2cf84625210c261014572b6f2d" 634 | integrity sha512-FsmF4Ya2mK8nlrodSjLMK1iKsSz61l4LeHSNRBjZtlzfjfwoGb38Pq+WehtboKgan+if/daHBjW85QFO1j3O+Q== 635 | dependencies: 636 | "@web/test-runner-core" "^0.10.0" 637 | 638 | "@web/test-runner-core@^0.10.0", "@web/test-runner-core@^0.10.5": 639 | version "0.10.5" 640 | resolved "https://registry.yarnpkg.com/@web/test-runner-core/-/test-runner-core-0.10.5.tgz#d3e64138981d19910fe3648396a9dd250b075382" 641 | integrity sha512-HQRu2pPVVGpExa/GqTBtEnpIadcMJDIAB+mjSeLkH8dgKStJmcS3RQPa+GYnKNtvqiqKJajUW/6ku7RvLNEc3A== 642 | dependencies: 643 | "@babel/code-frame" "^7.12.11" 644 | "@web/browser-logs" "^0.2.0" 645 | "@web/dev-server-core" "^0.3.3" 646 | chalk "^4.1.0" 647 | chokidar "^3.4.3" 648 | cli-cursor "^3.1.0" 649 | co-body "^6.1.0" 650 | convert-source-map "^1.7.0" 651 | debounce "^1.2.0" 652 | dependency-graph "^0.10.0" 653 | globby "^11.0.1" 654 | ip "^1.1.5" 655 | istanbul-lib-coverage "^3.0.0" 656 | istanbul-lib-report "^3.0.0" 657 | istanbul-reports "^3.0.2" 658 | log-update "^4.0.0" 659 | open "^7.3.0" 660 | picomatch "^2.2.2" 661 | source-map "^0.7.3" 662 | uuid "^8.3.2" 663 | 664 | "@web/test-runner-coverage-v8@^0.4.2": 665 | version "0.4.2" 666 | resolved "https://registry.yarnpkg.com/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.2.tgz#2beabb03b770172732995a5ed8517c54ffb44013" 667 | integrity sha512-M52v2kTG2XHsn8yWgfs/XM2BX0WNjr3DG3LQ+QBZ478XWje4DVdUpG0jXi6UtGHLGUxYOWqZqtMvU/rhX6pdEQ== 668 | dependencies: 669 | "@web/test-runner-core" "^0.10.5" 670 | istanbul-lib-coverage "^3.0.0" 671 | picomatch "^2.2.2" 672 | v8-to-istanbul "^7.1.0" 673 | 674 | "@web/test-runner-mocha@^0.7.0": 675 | version "0.7.0" 676 | resolved "https://registry.yarnpkg.com/@web/test-runner-mocha/-/test-runner-mocha-0.7.0.tgz#1c844ee0446345deacfbbfeae614db7d45a1a7dc" 677 | integrity sha512-GW/cCXjChBcIaaNnSIH/Yy04jd+mdZPNE2UcWVkl0h3Z/iJu+a10S1jkaoY2SfGFhH/20AbrM+8EGMFbSUpaGA== 678 | dependencies: 679 | "@types/mocha" "^8.2.0" 680 | "@web/test-runner-core" "^0.10.0" 681 | 682 | "@web/test-runner@^0.12.0": 683 | version "0.12.7" 684 | resolved "https://registry.yarnpkg.com/@web/test-runner/-/test-runner-0.12.7.tgz#32dbf68fa55214602008056af5fcb5d9f8dde468" 685 | integrity sha512-z+uQ7ELj8gs9byWI7N85Pg+2IrpDDarjq1tmbG+QxAkgBWDTUjHF46a2AtfOUhBpI2zR7NYj6JaUz2KJt1pKdw== 686 | dependencies: 687 | "@web/browser-logs" "^0.2.0" 688 | "@web/config-loader" "^0.1.3" 689 | "@web/dev-server" "^0.1.5" 690 | "@web/test-runner-chrome" "^0.9.1" 691 | "@web/test-runner-commands" "^0.4.0" 692 | "@web/test-runner-core" "^0.10.5" 693 | "@web/test-runner-mocha" "^0.7.0" 694 | camelcase "^6.2.0" 695 | chalk "^4.1.0" 696 | command-line-args "^5.1.1" 697 | command-line-usage "^6.1.1" 698 | convert-source-map "^1.7.0" 699 | deepmerge "^4.2.2" 700 | diff "^5.0.0" 701 | globby "^11.0.1" 702 | portfinder "^1.0.28" 703 | source-map "^0.7.3" 704 | 705 | accepts@^1.3.5: 706 | version "1.3.7" 707 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 708 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 709 | dependencies: 710 | mime-types "~2.1.24" 711 | negotiator "0.6.2" 712 | 713 | agent-base@5: 714 | version "5.1.1" 715 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" 716 | integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== 717 | 718 | ansi-escapes@^4.3.0: 719 | version "4.3.1" 720 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" 721 | integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== 722 | dependencies: 723 | type-fest "^0.11.0" 724 | 725 | ansi-regex@^5.0.0: 726 | version "5.0.0" 727 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 728 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 729 | 730 | ansi-styles@^3.2.1: 731 | version "3.2.1" 732 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 733 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 734 | dependencies: 735 | color-convert "^1.9.0" 736 | 737 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 738 | version "4.3.0" 739 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 740 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 741 | dependencies: 742 | color-convert "^2.0.1" 743 | 744 | any-promise@^1.1.0: 745 | version "1.3.0" 746 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 747 | integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= 748 | 749 | anymatch@~3.1.1: 750 | version "3.1.1" 751 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 752 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 753 | dependencies: 754 | normalize-path "^3.0.0" 755 | picomatch "^2.0.4" 756 | 757 | aria-query@^4.2.2: 758 | version "4.2.2" 759 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" 760 | integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== 761 | dependencies: 762 | "@babel/runtime" "^7.10.2" 763 | "@babel/runtime-corejs3" "^7.10.2" 764 | 765 | array-back@^3.0.1: 766 | version "3.1.0" 767 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" 768 | integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== 769 | 770 | array-back@^4.0.1: 771 | version "4.0.1" 772 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" 773 | integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== 774 | 775 | array-union@^2.1.0: 776 | version "2.1.0" 777 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 778 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 779 | 780 | assertion-error@^1.1.0: 781 | version "1.1.0" 782 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 783 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 784 | 785 | astral-regex@^2.0.0: 786 | version "2.0.0" 787 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 788 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 789 | 790 | async@^2.6.2: 791 | version "2.6.3" 792 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" 793 | integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== 794 | dependencies: 795 | lodash "^4.17.14" 796 | 797 | balanced-match@^1.0.0: 798 | version "1.0.0" 799 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 800 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 801 | 802 | base64-js@^1.3.1: 803 | version "1.5.1" 804 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 805 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 806 | 807 | binary-extensions@^2.0.0: 808 | version "2.2.0" 809 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 810 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 811 | 812 | bl@^4.0.3: 813 | version "4.0.3" 814 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" 815 | integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== 816 | dependencies: 817 | buffer "^5.5.0" 818 | inherits "^2.0.4" 819 | readable-stream "^3.4.0" 820 | 821 | brace-expansion@^1.1.7: 822 | version "1.1.11" 823 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 824 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 825 | dependencies: 826 | balanced-match "^1.0.0" 827 | concat-map "0.0.1" 828 | 829 | braces@^3.0.1, braces@~3.0.2: 830 | version "3.0.2" 831 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 832 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 833 | dependencies: 834 | fill-range "^7.0.1" 835 | 836 | buffer-crc32@~0.2.3: 837 | version "0.2.13" 838 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 839 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= 840 | 841 | buffer@^5.2.1, buffer@^5.5.0: 842 | version "5.7.1" 843 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 844 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 845 | dependencies: 846 | base64-js "^1.3.1" 847 | ieee754 "^1.1.13" 848 | 849 | builtin-modules@^3.1.0: 850 | version "3.2.0" 851 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 852 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 853 | 854 | bytes@3.1.0: 855 | version "3.1.0" 856 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 857 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 858 | 859 | cache-content-type@^1.0.0: 860 | version "1.0.1" 861 | resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" 862 | integrity sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA== 863 | dependencies: 864 | mime-types "^2.1.18" 865 | ylru "^1.2.0" 866 | 867 | camelcase@^6.2.0: 868 | version "6.2.0" 869 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 870 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 871 | 872 | chai@^4.2.0: 873 | version "4.2.0" 874 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 875 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 876 | dependencies: 877 | assertion-error "^1.1.0" 878 | check-error "^1.0.2" 879 | deep-eql "^3.0.1" 880 | get-func-name "^2.0.0" 881 | pathval "^1.1.0" 882 | type-detect "^4.0.5" 883 | 884 | chalk@^2.0.0, chalk@^2.4.2: 885 | version "2.4.2" 886 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 887 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 888 | dependencies: 889 | ansi-styles "^3.2.1" 890 | escape-string-regexp "^1.0.5" 891 | supports-color "^5.3.0" 892 | 893 | chalk@^4.0.0, chalk@^4.1.0: 894 | version "4.1.0" 895 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 896 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 897 | dependencies: 898 | ansi-styles "^4.1.0" 899 | supports-color "^7.1.0" 900 | 901 | check-error@^1.0.2: 902 | version "1.0.2" 903 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 904 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 905 | 906 | chokidar@^3.4.3: 907 | version "3.5.1" 908 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 909 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 910 | dependencies: 911 | anymatch "~3.1.1" 912 | braces "~3.0.2" 913 | glob-parent "~5.1.0" 914 | is-binary-path "~2.1.0" 915 | is-glob "~4.0.1" 916 | normalize-path "~3.0.0" 917 | readdirp "~3.5.0" 918 | optionalDependencies: 919 | fsevents "~2.3.1" 920 | 921 | chownr@^1.1.1: 922 | version "1.1.4" 923 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 924 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 925 | 926 | chrome-launcher@^0.13.4: 927 | version "0.13.4" 928 | resolved "https://registry.yarnpkg.com/chrome-launcher/-/chrome-launcher-0.13.4.tgz#4c7d81333c98282899c4e38256da23e00ed32f73" 929 | integrity sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A== 930 | dependencies: 931 | "@types/node" "*" 932 | escape-string-regexp "^1.0.5" 933 | is-wsl "^2.2.0" 934 | lighthouse-logger "^1.0.0" 935 | mkdirp "^0.5.3" 936 | rimraf "^3.0.2" 937 | 938 | cli-cursor@^3.1.0: 939 | version "3.1.0" 940 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 941 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 942 | dependencies: 943 | restore-cursor "^3.1.0" 944 | 945 | clone@^2.1.2: 946 | version "2.1.2" 947 | resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" 948 | integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= 949 | 950 | co-body@^6.1.0: 951 | version "6.1.0" 952 | resolved "https://registry.yarnpkg.com/co-body/-/co-body-6.1.0.tgz#d87a8efc3564f9bfe3aced8ef5cd04c7a8766547" 953 | integrity sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ== 954 | dependencies: 955 | inflation "^2.0.0" 956 | qs "^6.5.2" 957 | raw-body "^2.3.3" 958 | type-is "^1.6.16" 959 | 960 | co@^4.6.0: 961 | version "4.6.0" 962 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 963 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 964 | 965 | color-convert@^1.9.0: 966 | version "1.9.3" 967 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 968 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 969 | dependencies: 970 | color-name "1.1.3" 971 | 972 | color-convert@^2.0.1: 973 | version "2.0.1" 974 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 975 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 976 | dependencies: 977 | color-name "~1.1.4" 978 | 979 | color-name@1.1.3: 980 | version "1.1.3" 981 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 982 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 983 | 984 | color-name@~1.1.4: 985 | version "1.1.4" 986 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 987 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 988 | 989 | command-line-args@^5.1.1: 990 | version "5.1.1" 991 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a" 992 | integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg== 993 | dependencies: 994 | array-back "^3.0.1" 995 | find-replace "^3.0.0" 996 | lodash.camelcase "^4.3.0" 997 | typical "^4.0.0" 998 | 999 | command-line-usage@^6.1.1: 1000 | version "6.1.1" 1001 | resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" 1002 | integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== 1003 | dependencies: 1004 | array-back "^4.0.1" 1005 | chalk "^2.4.2" 1006 | table-layout "^1.0.1" 1007 | typical "^5.2.0" 1008 | 1009 | concat-map@0.0.1: 1010 | version "0.0.1" 1011 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1012 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1013 | 1014 | content-disposition@~0.5.2: 1015 | version "0.5.3" 1016 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 1017 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 1018 | dependencies: 1019 | safe-buffer "5.1.2" 1020 | 1021 | content-type@^1.0.4: 1022 | version "1.0.4" 1023 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 1024 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 1025 | 1026 | convert-source-map@^1.6.0, convert-source-map@^1.7.0: 1027 | version "1.7.0" 1028 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 1029 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 1030 | dependencies: 1031 | safe-buffer "~5.1.1" 1032 | 1033 | cookies@~0.8.0: 1034 | version "0.8.0" 1035 | resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90" 1036 | integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow== 1037 | dependencies: 1038 | depd "~2.0.0" 1039 | keygrip "~1.1.0" 1040 | 1041 | core-js-pure@^3.0.0: 1042 | version "3.8.3" 1043 | resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.8.3.tgz#10e9e3b2592ecaede4283e8f3ad7020811587c02" 1044 | integrity sha512-V5qQZVAr9K0xu7jXg1M7qTEwuxUgqr7dUOezGaNa7i+Xn9oXAU/d1fzqD9ObuwpVQOaorO5s70ckyi1woP9lVA== 1045 | 1046 | cross-spawn@^7.0.3: 1047 | version "7.0.3" 1048 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1049 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1050 | dependencies: 1051 | path-key "^3.1.0" 1052 | shebang-command "^2.0.0" 1053 | which "^2.0.1" 1054 | 1055 | csstype@^3.0.2: 1056 | version "3.0.6" 1057 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" 1058 | integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== 1059 | 1060 | debounce@^1.2.0: 1061 | version "1.2.0" 1062 | resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" 1063 | integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== 1064 | 1065 | debug@4, debug@^4.1.0, debug@^4.1.1: 1066 | version "4.3.1" 1067 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 1068 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 1069 | dependencies: 1070 | ms "2.1.2" 1071 | 1072 | debug@^2.6.8: 1073 | version "2.6.9" 1074 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1075 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 1076 | dependencies: 1077 | ms "2.0.0" 1078 | 1079 | debug@^3.1.0, debug@^3.1.1: 1080 | version "3.2.7" 1081 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 1082 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 1083 | dependencies: 1084 | ms "^2.1.1" 1085 | 1086 | debug@~3.1.0: 1087 | version "3.1.0" 1088 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 1089 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 1090 | dependencies: 1091 | ms "2.0.0" 1092 | 1093 | deep-eql@^3.0.1: 1094 | version "3.0.1" 1095 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 1096 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 1097 | dependencies: 1098 | type-detect "^4.0.0" 1099 | 1100 | deep-equal@~1.0.1: 1101 | version "1.0.1" 1102 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 1103 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= 1104 | 1105 | deep-extend@~0.6.0: 1106 | version "0.6.0" 1107 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 1108 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 1109 | 1110 | deepmerge@^4.2.2: 1111 | version "4.2.2" 1112 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1113 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1114 | 1115 | delegates@^1.0.0: 1116 | version "1.0.0" 1117 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1118 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 1119 | 1120 | depd@^2.0.0, depd@~2.0.0: 1121 | version "2.0.0" 1122 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 1123 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 1124 | 1125 | depd@~1.1.2: 1126 | version "1.1.2" 1127 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 1128 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 1129 | 1130 | dependency-graph@^0.10.0: 1131 | version "0.10.0" 1132 | resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.10.0.tgz#dfebe384f1f36faf7782be203a7a71102a6335a6" 1133 | integrity sha512-c9amUgpgxSi1bE5/sbLwcs5diLD0ygCQYmhfM5H1s5VH1mCsYkcmAL3CcNdv4kdSw6JuMoHeDGzLgj/gAXdWVg== 1134 | 1135 | destroy@^1.0.4: 1136 | version "1.0.4" 1137 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 1138 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 1139 | 1140 | devtools-protocol@0.0.818844: 1141 | version "0.0.818844" 1142 | resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e" 1143 | integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg== 1144 | 1145 | diff@^5.0.0: 1146 | version "5.0.0" 1147 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 1148 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 1149 | 1150 | dir-glob@^3.0.1: 1151 | version "3.0.1" 1152 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 1153 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 1154 | dependencies: 1155 | path-type "^4.0.0" 1156 | 1157 | dom-accessibility-api@^0.5.4: 1158 | version "0.5.4" 1159 | resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" 1160 | integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== 1161 | 1162 | dotenv-expand@^5.1.0: 1163 | version "5.1.0" 1164 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 1165 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 1166 | 1167 | dotenv@^8.2.0: 1168 | version "8.2.0" 1169 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 1170 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== 1171 | 1172 | ee-first@1.1.1: 1173 | version "1.1.1" 1174 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1175 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 1176 | 1177 | emoji-regex@^8.0.0: 1178 | version "8.0.0" 1179 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1180 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1181 | 1182 | encodeurl@^1.0.2: 1183 | version "1.0.2" 1184 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 1185 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 1186 | 1187 | end-of-stream@^1.1.0, end-of-stream@^1.4.1: 1188 | version "1.4.4" 1189 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1190 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 1191 | dependencies: 1192 | once "^1.4.0" 1193 | 1194 | errorstacks@^2.2.0: 1195 | version "2.2.0" 1196 | resolved "https://registry.yarnpkg.com/errorstacks/-/errorstacks-2.2.0.tgz#21bdcfc16ded3660c542fc0b286bdf034a126c1a" 1197 | integrity sha512-d/HXKLrpdLYReAnNq5k/KgZKlfc5J+3DKKvci8WKzuM9MAXFrCoCfVyViHk0aFMLyazU/jYhW2d8zTa99pelIA== 1198 | 1199 | es-module-lexer@^0.3.26: 1200 | version "0.3.26" 1201 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" 1202 | integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== 1203 | 1204 | esbuild@^0.8.7: 1205 | version "0.8.38" 1206 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.38.tgz#04dc395e15c77bbc9d6798e9b31275546bcf7b9a" 1207 | integrity sha512-wSunJl8ujgBs9eVGubc8Y6fn/DkDjNyfQBVOFTY1E7sRxr8KTjmqyLIiE0M3Z4CjMnCu/rttCugwnOzY+HiwIw== 1208 | 1209 | escape-html@^1.0.3: 1210 | version "1.0.3" 1211 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1212 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 1213 | 1214 | escape-string-regexp@^1.0.5: 1215 | version "1.0.5" 1216 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1217 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1218 | 1219 | estree-walker@^1.0.1: 1220 | version "1.0.1" 1221 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 1222 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 1223 | 1224 | etag@^1.8.1: 1225 | version "1.8.1" 1226 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1227 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 1228 | 1229 | execa@^5.0.0: 1230 | version "5.0.0" 1231 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" 1232 | integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== 1233 | dependencies: 1234 | cross-spawn "^7.0.3" 1235 | get-stream "^6.0.0" 1236 | human-signals "^2.1.0" 1237 | is-stream "^2.0.0" 1238 | merge-stream "^2.0.0" 1239 | npm-run-path "^4.0.1" 1240 | onetime "^5.1.2" 1241 | signal-exit "^3.0.3" 1242 | strip-final-newline "^2.0.0" 1243 | 1244 | extract-zip@^2.0.0: 1245 | version "2.0.1" 1246 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" 1247 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== 1248 | dependencies: 1249 | debug "^4.1.1" 1250 | get-stream "^5.1.0" 1251 | yauzl "^2.10.0" 1252 | optionalDependencies: 1253 | "@types/yauzl" "^2.9.1" 1254 | 1255 | fast-glob@^3.1.1: 1256 | version "3.2.5" 1257 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" 1258 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== 1259 | dependencies: 1260 | "@nodelib/fs.stat" "^2.0.2" 1261 | "@nodelib/fs.walk" "^1.2.3" 1262 | glob-parent "^5.1.0" 1263 | merge2 "^1.3.0" 1264 | micromatch "^4.0.2" 1265 | picomatch "^2.2.1" 1266 | 1267 | fastq@^1.6.0: 1268 | version "1.10.1" 1269 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" 1270 | integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== 1271 | dependencies: 1272 | reusify "^1.0.4" 1273 | 1274 | fd-slicer@~1.1.0: 1275 | version "1.1.0" 1276 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 1277 | integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= 1278 | dependencies: 1279 | pend "~1.2.0" 1280 | 1281 | fill-range@^7.0.1: 1282 | version "7.0.1" 1283 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1284 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1285 | dependencies: 1286 | to-regex-range "^5.0.1" 1287 | 1288 | find-replace@^3.0.0: 1289 | version "3.0.0" 1290 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" 1291 | integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== 1292 | dependencies: 1293 | array-back "^3.0.1" 1294 | 1295 | find-up@^4.0.0: 1296 | version "4.1.0" 1297 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1298 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1299 | dependencies: 1300 | locate-path "^5.0.0" 1301 | path-exists "^4.0.0" 1302 | 1303 | fp-ts@^2.10.0: 1304 | version "2.10.0" 1305 | resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.10.0.tgz#e8d54691061be6561d4fe6e5b4012eea2a66d274" 1306 | integrity sha512-FC2VYweD6QJ5qIKq2wGXRuTtMxIRrXqLlIhRDnxVisbmjEEENHPyf6vrQ9Tdj5Pha1o/SbdYBrfANpvaUxW0dg== 1307 | 1308 | fresh@~0.5.2: 1309 | version "0.5.2" 1310 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1311 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 1312 | 1313 | fs-constants@^1.0.0: 1314 | version "1.0.0" 1315 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 1316 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 1317 | 1318 | fs.realpath@^1.0.0: 1319 | version "1.0.0" 1320 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1321 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1322 | 1323 | fsevents@^2.2.0, fsevents@~2.3.1: 1324 | version "2.3.1" 1325 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" 1326 | integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== 1327 | 1328 | fsevents@~2.1.2: 1329 | version "2.1.3" 1330 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 1331 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 1332 | 1333 | function-bind@^1.1.1: 1334 | version "1.1.1" 1335 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1336 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1337 | 1338 | gensync@^1.0.0-beta.1: 1339 | version "1.0.0-beta.2" 1340 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1341 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1342 | 1343 | get-func-name@^2.0.0: 1344 | version "2.0.0" 1345 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 1346 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 1347 | 1348 | get-stream@^5.1.0: 1349 | version "5.2.0" 1350 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1351 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1352 | dependencies: 1353 | pump "^3.0.0" 1354 | 1355 | get-stream@^6.0.0: 1356 | version "6.0.0" 1357 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" 1358 | integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== 1359 | 1360 | glob-parent@^5.1.0, glob-parent@~5.1.0: 1361 | version "5.1.1" 1362 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 1363 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 1364 | dependencies: 1365 | is-glob "^4.0.1" 1366 | 1367 | glob@^7.1.3: 1368 | version "7.1.6" 1369 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1370 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1371 | dependencies: 1372 | fs.realpath "^1.0.0" 1373 | inflight "^1.0.4" 1374 | inherits "2" 1375 | minimatch "^3.0.4" 1376 | once "^1.3.0" 1377 | path-is-absolute "^1.0.0" 1378 | 1379 | globals@^11.1.0: 1380 | version "11.12.0" 1381 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1382 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1383 | 1384 | globby@^11.0.1: 1385 | version "11.0.2" 1386 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" 1387 | integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== 1388 | dependencies: 1389 | array-union "^2.1.0" 1390 | dir-glob "^3.0.1" 1391 | fast-glob "^3.1.1" 1392 | ignore "^5.1.4" 1393 | merge2 "^1.3.0" 1394 | slash "^3.0.0" 1395 | 1396 | has-flag@^3.0.0: 1397 | version "3.0.0" 1398 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1399 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1400 | 1401 | has-flag@^4.0.0: 1402 | version "4.0.0" 1403 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1404 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1405 | 1406 | has@^1.0.3: 1407 | version "1.0.3" 1408 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1409 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1410 | dependencies: 1411 | function-bind "^1.1.1" 1412 | 1413 | html-escaper@^2.0.0: 1414 | version "2.0.2" 1415 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1416 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1417 | 1418 | http-assert@^1.3.0: 1419 | version "1.4.1" 1420 | resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.1.tgz#c5f725d677aa7e873ef736199b89686cceb37878" 1421 | integrity sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw== 1422 | dependencies: 1423 | deep-equal "~1.0.1" 1424 | http-errors "~1.7.2" 1425 | 1426 | http-errors@1.7.3, http-errors@~1.7.2: 1427 | version "1.7.3" 1428 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1429 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1430 | dependencies: 1431 | depd "~1.1.2" 1432 | inherits "2.0.4" 1433 | setprototypeof "1.1.1" 1434 | statuses ">= 1.5.0 < 2" 1435 | toidentifier "1.0.0" 1436 | 1437 | http-errors@^1.6.3, http-errors@^1.7.3: 1438 | version "1.8.0" 1439 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" 1440 | integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== 1441 | dependencies: 1442 | depd "~1.1.2" 1443 | inherits "2.0.4" 1444 | setprototypeof "1.2.0" 1445 | statuses ">= 1.5.0 < 2" 1446 | toidentifier "1.0.0" 1447 | 1448 | http-errors@~1.6.2: 1449 | version "1.6.3" 1450 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1451 | integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= 1452 | dependencies: 1453 | depd "~1.1.2" 1454 | inherits "2.0.3" 1455 | setprototypeof "1.1.0" 1456 | statuses ">= 1.4.0 < 2" 1457 | 1458 | https-proxy-agent@^4.0.0: 1459 | version "4.0.0" 1460 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" 1461 | integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== 1462 | dependencies: 1463 | agent-base "5" 1464 | debug "4" 1465 | 1466 | human-signals@^2.1.0: 1467 | version "2.1.0" 1468 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1469 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1470 | 1471 | iconv-lite@0.4.24: 1472 | version "0.4.24" 1473 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1474 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1475 | dependencies: 1476 | safer-buffer ">= 2.1.2 < 3" 1477 | 1478 | ieee754@^1.1.13: 1479 | version "1.2.1" 1480 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1481 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1482 | 1483 | ignore@^5.1.4: 1484 | version "5.1.8" 1485 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" 1486 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1487 | 1488 | inflation@^2.0.0: 1489 | version "2.0.0" 1490 | resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" 1491 | integrity sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8= 1492 | 1493 | inflight@^1.0.4: 1494 | version "1.0.6" 1495 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1496 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1497 | dependencies: 1498 | once "^1.3.0" 1499 | wrappy "1" 1500 | 1501 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: 1502 | version "2.0.4" 1503 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1504 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1505 | 1506 | inherits@2.0.3: 1507 | version "2.0.3" 1508 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1509 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1510 | 1511 | io-ts@^2.2.13: 1512 | version "2.2.13" 1513 | resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.13.tgz#e04016685e863dd5cffb2b5262c5c9c74432dfda" 1514 | integrity sha512-BYJgE/BanovJKDvCnAkrr7f3gTucSyk+Sr5VtpouBO1/YfBKUyIn2z1ODG8LEF+1D4sjKZ3Bd/A5/v8JrJe5UQ== 1515 | 1516 | ip@^1.1.5: 1517 | version "1.1.5" 1518 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 1519 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 1520 | 1521 | is-binary-path@~2.1.0: 1522 | version "2.1.0" 1523 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1524 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1525 | dependencies: 1526 | binary-extensions "^2.0.0" 1527 | 1528 | is-core-module@^2.1.0: 1529 | version "2.2.0" 1530 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 1531 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 1532 | dependencies: 1533 | has "^1.0.3" 1534 | 1535 | is-docker@^2.0.0: 1536 | version "2.1.1" 1537 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" 1538 | integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== 1539 | 1540 | is-extglob@^2.1.1: 1541 | version "2.1.1" 1542 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1543 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1544 | 1545 | is-fullwidth-code-point@^3.0.0: 1546 | version "3.0.0" 1547 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1548 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1549 | 1550 | is-generator-function@^1.0.7: 1551 | version "1.0.8" 1552 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" 1553 | integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== 1554 | 1555 | is-glob@^4.0.1, is-glob@~4.0.1: 1556 | version "4.0.1" 1557 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1558 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1559 | dependencies: 1560 | is-extglob "^2.1.1" 1561 | 1562 | is-module@^1.0.0: 1563 | version "1.0.0" 1564 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1565 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 1566 | 1567 | is-number@^7.0.0: 1568 | version "7.0.0" 1569 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1570 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1571 | 1572 | is-stream@^2.0.0: 1573 | version "2.0.0" 1574 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 1575 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 1576 | 1577 | is-wsl@^2.1.1, is-wsl@^2.2.0: 1578 | version "2.2.0" 1579 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 1580 | integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 1581 | dependencies: 1582 | is-docker "^2.0.0" 1583 | 1584 | isbinaryfile@^4.0.6: 1585 | version "4.0.6" 1586 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" 1587 | integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== 1588 | 1589 | isexe@^2.0.0: 1590 | version "2.0.0" 1591 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1592 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1593 | 1594 | istanbul-lib-coverage@^3.0.0: 1595 | version "3.0.0" 1596 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" 1597 | integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== 1598 | 1599 | istanbul-lib-report@^3.0.0: 1600 | version "3.0.0" 1601 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1602 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1603 | dependencies: 1604 | istanbul-lib-coverage "^3.0.0" 1605 | make-dir "^3.0.0" 1606 | supports-color "^7.1.0" 1607 | 1608 | istanbul-reports@^3.0.2: 1609 | version "3.0.2" 1610 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" 1611 | integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== 1612 | dependencies: 1613 | html-escaper "^2.0.0" 1614 | istanbul-lib-report "^3.0.0" 1615 | 1616 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1617 | version "4.0.0" 1618 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1619 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1620 | 1621 | jsesc@^2.5.1: 1622 | version "2.5.2" 1623 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1624 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1625 | 1626 | json5@^2.1.2: 1627 | version "2.1.3" 1628 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" 1629 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== 1630 | dependencies: 1631 | minimist "^1.2.5" 1632 | 1633 | keygrip@~1.1.0: 1634 | version "1.1.0" 1635 | resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226" 1636 | integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ== 1637 | dependencies: 1638 | tsscmp "1.0.6" 1639 | 1640 | koa-compose@^3.0.0: 1641 | version "3.2.1" 1642 | resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" 1643 | integrity sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec= 1644 | dependencies: 1645 | any-promise "^1.1.0" 1646 | 1647 | koa-compose@^4.1.0: 1648 | version "4.1.0" 1649 | resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" 1650 | integrity sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw== 1651 | 1652 | koa-convert@^1.2.0: 1653 | version "1.2.0" 1654 | resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" 1655 | integrity sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA= 1656 | dependencies: 1657 | co "^4.6.0" 1658 | koa-compose "^3.0.0" 1659 | 1660 | koa-etag@^4.0.0: 1661 | version "4.0.0" 1662 | resolved "https://registry.yarnpkg.com/koa-etag/-/koa-etag-4.0.0.tgz#2c2bb7ae69ca1ac6ced09ba28dcb78523c810414" 1663 | integrity sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg== 1664 | dependencies: 1665 | etag "^1.8.1" 1666 | 1667 | koa-send@^5.0.0, koa-send@^5.0.1: 1668 | version "5.0.1" 1669 | resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.1.tgz#39dceebfafb395d0d60beaffba3a70b4f543fe79" 1670 | integrity sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ== 1671 | dependencies: 1672 | debug "^4.1.1" 1673 | http-errors "^1.7.3" 1674 | resolve-path "^1.4.0" 1675 | 1676 | koa-static@^5.0.0: 1677 | version "5.0.0" 1678 | resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" 1679 | integrity sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ== 1680 | dependencies: 1681 | debug "^3.1.0" 1682 | koa-send "^5.0.0" 1683 | 1684 | koa@^2.13.0: 1685 | version "2.13.1" 1686 | resolved "https://registry.yarnpkg.com/koa/-/koa-2.13.1.tgz#6275172875b27bcfe1d454356a5b6b9f5a9b1051" 1687 | integrity sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w== 1688 | dependencies: 1689 | accepts "^1.3.5" 1690 | cache-content-type "^1.0.0" 1691 | content-disposition "~0.5.2" 1692 | content-type "^1.0.4" 1693 | cookies "~0.8.0" 1694 | debug "~3.1.0" 1695 | delegates "^1.0.0" 1696 | depd "^2.0.0" 1697 | destroy "^1.0.4" 1698 | encodeurl "^1.0.2" 1699 | escape-html "^1.0.3" 1700 | fresh "~0.5.2" 1701 | http-assert "^1.3.0" 1702 | http-errors "^1.6.3" 1703 | is-generator-function "^1.0.7" 1704 | koa-compose "^4.1.0" 1705 | koa-convert "^1.2.0" 1706 | on-finished "^2.3.0" 1707 | only "~0.0.2" 1708 | parseurl "^1.3.2" 1709 | statuses "^1.5.0" 1710 | type-is "^1.6.16" 1711 | vary "^1.1.2" 1712 | 1713 | lighthouse-logger@^1.0.0: 1714 | version "1.2.0" 1715 | resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz#b76d56935e9c137e86a04741f6bb9b2776e886ca" 1716 | integrity sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw== 1717 | dependencies: 1718 | debug "^2.6.8" 1719 | marky "^1.2.0" 1720 | 1721 | locate-path@^5.0.0: 1722 | version "5.0.0" 1723 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1724 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1725 | dependencies: 1726 | p-locate "^4.1.0" 1727 | 1728 | lodash.camelcase@^4.3.0: 1729 | version "4.3.0" 1730 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1731 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 1732 | 1733 | lodash.sortby@^4.7.0: 1734 | version "4.7.0" 1735 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1736 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 1737 | 1738 | lodash@^4.17.14, lodash@^4.17.19: 1739 | version "4.17.20" 1740 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 1741 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1742 | 1743 | log-update@^4.0.0: 1744 | version "4.0.0" 1745 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" 1746 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== 1747 | dependencies: 1748 | ansi-escapes "^4.3.0" 1749 | cli-cursor "^3.1.0" 1750 | slice-ansi "^4.0.0" 1751 | wrap-ansi "^6.2.0" 1752 | 1753 | loose-envify@^1.1.0: 1754 | version "1.4.0" 1755 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1756 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1757 | dependencies: 1758 | js-tokens "^3.0.0 || ^4.0.0" 1759 | 1760 | lru-cache@^6.0.0: 1761 | version "6.0.0" 1762 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1763 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1764 | dependencies: 1765 | yallist "^4.0.0" 1766 | 1767 | lz-string@^1.4.4: 1768 | version "1.4.4" 1769 | resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" 1770 | integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= 1771 | 1772 | make-dir@^3.0.0: 1773 | version "3.1.0" 1774 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1775 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1776 | dependencies: 1777 | semver "^6.0.0" 1778 | 1779 | marky@^1.2.0: 1780 | version "1.2.1" 1781 | resolved "https://registry.yarnpkg.com/marky/-/marky-1.2.1.tgz#a3fcf82ffd357756b8b8affec9fdbf3a30dc1b02" 1782 | integrity sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ== 1783 | 1784 | media-typer@0.3.0: 1785 | version "0.3.0" 1786 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1787 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1788 | 1789 | merge-stream@^2.0.0: 1790 | version "2.0.0" 1791 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1792 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1793 | 1794 | merge2@^1.3.0: 1795 | version "1.4.1" 1796 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1797 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1798 | 1799 | micromatch@^4.0.2: 1800 | version "4.0.2" 1801 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 1802 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1803 | dependencies: 1804 | braces "^3.0.1" 1805 | picomatch "^2.0.5" 1806 | 1807 | mime-db@1.45.0: 1808 | version "1.45.0" 1809 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" 1810 | integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== 1811 | 1812 | mime-types@^2.1.18, mime-types@^2.1.27, mime-types@~2.1.24: 1813 | version "2.1.28" 1814 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" 1815 | integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== 1816 | dependencies: 1817 | mime-db "1.45.0" 1818 | 1819 | mimic-fn@^2.1.0: 1820 | version "2.1.0" 1821 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1822 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1823 | 1824 | minimatch@^3.0.4: 1825 | version "3.0.4" 1826 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1827 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1828 | dependencies: 1829 | brace-expansion "^1.1.7" 1830 | 1831 | minimist@^1.2.5: 1832 | version "1.2.5" 1833 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1834 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1835 | 1836 | mkdirp-classic@^0.5.2: 1837 | version "0.5.3" 1838 | resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" 1839 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== 1840 | 1841 | mkdirp@^0.5.3, mkdirp@^0.5.5: 1842 | version "0.5.5" 1843 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1844 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1845 | dependencies: 1846 | minimist "^1.2.5" 1847 | 1848 | ms@2.0.0: 1849 | version "2.0.0" 1850 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1851 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1852 | 1853 | ms@2.1.2: 1854 | version "2.1.2" 1855 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1856 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1857 | 1858 | ms@^2.1.1: 1859 | version "2.1.3" 1860 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1861 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1862 | 1863 | negotiator@0.6.2: 1864 | version "0.6.2" 1865 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1866 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1867 | 1868 | node-fetch@^2.6.1: 1869 | version "2.6.1" 1870 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1871 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1872 | 1873 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1874 | version "3.0.0" 1875 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1876 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1877 | 1878 | npm-run-path@^4.0.1: 1879 | version "4.0.1" 1880 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1881 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1882 | dependencies: 1883 | path-key "^3.0.0" 1884 | 1885 | object-assign@^4.1.1: 1886 | version "4.1.1" 1887 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1888 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1889 | 1890 | on-finished@^2.3.0: 1891 | version "2.3.0" 1892 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1893 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1894 | dependencies: 1895 | ee-first "1.1.1" 1896 | 1897 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1898 | version "1.4.0" 1899 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1900 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1901 | dependencies: 1902 | wrappy "1" 1903 | 1904 | onetime@^5.1.0, onetime@^5.1.2: 1905 | version "5.1.2" 1906 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1907 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1908 | dependencies: 1909 | mimic-fn "^2.1.0" 1910 | 1911 | only@~0.0.2: 1912 | version "0.0.2" 1913 | resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" 1914 | integrity sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= 1915 | 1916 | open@^7.0.4, open@^7.3.0: 1917 | version "7.3.1" 1918 | resolved "https://registry.yarnpkg.com/open/-/open-7.3.1.tgz#111119cb919ca1acd988f49685c4fdd0f4755356" 1919 | integrity sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A== 1920 | dependencies: 1921 | is-docker "^2.0.0" 1922 | is-wsl "^2.1.1" 1923 | 1924 | p-limit@^2.2.0: 1925 | version "2.3.0" 1926 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1927 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1928 | dependencies: 1929 | p-try "^2.0.0" 1930 | 1931 | p-locate@^4.1.0: 1932 | version "4.1.0" 1933 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1934 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1935 | dependencies: 1936 | p-limit "^2.2.0" 1937 | 1938 | p-try@^2.0.0: 1939 | version "2.2.0" 1940 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1941 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1942 | 1943 | parse5@^6.0.1: 1944 | version "6.0.1" 1945 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" 1946 | integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== 1947 | 1948 | parseurl@^1.3.2: 1949 | version "1.3.3" 1950 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1951 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1952 | 1953 | path-exists@^4.0.0: 1954 | version "4.0.0" 1955 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1956 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1957 | 1958 | path-is-absolute@1.0.1, path-is-absolute@^1.0.0: 1959 | version "1.0.1" 1960 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1961 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1962 | 1963 | path-key@^3.0.0, path-key@^3.1.0: 1964 | version "3.1.1" 1965 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1966 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1967 | 1968 | path-parse@^1.0.6: 1969 | version "1.0.6" 1970 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1971 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1972 | 1973 | path-type@^4.0.0: 1974 | version "4.0.0" 1975 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1976 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1977 | 1978 | pathval@^1.1.0: 1979 | version "1.1.1" 1980 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1981 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1982 | 1983 | pend@~1.2.0: 1984 | version "1.2.0" 1985 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 1986 | integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= 1987 | 1988 | picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: 1989 | version "2.2.2" 1990 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1991 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1992 | 1993 | pkg-dir@^4.2.0: 1994 | version "4.2.0" 1995 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1996 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1997 | dependencies: 1998 | find-up "^4.0.0" 1999 | 2000 | portfinder@^1.0.28: 2001 | version "1.0.28" 2002 | resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" 2003 | integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== 2004 | dependencies: 2005 | async "^2.6.2" 2006 | debug "^3.1.1" 2007 | mkdirp "^0.5.5" 2008 | 2009 | prettier@^2.0.5: 2010 | version "2.2.1" 2011 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" 2012 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== 2013 | 2014 | pretty-format@^26.6.2: 2015 | version "26.6.2" 2016 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" 2017 | integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== 2018 | dependencies: 2019 | "@jest/types" "^26.6.2" 2020 | ansi-regex "^5.0.0" 2021 | ansi-styles "^4.0.0" 2022 | react-is "^17.0.1" 2023 | 2024 | progress@^2.0.1: 2025 | version "2.0.3" 2026 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2027 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2028 | 2029 | proxy-from-env@^1.0.0: 2030 | version "1.1.0" 2031 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 2032 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 2033 | 2034 | pump@^3.0.0: 2035 | version "3.0.0" 2036 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2037 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 2038 | dependencies: 2039 | end-of-stream "^1.1.0" 2040 | once "^1.3.1" 2041 | 2042 | punycode@^2.1.1: 2043 | version "2.1.1" 2044 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2045 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2046 | 2047 | puppeteer-core@^5.5.0: 2048 | version "5.5.0" 2049 | resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-5.5.0.tgz#dfb6266efe5a933cbf1a368d27025a6fd4f5a884" 2050 | integrity sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ== 2051 | dependencies: 2052 | debug "^4.1.0" 2053 | devtools-protocol "0.0.818844" 2054 | extract-zip "^2.0.0" 2055 | https-proxy-agent "^4.0.0" 2056 | node-fetch "^2.6.1" 2057 | pkg-dir "^4.2.0" 2058 | progress "^2.0.1" 2059 | proxy-from-env "^1.0.0" 2060 | rimraf "^3.0.2" 2061 | tar-fs "^2.0.0" 2062 | unbzip2-stream "^1.3.3" 2063 | ws "^7.2.3" 2064 | 2065 | qs@^6.5.2: 2066 | version "6.9.6" 2067 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" 2068 | integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== 2069 | 2070 | raw-body@^2.3.3: 2071 | version "2.4.1" 2072 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" 2073 | integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== 2074 | dependencies: 2075 | bytes "3.1.0" 2076 | http-errors "1.7.3" 2077 | iconv-lite "0.4.24" 2078 | unpipe "1.0.0" 2079 | 2080 | react-dom@^17.0.0: 2081 | version "17.0.1" 2082 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" 2083 | integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== 2084 | dependencies: 2085 | loose-envify "^1.1.0" 2086 | object-assign "^4.1.1" 2087 | scheduler "^0.20.1" 2088 | 2089 | react-is@^17.0.1: 2090 | version "17.0.1" 2091 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" 2092 | integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== 2093 | 2094 | react-refresh@^0.9.0: 2095 | version "0.9.0" 2096 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" 2097 | integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== 2098 | 2099 | react@^17.0.0: 2100 | version "17.0.1" 2101 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" 2102 | integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== 2103 | dependencies: 2104 | loose-envify "^1.1.0" 2105 | object-assign "^4.1.1" 2106 | 2107 | readable-stream@^3.1.1, readable-stream@^3.4.0: 2108 | version "3.6.0" 2109 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 2110 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 2111 | dependencies: 2112 | inherits "^2.0.3" 2113 | string_decoder "^1.1.1" 2114 | util-deprecate "^1.0.1" 2115 | 2116 | readdirp@~3.5.0: 2117 | version "3.5.0" 2118 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2119 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2120 | dependencies: 2121 | picomatch "^2.2.1" 2122 | 2123 | reduce-flatten@^2.0.0: 2124 | version "2.0.0" 2125 | resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" 2126 | integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== 2127 | 2128 | regenerator-runtime@^0.13.4: 2129 | version "0.13.7" 2130 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" 2131 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== 2132 | 2133 | resolve-path@^1.4.0: 2134 | version "1.4.0" 2135 | resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" 2136 | integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= 2137 | dependencies: 2138 | http-errors "~1.6.2" 2139 | path-is-absolute "1.0.1" 2140 | 2141 | resolve@^1.19.0: 2142 | version "1.19.0" 2143 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" 2144 | integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== 2145 | dependencies: 2146 | is-core-module "^2.1.0" 2147 | path-parse "^1.0.6" 2148 | 2149 | restore-cursor@^3.1.0: 2150 | version "3.1.0" 2151 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 2152 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 2153 | dependencies: 2154 | onetime "^5.1.0" 2155 | signal-exit "^3.0.2" 2156 | 2157 | reusify@^1.0.4: 2158 | version "1.0.4" 2159 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2160 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2161 | 2162 | rimraf@^3.0.2: 2163 | version "3.0.2" 2164 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2165 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2166 | dependencies: 2167 | glob "^7.1.3" 2168 | 2169 | rollup@^2.34.0, rollup@^2.35.1: 2170 | version "2.38.2" 2171 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.38.2.tgz#ac5feef9e3b5f1c4386a0578f3add52b8b66759f" 2172 | integrity sha512-3Sg65zfgqsnI2LUFsOmhJDvTWXwio+taySq/dsyvel8+GW+AxeW9V6YZG8BpVGQk/TS4uvGLARRH5T3ygDyyNQ== 2173 | optionalDependencies: 2174 | fsevents "~2.1.2" 2175 | 2176 | run-parallel@^1.1.9: 2177 | version "1.1.10" 2178 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" 2179 | integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== 2180 | 2181 | safe-buffer@5.1.2, safe-buffer@~5.1.1: 2182 | version "5.1.2" 2183 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2184 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2185 | 2186 | safe-buffer@~5.2.0: 2187 | version "5.2.1" 2188 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2189 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2190 | 2191 | "safer-buffer@>= 2.1.2 < 3": 2192 | version "2.1.2" 2193 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2194 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2195 | 2196 | scheduler@^0.20.1: 2197 | version "0.20.1" 2198 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" 2199 | integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== 2200 | dependencies: 2201 | loose-envify "^1.1.0" 2202 | object-assign "^4.1.1" 2203 | 2204 | semver@^5.4.1: 2205 | version "5.7.1" 2206 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2207 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2208 | 2209 | semver@^6.0.0: 2210 | version "6.3.0" 2211 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2212 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2213 | 2214 | semver@^7.3.4: 2215 | version "7.3.4" 2216 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" 2217 | integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== 2218 | dependencies: 2219 | lru-cache "^6.0.0" 2220 | 2221 | setprototypeof@1.1.0: 2222 | version "1.1.0" 2223 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 2224 | integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== 2225 | 2226 | setprototypeof@1.1.1: 2227 | version "1.1.1" 2228 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2229 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2230 | 2231 | setprototypeof@1.2.0: 2232 | version "1.2.0" 2233 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 2234 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 2235 | 2236 | shebang-command@^2.0.0: 2237 | version "2.0.0" 2238 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2239 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2240 | dependencies: 2241 | shebang-regex "^3.0.0" 2242 | 2243 | shebang-regex@^3.0.0: 2244 | version "3.0.0" 2245 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2246 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2247 | 2248 | signal-exit@^3.0.2, signal-exit@^3.0.3: 2249 | version "3.0.3" 2250 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2251 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 2252 | 2253 | slash@^3.0.0: 2254 | version "3.0.0" 2255 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2256 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2257 | 2258 | slice-ansi@^4.0.0: 2259 | version "4.0.0" 2260 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 2261 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 2262 | dependencies: 2263 | ansi-styles "^4.0.0" 2264 | astral-regex "^2.0.0" 2265 | is-fullwidth-code-point "^3.0.0" 2266 | 2267 | snowpack@^3.0.1: 2268 | version "3.0.11" 2269 | resolved "https://registry.yarnpkg.com/snowpack/-/snowpack-3.0.11.tgz#95f69f95367116e3a9bb5112d090d6328f2d3a28" 2270 | integrity sha512-lBxgkvWTgdg0szE31JUt01wQkA9Lnmm+6lxqeV9rxDfflpx7ASnldVHFvu7Se70QJmPTQB0UJjfKI+xmYGwiiQ== 2271 | dependencies: 2272 | esbuild "^0.8.7" 2273 | open "^7.0.4" 2274 | rollup "^2.34.0" 2275 | optionalDependencies: 2276 | fsevents "^2.2.0" 2277 | 2278 | source-map@^0.5.0: 2279 | version "0.5.7" 2280 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2281 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2282 | 2283 | source-map@^0.7.3: 2284 | version "0.7.3" 2285 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 2286 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 2287 | 2288 | "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: 2289 | version "1.5.0" 2290 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2291 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2292 | 2293 | string-width@^4.1.0: 2294 | version "4.2.0" 2295 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 2296 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 2297 | dependencies: 2298 | emoji-regex "^8.0.0" 2299 | is-fullwidth-code-point "^3.0.0" 2300 | strip-ansi "^6.0.0" 2301 | 2302 | string_decoder@^1.1.1: 2303 | version "1.3.0" 2304 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2305 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2306 | dependencies: 2307 | safe-buffer "~5.2.0" 2308 | 2309 | strip-ansi@^6.0.0: 2310 | version "6.0.0" 2311 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2312 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2313 | dependencies: 2314 | ansi-regex "^5.0.0" 2315 | 2316 | strip-final-newline@^2.0.0: 2317 | version "2.0.0" 2318 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2319 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2320 | 2321 | supports-color@^5.3.0: 2322 | version "5.5.0" 2323 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2324 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2325 | dependencies: 2326 | has-flag "^3.0.0" 2327 | 2328 | supports-color@^7.1.0: 2329 | version "7.2.0" 2330 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2331 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2332 | dependencies: 2333 | has-flag "^4.0.0" 2334 | 2335 | table-layout@^1.0.1: 2336 | version "1.0.1" 2337 | resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" 2338 | integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== 2339 | dependencies: 2340 | array-back "^4.0.1" 2341 | deep-extend "~0.6.0" 2342 | typical "^5.2.0" 2343 | wordwrapjs "^4.0.0" 2344 | 2345 | tar-fs@^2.0.0: 2346 | version "2.1.1" 2347 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" 2348 | integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== 2349 | dependencies: 2350 | chownr "^1.1.1" 2351 | mkdirp-classic "^0.5.2" 2352 | pump "^3.0.0" 2353 | tar-stream "^2.1.4" 2354 | 2355 | tar-stream@^2.1.4: 2356 | version "2.2.0" 2357 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" 2358 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== 2359 | dependencies: 2360 | bl "^4.0.3" 2361 | end-of-stream "^1.4.1" 2362 | fs-constants "^1.0.0" 2363 | inherits "^2.0.3" 2364 | readable-stream "^3.1.1" 2365 | 2366 | through@^2.3.8: 2367 | version "2.3.8" 2368 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2369 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2370 | 2371 | to-fast-properties@^2.0.0: 2372 | version "2.0.0" 2373 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2374 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2375 | 2376 | to-regex-range@^5.0.1: 2377 | version "5.0.1" 2378 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2379 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2380 | dependencies: 2381 | is-number "^7.0.0" 2382 | 2383 | toidentifier@1.0.0: 2384 | version "1.0.0" 2385 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2386 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2387 | 2388 | tr46@^2.0.2: 2389 | version "2.0.2" 2390 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" 2391 | integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== 2392 | dependencies: 2393 | punycode "^2.1.1" 2394 | 2395 | tsscmp@1.0.6: 2396 | version "1.0.6" 2397 | resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" 2398 | integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== 2399 | 2400 | type-detect@^4.0.0, type-detect@^4.0.5: 2401 | version "4.0.8" 2402 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2403 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2404 | 2405 | type-fest@^0.11.0: 2406 | version "0.11.0" 2407 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" 2408 | integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== 2409 | 2410 | type-is@^1.6.16: 2411 | version "1.6.18" 2412 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2413 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2414 | dependencies: 2415 | media-typer "0.3.0" 2416 | mime-types "~2.1.24" 2417 | 2418 | typescript@^4.0.0: 2419 | version "4.1.3" 2420 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" 2421 | integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== 2422 | 2423 | typical@^4.0.0: 2424 | version "4.0.0" 2425 | resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" 2426 | integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== 2427 | 2428 | typical@^5.0.0, typical@^5.2.0: 2429 | version "5.2.0" 2430 | resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" 2431 | integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== 2432 | 2433 | unbzip2-stream@^1.3.3: 2434 | version "1.4.3" 2435 | resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" 2436 | integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== 2437 | dependencies: 2438 | buffer "^5.2.1" 2439 | through "^2.3.8" 2440 | 2441 | unpipe@1.0.0: 2442 | version "1.0.0" 2443 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2444 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2445 | 2446 | util-deprecate@^1.0.1: 2447 | version "1.0.2" 2448 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2449 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2450 | 2451 | uuid@^8.3.2: 2452 | version "8.3.2" 2453 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2454 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2455 | 2456 | v8-to-istanbul@^7.1.0: 2457 | version "7.1.0" 2458 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" 2459 | integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== 2460 | dependencies: 2461 | "@types/istanbul-lib-coverage" "^2.0.1" 2462 | convert-source-map "^1.6.0" 2463 | source-map "^0.7.3" 2464 | 2465 | vary@^1.1.2: 2466 | version "1.1.2" 2467 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2468 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2469 | 2470 | webidl-conversions@^6.1.0: 2471 | version "6.1.0" 2472 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" 2473 | integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== 2474 | 2475 | whatwg-url@^8.4.0: 2476 | version "8.4.0" 2477 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" 2478 | integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== 2479 | dependencies: 2480 | lodash.sortby "^4.7.0" 2481 | tr46 "^2.0.2" 2482 | webidl-conversions "^6.1.0" 2483 | 2484 | which@^2.0.1: 2485 | version "2.0.2" 2486 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2487 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2488 | dependencies: 2489 | isexe "^2.0.0" 2490 | 2491 | wordwrapjs@^4.0.0: 2492 | version "4.0.0" 2493 | resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" 2494 | integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== 2495 | dependencies: 2496 | reduce-flatten "^2.0.0" 2497 | typical "^5.0.0" 2498 | 2499 | wrap-ansi@^6.2.0: 2500 | version "6.2.0" 2501 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 2502 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 2503 | dependencies: 2504 | ansi-styles "^4.0.0" 2505 | string-width "^4.1.0" 2506 | strip-ansi "^6.0.0" 2507 | 2508 | wrappy@1: 2509 | version "1.0.2" 2510 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2511 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2512 | 2513 | ws@^7.2.3, ws@^7.4.2: 2514 | version "7.4.2" 2515 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" 2516 | integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== 2517 | 2518 | yallist@^4.0.0: 2519 | version "4.0.0" 2520 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2521 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2522 | 2523 | yauzl@^2.10.0: 2524 | version "2.10.0" 2525 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 2526 | integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= 2527 | dependencies: 2528 | buffer-crc32 "~0.2.3" 2529 | fd-slicer "~1.1.0" 2530 | 2531 | ylru@^1.2.0: 2532 | version "1.2.1" 2533 | resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" 2534 | integrity sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ== 2535 | --------------------------------------------------------------------------------