├── .node-version
├── .gitignore
├── .eslintignore
├── src
├── index.ts
├── plugin
│ ├── generateTypeScriptFile
│ │ ├── mocks
│ │ │ ├── pages
│ │ │ │ ├── 404.tsx
│ │ │ │ ├── README.md
│ │ │ │ ├── _app.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ ├── _document.tsx
│ │ │ │ ├── api
│ │ │ │ │ ├── [authId].ts
│ │ │ │ │ ├── users
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── [userId]
│ │ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── catch-all
│ │ │ │ │ │ └── [...slug].ts
│ │ │ │ │ ├── optional-catch-all
│ │ │ │ │ │ └── [[...slug]].ts
│ │ │ │ │ └── multiple-periods
│ │ │ │ │ │ └── site.webmanifest.ts
│ │ │ │ ├── users
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ └── [userId]
│ │ │ │ │ │ └── index.tsx
│ │ │ │ ├── catch-all
│ │ │ │ │ └── [...slug].tsx
│ │ │ │ ├── optional-catch-all
│ │ │ │ │ └── [[...slug]].tsx
│ │ │ │ ├── nested-catch-all
│ │ │ │ │ └── [dynamic]
│ │ │ │ │ │ └── slugs
│ │ │ │ │ │ └── [...slug].tsx
│ │ │ │ └── route-with-symbols
│ │ │ │ │ └── [value-with-hyphens].tsx
│ │ │ └── pages-no-api-routes
│ │ │ │ └── index.tsx
│ │ ├── index.ts
│ │ ├── utils.ts
│ │ ├── types.ts
│ │ ├── getNextRouteUrlParams.ts
│ │ ├── generateTypeScriptFile.test.ts
│ │ ├── getRoutes.ts
│ │ ├── getNextPageRoute.ts
│ │ ├── generateTypeScriptFile.ts
│ │ ├── getFileContent.ts
│ │ └── __snapshots__
│ │ │ └── generateTypeScriptFile.test.ts.snap
│ └── index.ts
├── utils.test.ts
└── utils.ts
├── plugin.js
├── example
├── src
│ ├── components
│ │ ├── index.tsx
│ │ └── Link.tsx
│ ├── hooks
│ │ ├── index.ts
│ │ ├── useRouter.ts
│ │ └── useApiRoute.ts
│ ├── pages
│ │ ├── _app.tsx
│ │ ├── api
│ │ │ ├── users
│ │ │ │ ├── index.ts
│ │ │ │ └── [userId].ts
│ │ │ └── mocks.ts
│ │ ├── catch-all
│ │ │ └── [...slug].tsx
│ │ ├── optional-catch-all
│ │ │ └── [[...slug]].tsx
│ │ ├── nested-catch-all
│ │ │ └── [dynamic]
│ │ │ │ └── slugs
│ │ │ │ └── [...slug].tsx
│ │ ├── users
│ │ │ ├── index.tsx
│ │ │ └── [userId].tsx
│ │ └── index.tsx
│ └── @types
│ │ └── next-type-safe-routes
│ │ └── index.d.ts
├── next-env.d.ts
├── public
│ ├── favicon.ico
│ └── vercel.svg
├── next.config.js
├── package.json
├── .gitignore
├── tsconfig.json
├── README.md
└── yarn.lock
├── example.gif
├── getRoute.gif
├── jest.config.js
├── .github
└── workflows
│ ├── test.yml
│ └── main.yml
├── tsconfig.json
├── .prettierrc.js
├── .eslintrc.js
├── license.md
├── package.json
└── README.md
/.node-version:
--------------------------------------------------------------------------------
1 | 14.16.0
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | \dist
2 | \node_modules
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist
2 | example
3 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./utils";
2 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/404.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/_app.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/index.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/_document.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/[authId].ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/users/index.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/plugin.js:
--------------------------------------------------------------------------------
1 | module.exports = require("./dist/plugin").default;
2 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/users/index.ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages-no-api-routes/index.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/catch-all/[...slug].ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/users/[userId]/index.ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/catch-all/[...slug].tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/users/[userId]/index.tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/example/src/components/index.tsx:
--------------------------------------------------------------------------------
1 | export { default as Link } from "./Link";
2 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/optional-catch-all/[[...slug]].ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/optional-catch-all/[[...slug]].tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/api/multiple-periods/site.webmanifest.ts:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/example.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ckastbjerg/next-type-safe-routes/HEAD/example.gif
--------------------------------------------------------------------------------
/getRoute.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ckastbjerg/next-type-safe-routes/HEAD/getRoute.gif
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/nested-catch-all/[dynamic]/slugs/[...slug].tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/mocks/pages/route-with-symbols/[value-with-hyphens].tsx:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: 'ts-jest',
3 | testEnvironment: 'node',
4 | };
--------------------------------------------------------------------------------
/src/plugin/generateTypeScriptFile/index.ts:
--------------------------------------------------------------------------------
1 | export { default } from "./generateTypeScriptFile";
2 |
--------------------------------------------------------------------------------
/example/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
{user.name}
20 | Back to users 21 | > 22 | ); 23 | }; 24 | 25 | export default UserPage; 26 | -------------------------------------------------------------------------------- /src/plugin/generateTypeScriptFile/getRoutes.ts: -------------------------------------------------------------------------------- 1 | import getNextPageRoute from "./getNextPageRoute"; 2 | import getNextRouteUrlParams from "./getNextRouteUrlParams"; 3 | import { Page } from "./types"; 4 | import { getIsCatchAllRoute, getIsOptionalCatchAllRoute } from "./utils"; 5 | 6 | const getRoutes = (fileNames: string[]): Page[] => { 7 | return fileNames.map((fileName) => { 8 | return { 9 | route: getNextPageRoute(fileName), 10 | params: getNextRouteUrlParams(fileName), 11 | isCatchAllRoute: getIsCatchAllRoute(fileName), 12 | isOptionalCatchAllRoute: getIsOptionalCatchAllRoute(fileName), 13 | }; 14 | }); 15 | }; 16 | 17 | export default getRoutes; 18 | -------------------------------------------------------------------------------- /src/plugin/generateTypeScriptFile/getNextPageRoute.ts: -------------------------------------------------------------------------------- 1 | import { getIsCatchAllRoute, getIsOptionalCatchAllRoute } from "./utils"; 2 | 3 | const getNextPageRoute = (fileName: string) => { 4 | if (getIsOptionalCatchAllRoute(fileName)) { 5 | return fileName.split("/[[...")[0]; 6 | } else if (getIsCatchAllRoute(fileName)) { 7 | return fileName.split("/[...")[0]; 8 | } 9 | 10 | const route = fileName 11 | // remove the file extension 12 | .replace(/\.[^.]+$/, "") 13 | // index pages don't need the "/index" when used as hrefs 14 | .replace("/index", ""); 15 | 16 | // if this is the root index file, return "/"" instead of "" 17 | return route === "" ? "/" : route; 18 | }; 19 | 20 | export default getNextPageRoute; 21 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: "@typescript-eslint/parser", // Specifies the ESLint parser 3 | parserOptions: { 4 | ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features 5 | sourceType: "module", // Allows for the use of imports 6 | ecmaFeatures: { 7 | jsx: true, // Allows for the parsing of JSX 8 | }, 9 | }, 10 | settings: { 11 | react: { 12 | version: "detect", // Tells eslint-plugin-react to automatically detect the version of React to use 13 | }, 14 | }, 15 | plugins: ["prettier"], 16 | extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], 17 | rules: { 18 | // if you turn off a rule, explain why 19 | "prettier/prettier": "warn", 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /example/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { Link } from "components"; 2 | import { useRouter } from "hooks"; 3 | 4 | const Home = () => { 5 | const { push } = useRouter(); 6 | return ( 7 | <> 8 | 9 | Optional catch all (no path) 10 | 11 | Optional catch all 12 | 13 | Catch all 14 | 21 | Nested catch all (with params) 22 | 23 | > 24 | ); 25 | }; 26 | 27 | export default Home; 28 | -------------------------------------------------------------------------------- /example/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/src/@types/next-type-safe-routes/index.d.ts: -------------------------------------------------------------------------------- 1 | // IMPORTANT! This file is autogenerated by the `type-safe-next-routes` 2 | // package. You should _not_ update these types manually... 3 | 4 | declare module "next-type-safe-routes" { 5 | type Query = { [key: string]: any }; 6 | export type TypeSafePage = { route: "/catch-all", path: string, query?: Query } | "/" | { route: "/", query?: Query } | { route: "/nested-catch-all/[dynamic]/slugs", path: string, params: { dynamic: string | number }, query?: Query } | "/optional-catch-all" | { route: "/optional-catch-all", path?: string, query?: Query } | { route: "/users/[userId]", params: { userId: string | number }, query?: Query } | "/users" | { route: "/users", query?: Query }; 7 | export type TypeSafeApiRoute = "/api/mocks" | { route: "/api/mocks", query?: Query } | { route: "/api/users/[userId]", params: { userId: string | number }, query?: Query } | "/api/users" | { route: "/api/users", query?: Query }; 8 | export const getPathname = (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 9 | export const getRoute = (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 10 | } 11 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [year] [fullname] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { getRoute, getPathname } from "./utils"; 2 | 3 | describe("utils/getRoute", () => { 4 | it("works as expected for basic routes", () => { 5 | expect(getRoute("/routes")).toBe("/routes"); 6 | }); 7 | 8 | it("works as expected when having (untyped) query params", () => { 9 | expect(getRoute({ route: "/routes", query: { a: "b", 1: 2 } })).toBe( 10 | "/routes?1=2&a=b" 11 | ); 12 | }); 13 | 14 | it("works as expected for dynamic routes", () => { 15 | const route = getRoute({ 16 | route: "/routes/[routeId]", 17 | params: { routeId: 1 }, 18 | }); 19 | expect(route).toBe("/routes/1"); 20 | }); 21 | 22 | it("works as expected when having (untyped) query params for dynamic routes", () => { 23 | const route = getRoute({ 24 | route: "/routes/[routeId]", 25 | params: { routeId: 1 }, 26 | query: { a: "b" }, 27 | }); 28 | expect(route).toBe("/routes/1?a=b"); 29 | }); 30 | }); 31 | 32 | describe("utils/getPathname", () => { 33 | it("works as expected for basic routes", () => { 34 | expect(getPathname("/routes")).toBe("/routes"); 35 | }); 36 | 37 | it("works as expected for dynamic routes", () => { 38 | const route = getPathname({ 39 | route: "/routes/[routeId]", 40 | params: { routeId: 1 }, 41 | }); 42 | expect(route).toBe("/routes/[routeId]"); 43 | }); 44 | }); 45 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | // NOTE, these will be replaced with the "real" TypeSafePage type 2 | // when generating types for a project 3 | type Query = { [key: string]: any }; 4 | type TypeSafePage = 5 | | string 6 | | { route: string; path?: string; query?: Query } 7 | | { route: string; path?: string; params: any; query?: Query }; 8 | type TypeSafeApiRoute = TypeSafePage; 9 | 10 | export const getPathname = (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => { 11 | if (typeof typeSafeUrl === "string") { 12 | return typeSafeUrl; 13 | } else { 14 | return typeSafeUrl.route; 15 | } 16 | }; 17 | 18 | const getSearchParams = (query: any) => { 19 | if (!query) { 20 | return ""; 21 | } 22 | 23 | const params = new URLSearchParams(query as any).toString(); 24 | return `?${params}`; 25 | }; 26 | 27 | export const getRoute = (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => { 28 | if (typeof typeSafeUrl === "string") { 29 | return `${typeSafeUrl}`; 30 | } 31 | 32 | const searchParams = getSearchParams(typeSafeUrl.query); 33 | 34 | let route = typeSafeUrl.route as string; 35 | const params = "params" in typeSafeUrl ? typeSafeUrl.params : {}; 36 | Object.keys(params).forEach((param) => { 37 | route = route.replace(`[${param}]`, (params as any)[param]); 38 | }); 39 | const path = typeSafeUrl.path || ""; 40 | 41 | return `${route}${path}${searchParams}`; 42 | }; 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-type-safe-routes", 3 | "version": "0.3.1-alpha.1", 4 | "description": "Never should your users experience broken links again!", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "files": [ 8 | "dist", 9 | "bin", 10 | "plugin.js" 11 | ], 12 | "scripts": { 13 | "build": "tsc", 14 | "prepare": "yarn build", 15 | "test": "yarn jest --updateSnapshot", 16 | "lint": "eslint '*/**/*.{js,ts}' --quiet --fix" 17 | }, 18 | "husky": { 19 | "hooks": { 20 | "pre-commit": "lint-staged" 21 | } 22 | }, 23 | "lint-staged": { 24 | "*.{js,ts,tsx}": [ 25 | "eslint --fix" 26 | ] 27 | }, 28 | "dependencies": { 29 | "chokidar": "^3.5.1", 30 | "mkdirp": "^1.0.4", 31 | "walk-sync": "^2.2.0" 32 | }, 33 | "devDependencies": { 34 | "@types/jest": "^26.0.21", 35 | "@types/node": "^14.14.34", 36 | "@typescript-eslint/eslint-plugin": "^5.10.1", 37 | "@typescript-eslint/parser": "^5.10.1", 38 | "commander": "^7.1.0", 39 | "eslint": "^8.7.0", 40 | "eslint-plugin-prettier": "^4.0.0", 41 | "jest": "^26.6.3", 42 | "prettier": "^2.5.1", 43 | "ts-jest": "^26.5.4", 44 | "typescript": "^4.5.5" 45 | }, 46 | "repository": { 47 | "type": "git", 48 | "url": "git+https://github.com/ckastbjerg/next-type-safe-routes.git" 49 | }, 50 | "keywords": [], 51 | "author": "Christian Kastbjerg", 52 | "license": "ISC" 53 | } 54 | -------------------------------------------------------------------------------- /src/plugin/generateTypeScriptFile/generateTypeScriptFile.ts: -------------------------------------------------------------------------------- 1 | import walkSync from "walk-sync"; 2 | 3 | import getFileContent from "./getFileContent"; 4 | import getRoutes from "./getRoutes"; 5 | 6 | const ignorePagesRoutes = ["_app.tsx", "_document.tsx"]; 7 | const shouldIncludePageEntry = (route: string) => 8 | route.match(".tsx") && !ignorePagesRoutes.includes(route); 9 | const shouldIncludeApiRouteEntry = (endpoint: string) => endpoint.match(".ts"); 10 | 11 | const getApiRouteFiles = (pagesDir: string) => { 12 | try { 13 | return walkSync(`${pagesDir}/api`, { 14 | directories: false, 15 | }); 16 | } catch (err) { 17 | // api routes are not required 18 | if (err.code === "ENOENT") { 19 | return []; 20 | } 21 | throw err; 22 | } 23 | }; 24 | 25 | const generateTypeScriptFile = (pagesDir: string) => { 26 | const pagesFiles = walkSync(pagesDir, { 27 | directories: false, 28 | ignore: ["api"], 29 | }); 30 | const apiRouteFiles = getApiRouteFiles(pagesDir); 31 | const relevantPages = pagesFiles.filter(shouldIncludePageEntry); 32 | const pages = getRoutes(relevantPages.map((page) => `/${page}`)); 33 | const relavantApiRoutes = apiRouteFiles.filter(shouldIncludeApiRouteEntry); 34 | const apiRoutes = getRoutes( 35 | relavantApiRoutes.map((route) => `/api/${route}`) 36 | ); 37 | 38 | const fileContent = getFileContent({ pages, apiRoutes }); 39 | 40 | return fileContent; 41 | }; 42 | 43 | export default generateTypeScriptFile; 44 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. 16 | 17 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. 18 | 19 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /src/plugin/generateTypeScriptFile/getFileContent.ts: -------------------------------------------------------------------------------- 1 | import { ApiRoute, Page } from "./types"; 2 | 3 | const getParam = (param: string) => `"${param}": string | number`; 4 | 5 | const getTypeSafeRoute = ({ 6 | route, 7 | params, 8 | isCatchAllRoute, 9 | isOptionalCatchAllRoute, 10 | }: ApiRoute) => { 11 | if (!params?.length) { 12 | if (isOptionalCatchAllRoute) { 13 | return `"${route}" | { route: "${route}", path?: string, query?: Query }`; 14 | } else if (isCatchAllRoute) { 15 | return `{ route: "${route}", path: string, query?: Query }`; 16 | } else { 17 | return `"${route}" | { route: "${route}", query?: Query }`; 18 | } 19 | } else { 20 | const paramsString = params.map(getParam).join(","); 21 | if (isOptionalCatchAllRoute) { 22 | return `"${route}" | { route: "${route}", path?: string, params: { ${paramsString} }, query?: Query }`; 23 | } else if (isCatchAllRoute) { 24 | return `{ route: "${route}", path: string, params: { ${paramsString} }, query?: Query }`; 25 | } else { 26 | return `{ route: "${route}", params: { ${paramsString} }, query?: Query }`; 27 | } 28 | } 29 | }; 30 | 31 | type Args = { 32 | apiRoutes: ApiRoute[]; 33 | pages: Page[]; 34 | }; 35 | 36 | const getFileContent = ({ 37 | apiRoutes, 38 | pages, 39 | }: Args) => `// IMPORTANT! This file is autogenerated by the \`type-safe-next-routes\` 40 | // package. You should _not_ update these types manually... 41 | 42 | declare module "next-type-safe-routes" { 43 | type Query = { [key: string]: any }; 44 | export type TypeSafePage = ${pages.map(getTypeSafeRoute).join(" | ")}; 45 | ${ 46 | apiRoutes.length > 0 47 | ? `export type TypeSafeApiRoute = ${apiRoutes 48 | .map(getTypeSafeRoute) 49 | .join(" | ")};` 50 | : "" 51 | } 52 | export const getPathname: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 53 | export const getRoute: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 54 | } 55 | `; 56 | 57 | export default getFileContent; 58 | -------------------------------------------------------------------------------- /src/plugin/index.ts: -------------------------------------------------------------------------------- 1 | import generateTypeScriptFile from "./generateTypeScriptFile"; 2 | 3 | import mkdirp from "mkdirp"; 4 | import fs from "fs"; 5 | import chokidar from "chokidar"; 6 | import path from "path"; 7 | 8 | const packageName = "next-type-safe-routes"; 9 | const typeFolder = path.join("@types", packageName); 10 | 11 | const log = (message: string) => { 12 | console.log(`\x1b[36m${packageName}\x1b[0m: ${message}`); 13 | }; 14 | 15 | const writeTypesToDisc = (nextPagesDirectory: string) => { 16 | // we assume the src directory is the directory containing the pages directory 17 | const srcDir = path.dirname(nextPagesDirectory); 18 | const typeFolderPath = path.join(srcDir, typeFolder); 19 | const typeScriptFile = generateTypeScriptFile(nextPagesDirectory); 20 | 21 | mkdirp.sync(typeFolderPath); 22 | fs.writeFileSync(path.join(typeFolderPath, "index.d.ts"), typeScriptFile); 23 | 24 | log(`types written to ${typeFolder}`); 25 | }; 26 | 27 | const run = (nextConfig: any = {}) => { 28 | return Object.assign({}, nextConfig, { 29 | webpack(config, options) { 30 | // This seems to be the way to get the path to the pages 31 | // directory in a Next.js app. Since it's possible to have a 32 | // `/src` folder (https://nextjs.org/docs/advanced-features/src-directory) 33 | // we cannot assume that it just in a `/pages` folder directly 34 | // in the root of the project 35 | const pagesDir = config.resolve.alias["private-next-pages"]; 36 | // Generate the types file when the app is being compiled 37 | writeTypesToDisc(pagesDir); 38 | // Generate the types file again when page files are added/removed 39 | const watcher = chokidar.watch(pagesDir, { ignoreInitial: true }); 40 | watcher.on("add", () => writeTypesToDisc(pagesDir)); 41 | watcher.on("unlink", () => writeTypesToDisc(pagesDir)); 42 | 43 | // if other webpack customizations exist, run them 44 | if (typeof nextConfig.webpack === "function") { 45 | return nextConfig.webpack(config, options); 46 | } 47 | 48 | // Return the un-modified config 49 | return config; 50 | }, 51 | }); 52 | }; 53 | 54 | export default run; 55 | -------------------------------------------------------------------------------- /src/plugin/generateTypeScriptFile/__snapshots__/generateTypeScriptFile.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`plugin/generateTypeScriptFile works as expected 1`] = ` 4 | "// IMPORTANT! This file is autogenerated by the \`type-safe-next-routes\` 5 | // package. You should _not_ update these types manually... 6 | 7 | declare module \\"next-type-safe-routes\\" { 8 | type Query = { [key: string]: any }; 9 | export type TypeSafePage = \\"/404\\" | { route: \\"/404\\", query?: Query } | { route: \\"/catch-all\\", path: string, query?: Query } | \\"/\\" | { route: \\"/\\", query?: Query } | { route: \\"/nested-catch-all/[dynamic]/slugs\\", path: string, params: { \\"dynamic\\": string | number }, query?: Query } | \\"/optional-catch-all\\" | { route: \\"/optional-catch-all\\", path?: string, query?: Query } | { route: \\"/route-with-symbols/[value-with-hyphens]\\", params: { \\"value-with-hyphens\\": string | number }, query?: Query } | { route: \\"/users/[userId]\\", params: { \\"userId\\": string | number }, query?: Query } | \\"/users\\" | { route: \\"/users\\", query?: Query }; 10 | export type TypeSafeApiRoute = { route: \\"/api/[authId]\\", params: { \\"authId\\": string | number }, query?: Query } | { route: \\"/api/catch-all\\", path: string, query?: Query } | \\"/api/multiple-periods/site.webmanifest\\" | { route: \\"/api/multiple-periods/site.webmanifest\\", query?: Query } | \\"/api/optional-catch-all\\" | { route: \\"/api/optional-catch-all\\", path?: string, query?: Query } | { route: \\"/api/users/[userId]\\", params: { \\"userId\\": string | number }, query?: Query } | \\"/api/users\\" | { route: \\"/api/users\\", query?: Query }; 11 | export const getPathname: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 12 | export const getRoute: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 13 | } 14 | " 15 | `; 16 | 17 | exports[`plugin/generateTypeScriptFile works for projects not using API routes 1`] = ` 18 | "// IMPORTANT! This file is autogenerated by the \`type-safe-next-routes\` 19 | // package. You should _not_ update these types manually... 20 | 21 | declare module \\"next-type-safe-routes\\" { 22 | type Query = { [key: string]: any }; 23 | export type TypeSafePage = \\"/\\" | { route: \\"/\\", query?: Query }; 24 | 25 | export const getPathname: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 26 | export const getRoute: (typeSafeUrl: TypeSafePage | TypeSafeApiRoute) => string; 27 | } 28 | " 29 | `; 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
20 |
21 | ## Features
22 |
23 | - **Automatic route listing**. Avoid having to maintain a list of existing pages for your application
24 | - **Compile time route validation**. Avoid having to run your application to verify if links are correct, just use types
25 | - **Unopinionated**. Use our simple and composable utils or create your own abstraction
26 |
27 | ## Installation
28 |
29 | Install using yarn:
30 |
31 | ```bash
32 | yarn add next-type-safe-routes
33 | ```
34 |
35 | Or using npm:
36 |
37 | ```bash
38 | npm install next-type-safe-routes --save
39 | ```
40 |
41 | ## Usage
42 |
43 | > For an example setup, see the [`/example`](/example) folder
44 |
45 | The easiest way to use `next-type-safe-routes`, is with [`next-compose-plugins`](https://github.com/cyrilwanner/next-compose-plugins). With `next-compose-plugins` installed, you can add a `next.config.js` file with the following content:
46 |
47 | ```js
48 | const withPlugins = require("next-compose-plugins");
49 | const nextTypeSafePages = require("next-type-safe-routes/plugin");
50 |
51 | module.exports = withPlugins([nextTypeSafePages]);
52 | ```
53 |
54 | When you start up your application, we will generate types for all of your pages and API routes and save them to the file `@types/next-type-safe-routes/index.d.ts` in the root of your project. The file will be updated whenever you add or remove pages and API routes.
55 |
56 | > Note, you should commit this file as part of your project. And if you're using a code formatter or linter, you may want to add this file to your ignore files. E.g. `.eslintignore` and `.prettierignore` files.
57 |
58 | You can now import the `getRoute` util from `next-type-safe-routes` and use it to retrieve a route that's is guaranteed to exist in your application.
59 |
60 | ```ts
61 | import { getRoute } from "next-type-safe-routes";
62 |
63 | // for simple routes (e.g. the file `/pages/users.tsx`)
64 | getRoute("/users");
65 | // for dynamic routes (e.g. the file `/pages/users/[userId]/index.tsx`)
66 | getRoute({ route: "/users/[userId]", params: { userId: "1" } });
67 | // for catch all routes (e.g. the file `/pages/catch-all/[[...slug]].tsx`)
68 | getRoute({ route: "/catch-all", path: "/a/b/c" });
69 | ```
70 |
71 | Now you just need to decide how you want to integrate `next-type-safe-routes` in your project. If you want inspiration, we demonstrate how to create a simple abstraction for the Next.js `Link` and `router` in [the example project](/example/src).
72 |
73 |
74 |
75 | ## How it works
76 |
77 | Since the Next.js router is based (strictly) on the file-system, we can determine which pages and API routes exists in an application simply by parsing the `/pages` folder. And due to the strictness, we can also determine which parameters are needed for dynamic routes.
78 |
79 | As mentioned in the usage section, we generate a module declaration specific to your project when running your project. The output looks like this:
80 |
81 | ```ts
82 | declare module "next-type-safe-routes" {
83 | export type TypeSafePage = ... // all your pages
84 | export type TypeSafeApiRoute = ... // all your routes
85 | export const getPathname = ... // typed based on your routes
86 | export const getRoute = ... // typed based on your routes
87 | }
88 | ```
89 |
90 | > See [`/example/src/@types/next-type-safe-routes/index.d.ts`](/example/src/@types/next-type-safe-routes/index.d.ts) for a real example
91 |
92 | The trick here is, that we override the types for `next-type-safe-routes`. And we (re)define the args accepted by the `getRoute` and `getPathname` to match the types for your project.
93 |
94 | The declaration will be written to `@types/next-type-safe-routes/index.d.ts` in the root (determined by Next.js) of your project.
95 |
96 | ## API reference
97 |
98 | How you ensure that only links to existing pages is essentially up to you, but we do expose a few _tiny_ util methods to help you do this.
99 |
100 | #### The `getRoute` method
101 |
102 | A simple method that converts a type-safe route to an "actual" route.
103 |
104 | **Examples:**
105 |
106 | ```ts
107 | import { getRoute } from "next-type-safe-routes";
108 |
109 | // For simple (non-dynamic) routes
110 | const route = getRoute("/users"); // => "/users"
111 |
112 | // With query params
113 | const route = getRoute({
114 | route: "/users",
115 | query: { "not-typed": "whatevs" },
116 | }); // => "/users?not-typed=whatevs"
117 |
118 | // For dynamic routes
119 | const route = getRoute({
120 | route: "/users/[userId]",
121 | params: { userId: 1234 },
122 | }); // => "/users/1234"
123 |
124 | // For catch all routes
125 | const route = getRoute({
126 | route: "/catch-all",
127 | path: "/can/be/anything",
128 | }); // => "/catch-all/can/be/anything"
129 | ```
130 |
131 | > [Optional catch all routes](https://nextjs.org/docs/routing/dynamic-routes#optional-catch-all-routes) are also supported.
132 |
133 | #### The `getPathname` method
134 |
135 | The `getPathname` works similarly to the `getRoute`. It just returs a [Next.js pathname](https://nextjs.org/docs/api-reference/next/router#router-object). For instance:
136 |
137 | ```ts
138 | import { getPathname } from "next-type-safe-routes";
139 |
140 | const path = getPathname({
141 | route: "/users/[userId]",
142 | params: { userId: 1234 },
143 | }); // => `/users/[userId]`
144 | ```
145 |
146 | #### The `TypeSafePage` and `TypeSafeApiRoute` types
147 |
148 | These can be useful for making your own abstraction. For instance, if you want to make a tiny abstraction ontop of the `next/router`:
149 |
150 | ```ts
151 | import { TypeSafePage, getRoute } from "next-type-safe-routes";
152 | import { useRouter as useNextRouter } from "next/router";
153 |
154 | const useRouter = () => {
155 | const router = useNextRouter();
156 |
157 | // Say you only want to allow links to pages (and not API routes)
158 | const push = (typeSafeUrl: TypeSafePage) => {
159 | router.push(getRoute(typeSafeUrl));
160 | };
161 |
162 | return { ...router, push };
163 | };
164 |
165 | export default useRouter;
166 | ```
167 |
168 | For basic routes, the type can be of the type `string` or:
169 |
170 | ```ts
171 | {
172 | route: string,
173 | query?: { ... } // any key value pairs (not type-safe)
174 | }
175 | ```
176 |
177 | And for dynamic routes, the type is always:
178 |
179 | ```ts
180 | {
181 | route: string,
182 | params: { ... }, // based on the file name
183 | query?: { ... } // any key value pairs (not type-safe)
184 | }
185 | ```
186 |
187 | And for [catch all routes](https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes), a (non-typed) `path` will also be required (or optional for [optional catch all routes](https://nextjs.org/docs/routing/dynamic-routes#optional-catch-all-routes)):
188 |
189 | ```ts
190 | {
191 | route: string,
192 | path: string,
193 | params: { ... }, // based on the file name
194 | query?: { ... } // any key value pairs (not type-safe)
195 | }
196 | ```
197 |
198 | **Examples**:
199 |
200 | ```ts
201 | type Query = { [key: string]: any };
202 | export type TypeSafePage =
203 | | "/users"
204 | | { route: "/users"; query?: Query }
205 | | {
206 | route: "/users/[userId]";
207 | params: { userId: string | number };
208 | query?: Query;
209 | }
210 | | {
211 | route: "/users/[userId]/catch-all-route";
212 | params: { userId: string | number };
213 | path="/catch/all/path"
214 | query?: Query;
215 | };
216 | ```
217 |
218 | > Note, the `TypeSafePage` and `TypeSafeApiRoute` are kept separate even though they are essentially the same type. We do this, as you may potentially want to distinguish between them in your application.
219 |
220 | ## Motivation
221 |
222 | At my company, [Proper](https://helloproper.com/), we like pages. Like...a lot! Our platform is a fairly large Next.js application consisting of ~70 pages. And we link between pages ~200 places in the application.
223 |
224 | We find that having pages make features easily discoverable by end-users and developers alike. And having pages (urls) for each of our features help us maintain a sane information architecture throughout our platform.
225 |
226 | The [Next.js file-system based router](https://nextjs.org/docs/routing/introduction) help us stay consistent and organised around our pages. But we've had some incidents where our application was released with dead links.
227 |
228 | At one point, a file in the `/pages` folder was renamed and we simply overlooked (forgot to change) some of the links to that page. Another time, a bit of "clever" string concatenation caused an issue. In this case, we had moved a page, and failed to update all links to the page correctly due to the concatenated links.
229 |
230 | With the `next-type-safe-routes`, we're trying to mitigate this issue. The plugin gives us confidence when refactoring as well as a top notch developer experience.
231 |
232 | > We considered something like the [`next-routes`](https://github.com/fridays/next-routes) approach, but we don't want to manually have to maintain a list of routes in the application. We prefer conventions to be enforced when possible.
233 |
--------------------------------------------------------------------------------
/example/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.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/helper-validator-identifier@^7.12.11":
13 | version "7.12.11"
14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
15 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
16 |
17 | "@babel/highlight@^7.10.4":
18 | version "7.13.10"
19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
20 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
21 | dependencies:
22 | "@babel/helper-validator-identifier" "^7.12.11"
23 | chalk "^2.0.0"
24 | js-tokens "^4.0.0"
25 |
26 | "@babel/runtime@7.12.5":
27 | version "7.12.5"
28 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
29 | integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
30 | dependencies:
31 | regenerator-runtime "^0.13.4"
32 |
33 | "@babel/types@7.8.3":
34 | version "7.8.3"
35 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
36 | integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
37 | dependencies:
38 | esutils "^2.0.2"
39 | lodash "^4.17.13"
40 | to-fast-properties "^2.0.0"
41 |
42 | "@hapi/accept@5.0.1":
43 | version "5.0.1"
44 | resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10"
45 | integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q==
46 | dependencies:
47 | "@hapi/boom" "9.x.x"
48 | "@hapi/hoek" "9.x.x"
49 |
50 | "@hapi/boom@9.x.x":
51 | version "9.1.2"
52 | resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38"
53 | integrity sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==
54 | dependencies:
55 | "@hapi/hoek" "9.x.x"
56 |
57 | "@hapi/hoek@9.x.x":
58 | version "9.1.1"
59 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa"
60 | integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw==
61 |
62 | "@next/env@10.0.9":
63 | version "10.0.9"
64 | resolved "https://registry.yarnpkg.com/@next/env/-/env-10.0.9.tgz#455fd364c8a5ee012b2cd4406d5294164990706d"
65 | integrity sha512-MERX3DY5u0Ed29eAsXeFBCZlFAGBtmjf7+Nht0hfgB25MPKKkIbC/0MRPcX/PQcAgLHsAHO6ay1u9xKzR4Vzjw==
66 |
67 | "@next/polyfill-module@10.0.9":
68 | version "10.0.9"
69 | resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.0.9.tgz#0c21442dd73ec31ae30ac560bc5c5fdce068a98f"
70 | integrity sha512-kPOP6ku/e8zdrK8hwxOrjUrPLcdDEj12huLHVz+DZU+20q6VlhMOtR8aKHW1460L4LoLE/DAa7YyIuxtArhDRg==
71 |
72 | "@next/react-dev-overlay@10.0.9":
73 | version "10.0.9"
74 | resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.0.9.tgz#5162d66c05b2a0ca0d155f7e6663e8134d9d4ac9"
75 | integrity sha512-JsSh2Y004MEuPYqBD9eTl4PVZIjSzSy2GcD7MrW/gQcExYNpeMIJAbh8/OcyO1t+OnQeIHF5s/xTMsDHBGNcew==
76 | dependencies:
77 | "@babel/code-frame" "7.12.11"
78 | anser "1.4.9"
79 | chalk "4.0.0"
80 | classnames "2.2.6"
81 | css.escape "1.5.1"
82 | data-uri-to-buffer "3.0.1"
83 | platform "1.3.6"
84 | shell-quote "1.7.2"
85 | source-map "0.8.0-beta.0"
86 | stacktrace-parser "0.1.10"
87 | strip-ansi "6.0.0"
88 |
89 | "@next/react-refresh-utils@10.0.9":
90 | version "10.0.9"
91 | resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.0.9.tgz#cdf9e41f8854c113397853daf78469b0c8140f14"
92 | integrity sha512-LSoKnM+fI9MHHew+mBg1w2e4/gjwPQsI+mDTzmfwdBwje+j9U2Int6XOZftMqBPXSlL04vjC9SRBkp0+3h8cNA==
93 |
94 | "@opentelemetry/api@0.14.0":
95 | version "0.14.0"
96 | resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
97 | integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==
98 | dependencies:
99 | "@opentelemetry/context-base" "^0.14.0"
100 |
101 | "@opentelemetry/context-base@^0.14.0":
102 | version "0.14.0"
103 | resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
104 | integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
105 |
106 | "@types/prop-types@*":
107 | version "15.7.3"
108 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
109 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
110 |
111 | "@types/react@^17.0.3":
112 | version "17.0.3"
113 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79"
114 | integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==
115 | dependencies:
116 | "@types/prop-types" "*"
117 | "@types/scheduler" "*"
118 | csstype "^3.0.2"
119 |
120 | "@types/scheduler@*":
121 | version "0.16.1"
122 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
123 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
124 |
125 | anser@1.4.9:
126 | version "1.4.9"
127 | resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
128 | integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==
129 |
130 | ansi-regex@^5.0.0:
131 | version "5.0.0"
132 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
133 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
134 |
135 | ansi-styles@^3.2.1:
136 | version "3.2.1"
137 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
138 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
139 | dependencies:
140 | color-convert "^1.9.0"
141 |
142 | ansi-styles@^4.1.0:
143 | version "4.3.0"
144 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
145 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
146 | dependencies:
147 | color-convert "^2.0.1"
148 |
149 | anymatch@~3.1.1:
150 | version "3.1.1"
151 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
152 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
153 | dependencies:
154 | normalize-path "^3.0.0"
155 | picomatch "^2.0.4"
156 |
157 | asn1.js@^5.2.0:
158 | version "5.4.1"
159 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
160 | integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
161 | dependencies:
162 | bn.js "^4.0.0"
163 | inherits "^2.0.1"
164 | minimalistic-assert "^1.0.0"
165 | safer-buffer "^2.1.0"
166 |
167 | assert@^1.1.1:
168 | version "1.5.0"
169 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
170 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
171 | dependencies:
172 | object-assign "^4.1.1"
173 | util "0.10.3"
174 |
175 | ast-types@0.13.2:
176 | version "0.13.2"
177 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48"
178 | integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==
179 |
180 | babel-plugin-syntax-jsx@6.18.0:
181 | version "6.18.0"
182 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
183 | integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
184 |
185 | base64-js@^1.0.2:
186 | version "1.5.1"
187 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
188 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
189 |
190 | big.js@^5.2.2:
191 | version "5.2.2"
192 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
193 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
194 |
195 | binary-extensions@^2.0.0:
196 | version "2.2.0"
197 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
198 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
199 |
200 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
201 | version "4.12.0"
202 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
203 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
204 |
205 | bn.js@^5.0.0, bn.js@^5.1.1:
206 | version "5.2.0"
207 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
208 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
209 |
210 | braces@~3.0.2:
211 | version "3.0.2"
212 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
213 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
214 | dependencies:
215 | fill-range "^7.0.1"
216 |
217 | brorand@^1.0.1, brorand@^1.1.0:
218 | version "1.1.0"
219 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
220 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
221 |
222 | browserify-aes@^1.0.0, browserify-aes@^1.0.4:
223 | version "1.2.0"
224 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
225 | integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
226 | dependencies:
227 | buffer-xor "^1.0.3"
228 | cipher-base "^1.0.0"
229 | create-hash "^1.1.0"
230 | evp_bytestokey "^1.0.3"
231 | inherits "^2.0.1"
232 | safe-buffer "^5.0.1"
233 |
234 | browserify-cipher@^1.0.0:
235 | version "1.0.1"
236 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
237 | integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
238 | dependencies:
239 | browserify-aes "^1.0.4"
240 | browserify-des "^1.0.0"
241 | evp_bytestokey "^1.0.0"
242 |
243 | browserify-des@^1.0.0:
244 | version "1.0.2"
245 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
246 | integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
247 | dependencies:
248 | cipher-base "^1.0.1"
249 | des.js "^1.0.0"
250 | inherits "^2.0.1"
251 | safe-buffer "^5.1.2"
252 |
253 | browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
254 | version "4.1.0"
255 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
256 | integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
257 | dependencies:
258 | bn.js "^5.0.0"
259 | randombytes "^2.0.1"
260 |
261 | browserify-sign@^4.0.0:
262 | version "4.2.1"
263 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
264 | integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
265 | dependencies:
266 | bn.js "^5.1.1"
267 | browserify-rsa "^4.0.1"
268 | create-hash "^1.2.0"
269 | create-hmac "^1.1.7"
270 | elliptic "^6.5.3"
271 | inherits "^2.0.4"
272 | parse-asn1 "^5.1.5"
273 | readable-stream "^3.6.0"
274 | safe-buffer "^5.2.0"
275 |
276 | browserify-zlib@^0.2.0:
277 | version "0.2.0"
278 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
279 | integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
280 | dependencies:
281 | pako "~1.0.5"
282 |
283 | browserslist@4.16.1:
284 | version "4.16.1"
285 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766"
286 | integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==
287 | dependencies:
288 | caniuse-lite "^1.0.30001173"
289 | colorette "^1.2.1"
290 | electron-to-chromium "^1.3.634"
291 | escalade "^3.1.1"
292 | node-releases "^1.1.69"
293 |
294 | buffer-xor@^1.0.3:
295 | version "1.0.3"
296 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
297 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
298 |
299 | buffer@5.6.0:
300 | version "5.6.0"
301 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
302 | integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
303 | dependencies:
304 | base64-js "^1.0.2"
305 | ieee754 "^1.1.4"
306 |
307 | buffer@^4.3.0:
308 | version "4.9.2"
309 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
310 | integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
311 | dependencies:
312 | base64-js "^1.0.2"
313 | ieee754 "^1.1.4"
314 | isarray "^1.0.0"
315 |
316 | builtin-status-codes@^3.0.0:
317 | version "3.0.0"
318 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
319 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
320 |
321 | bytes@3.1.0:
322 | version "3.1.0"
323 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
324 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
325 |
326 | caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179:
327 | version "1.0.30001202"
328 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz#4cb3bd5e8a808e8cd89e4e66c549989bc8137201"
329 | integrity sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ==
330 |
331 | chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2:
332 | version "2.4.2"
333 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
334 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
335 | dependencies:
336 | ansi-styles "^3.2.1"
337 | escape-string-regexp "^1.0.5"
338 | supports-color "^5.3.0"
339 |
340 | chalk@4.0.0:
341 | version "4.0.0"
342 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
343 | integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
344 | dependencies:
345 | ansi-styles "^4.1.0"
346 | supports-color "^7.1.0"
347 |
348 | chokidar@3.5.1:
349 | version "3.5.1"
350 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
351 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
352 | dependencies:
353 | anymatch "~3.1.1"
354 | braces "~3.0.2"
355 | glob-parent "~5.1.0"
356 | is-binary-path "~2.1.0"
357 | is-glob "~4.0.1"
358 | normalize-path "~3.0.0"
359 | readdirp "~3.5.0"
360 | optionalDependencies:
361 | fsevents "~2.3.1"
362 |
363 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
364 | version "1.0.4"
365 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
366 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
367 | dependencies:
368 | inherits "^2.0.1"
369 | safe-buffer "^5.0.1"
370 |
371 | classnames@2.2.6:
372 | version "2.2.6"
373 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
374 | integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
375 |
376 | color-convert@^1.9.0:
377 | version "1.9.3"
378 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
379 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
380 | dependencies:
381 | color-name "1.1.3"
382 |
383 | color-convert@^2.0.1:
384 | version "2.0.1"
385 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
386 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
387 | dependencies:
388 | color-name "~1.1.4"
389 |
390 | color-name@1.1.3:
391 | version "1.1.3"
392 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
393 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
394 |
395 | color-name@~1.1.4:
396 | version "1.1.4"
397 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
398 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
399 |
400 | colorette@^1.2.1:
401 | version "1.2.2"
402 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
403 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
404 |
405 | commondir@^1.0.1:
406 | version "1.0.1"
407 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
408 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
409 |
410 | console-browserify@^1.1.0:
411 | version "1.2.0"
412 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
413 | integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
414 |
415 | constants-browserify@^1.0.0:
416 | version "1.0.0"
417 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
418 | integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
419 |
420 | convert-source-map@1.7.0:
421 | version "1.7.0"
422 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
423 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
424 | dependencies:
425 | safe-buffer "~5.1.1"
426 |
427 | core-util-is@~1.0.0:
428 | version "1.0.2"
429 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
430 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
431 |
432 | create-ecdh@^4.0.0:
433 | version "4.0.4"
434 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
435 | integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
436 | dependencies:
437 | bn.js "^4.1.0"
438 | elliptic "^6.5.3"
439 |
440 | create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
441 | version "1.2.0"
442 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
443 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
444 | dependencies:
445 | cipher-base "^1.0.1"
446 | inherits "^2.0.1"
447 | md5.js "^1.3.4"
448 | ripemd160 "^2.0.1"
449 | sha.js "^2.4.0"
450 |
451 | create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
452 | version "1.1.7"
453 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
454 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
455 | dependencies:
456 | cipher-base "^1.0.3"
457 | create-hash "^1.1.0"
458 | inherits "^2.0.1"
459 | ripemd160 "^2.0.0"
460 | safe-buffer "^5.0.1"
461 | sha.js "^2.4.8"
462 |
463 | crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
464 | version "3.12.0"
465 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
466 | integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
467 | dependencies:
468 | browserify-cipher "^1.0.0"
469 | browserify-sign "^4.0.0"
470 | create-ecdh "^4.0.0"
471 | create-hash "^1.1.0"
472 | create-hmac "^1.1.0"
473 | diffie-hellman "^5.0.0"
474 | inherits "^2.0.1"
475 | pbkdf2 "^3.0.3"
476 | public-encrypt "^4.0.0"
477 | randombytes "^2.0.0"
478 | randomfill "^1.0.3"
479 |
480 | css.escape@1.5.1:
481 | version "1.5.1"
482 | resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
483 | integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
484 |
485 | cssnano-preset-simple@1.2.2:
486 | version "1.2.2"
487 | resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413"
488 | integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ==
489 | dependencies:
490 | caniuse-lite "^1.0.30001179"
491 | postcss "^7.0.32"
492 |
493 | cssnano-simple@1.2.2:
494 | version "1.2.2"
495 | resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007"
496 | integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g==
497 | dependencies:
498 | cssnano-preset-simple "1.2.2"
499 | postcss "^7.0.32"
500 |
501 | csstype@^3.0.2:
502 | version "3.0.7"
503 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b"
504 | integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==
505 |
506 | data-uri-to-buffer@3.0.1:
507 | version "3.0.1"
508 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
509 | integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
510 |
511 | debug@2:
512 | version "2.6.9"
513 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
514 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
515 | dependencies:
516 | ms "2.0.0"
517 |
518 | depd@~1.1.2:
519 | version "1.1.2"
520 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
521 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
522 |
523 | des.js@^1.0.0:
524 | version "1.0.1"
525 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
526 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
527 | dependencies:
528 | inherits "^2.0.1"
529 | minimalistic-assert "^1.0.0"
530 |
531 | diffie-hellman@^5.0.0:
532 | version "5.0.3"
533 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
534 | integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
535 | dependencies:
536 | bn.js "^4.1.0"
537 | miller-rabin "^4.0.0"
538 | randombytes "^2.0.0"
539 |
540 | domain-browser@^1.1.1:
541 | version "1.2.0"
542 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
543 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
544 |
545 | electron-to-chromium@^1.3.634:
546 | version "1.3.691"
547 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.691.tgz#a671eaf135a3ccec0915eb8d844a0952aba79f3b"
548 | integrity sha512-ZqiO69KImmOGCyoH0icQPU3SndJiW93juEvf63gQngyhODO6SpQIPMTOHldtCs5DS5GMKvAkquk230E2zt2vpw==
549 |
550 | elliptic@^6.5.3:
551 | version "6.5.4"
552 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
553 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
554 | dependencies:
555 | bn.js "^4.11.9"
556 | brorand "^1.1.0"
557 | hash.js "^1.0.0"
558 | hmac-drbg "^1.0.1"
559 | inherits "^2.0.4"
560 | minimalistic-assert "^1.0.1"
561 | minimalistic-crypto-utils "^1.0.1"
562 |
563 | emojis-list@^2.0.0:
564 | version "2.1.0"
565 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
566 | integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
567 |
568 | escalade@^3.1.1:
569 | version "3.1.1"
570 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
571 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
572 |
573 | escape-string-regexp@^1.0.5:
574 | version "1.0.5"
575 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
576 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
577 |
578 | esutils@^2.0.2:
579 | version "2.0.3"
580 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
581 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
582 |
583 | etag@1.8.1:
584 | version "1.8.1"
585 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
586 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
587 |
588 | events@^3.0.0:
589 | version "3.3.0"
590 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
591 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
592 |
593 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
594 | version "1.0.3"
595 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
596 | integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
597 | dependencies:
598 | md5.js "^1.3.4"
599 | safe-buffer "^5.1.1"
600 |
601 | fill-range@^7.0.1:
602 | version "7.0.1"
603 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
604 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
605 | dependencies:
606 | to-regex-range "^5.0.1"
607 |
608 | find-cache-dir@3.3.1:
609 | version "3.3.1"
610 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
611 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
612 | dependencies:
613 | commondir "^1.0.1"
614 | make-dir "^3.0.2"
615 | pkg-dir "^4.1.0"
616 |
617 | find-up@^4.0.0:
618 | version "4.1.0"
619 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
620 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
621 | dependencies:
622 | locate-path "^5.0.0"
623 | path-exists "^4.0.0"
624 |
625 | fsevents@~2.3.1:
626 | version "2.3.2"
627 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
628 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
629 |
630 | get-orientation@1.1.2:
631 | version "1.1.2"
632 | resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947"
633 | integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==
634 | dependencies:
635 | stream-parser "^0.3.1"
636 |
637 | glob-parent@~5.1.0:
638 | version "5.1.2"
639 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
640 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
641 | dependencies:
642 | is-glob "^4.0.1"
643 |
644 | glob-to-regexp@^0.4.1:
645 | version "0.4.1"
646 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
647 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
648 |
649 | graceful-fs@^4.1.2:
650 | version "4.2.6"
651 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
652 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
653 |
654 | has-flag@^3.0.0:
655 | version "3.0.0"
656 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
657 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
658 |
659 | has-flag@^4.0.0:
660 | version "4.0.0"
661 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
662 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
663 |
664 | hash-base@^3.0.0:
665 | version "3.1.0"
666 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
667 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
668 | dependencies:
669 | inherits "^2.0.4"
670 | readable-stream "^3.6.0"
671 | safe-buffer "^5.2.0"
672 |
673 | hash.js@^1.0.0, hash.js@^1.0.3:
674 | version "1.1.7"
675 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
676 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
677 | dependencies:
678 | inherits "^2.0.3"
679 | minimalistic-assert "^1.0.1"
680 |
681 | he@1.2.0:
682 | version "1.2.0"
683 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
684 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
685 |
686 | hmac-drbg@^1.0.1:
687 | version "1.0.1"
688 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
689 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
690 | dependencies:
691 | hash.js "^1.0.3"
692 | minimalistic-assert "^1.0.0"
693 | minimalistic-crypto-utils "^1.0.1"
694 |
695 | http-errors@1.7.3:
696 | version "1.7.3"
697 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
698 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
699 | dependencies:
700 | depd "~1.1.2"
701 | inherits "2.0.4"
702 | setprototypeof "1.1.1"
703 | statuses ">= 1.5.0 < 2"
704 | toidentifier "1.0.0"
705 |
706 | https-browserify@^1.0.0:
707 | version "1.0.0"
708 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
709 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
710 |
711 | iconv-lite@0.4.24:
712 | version "0.4.24"
713 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
714 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
715 | dependencies:
716 | safer-buffer ">= 2.1.2 < 3"
717 |
718 | ieee754@^1.1.4:
719 | version "1.2.1"
720 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
721 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
722 |
723 | inherits@2.0.1:
724 | version "2.0.1"
725 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
726 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
727 |
728 | inherits@2.0.3:
729 | version "2.0.3"
730 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
731 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
732 |
733 | inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
734 | version "2.0.4"
735 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
736 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
737 |
738 | is-binary-path@~2.1.0:
739 | version "2.1.0"
740 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
741 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
742 | dependencies:
743 | binary-extensions "^2.0.0"
744 |
745 | is-extglob@^2.1.1:
746 | version "2.1.1"
747 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
748 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
749 |
750 | is-glob@^4.0.1, is-glob@~4.0.1:
751 | version "4.0.1"
752 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
753 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
754 | dependencies:
755 | is-extglob "^2.1.1"
756 |
757 | is-number@^7.0.0:
758 | version "7.0.0"
759 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
760 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
761 |
762 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
763 | version "1.0.0"
764 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
765 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
766 |
767 | isobject@^2.0.0:
768 | version "2.1.0"
769 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
770 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
771 | dependencies:
772 | isarray "1.0.0"
773 |
774 | jest-worker@24.9.0:
775 | version "24.9.0"
776 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
777 | integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
778 | dependencies:
779 | merge-stream "^2.0.0"
780 | supports-color "^6.1.0"
781 |
782 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
783 | version "4.0.0"
784 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
785 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
786 |
787 | json5@^1.0.1:
788 | version "1.0.1"
789 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
790 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
791 | dependencies:
792 | minimist "^1.2.0"
793 |
794 | line-column@^1.0.2:
795 | version "1.0.2"
796 | resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2"
797 | integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI=
798 | dependencies:
799 | isarray "^1.0.0"
800 | isobject "^2.0.0"
801 |
802 | loader-utils@1.2.3:
803 | version "1.2.3"
804 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
805 | integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
806 | dependencies:
807 | big.js "^5.2.2"
808 | emojis-list "^2.0.0"
809 | json5 "^1.0.1"
810 |
811 | locate-path@^5.0.0:
812 | version "5.0.0"
813 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
814 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
815 | dependencies:
816 | p-locate "^4.1.0"
817 |
818 | lodash.sortby@^4.7.0:
819 | version "4.7.0"
820 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
821 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
822 |
823 | lodash@^4.17.13:
824 | version "4.17.21"
825 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
826 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
827 |
828 | loose-envify@^1.1.0, loose-envify@^1.4.0:
829 | version "1.4.0"
830 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
831 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
832 | dependencies:
833 | js-tokens "^3.0.0 || ^4.0.0"
834 |
835 | make-dir@^3.0.2:
836 | version "3.1.0"
837 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
838 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
839 | dependencies:
840 | semver "^6.0.0"
841 |
842 | md5.js@^1.3.4:
843 | version "1.3.5"
844 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
845 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
846 | dependencies:
847 | hash-base "^3.0.0"
848 | inherits "^2.0.1"
849 | safe-buffer "^5.1.2"
850 |
851 | merge-stream@^2.0.0:
852 | version "2.0.0"
853 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
854 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
855 |
856 | miller-rabin@^4.0.0:
857 | version "4.0.1"
858 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
859 | integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
860 | dependencies:
861 | bn.js "^4.0.0"
862 | brorand "^1.0.1"
863 |
864 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
865 | version "1.0.1"
866 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
867 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
868 |
869 | minimalistic-crypto-utils@^1.0.1:
870 | version "1.0.1"
871 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
872 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
873 |
874 | minimist@^1.2.0:
875 | version "1.2.5"
876 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
877 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
878 |
879 | ms@2.0.0:
880 | version "2.0.0"
881 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
882 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
883 |
884 | nanoid@^3.1.16:
885 | version "3.1.22"
886 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
887 | integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
888 |
889 | native-url@0.3.4:
890 | version "0.3.4"
891 | resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8"
892 | integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==
893 | dependencies:
894 | querystring "^0.2.0"
895 |
896 | next-compose-plugins@^2.2.1:
897 | version "2.2.1"
898 | resolved "https://registry.yarnpkg.com/next-compose-plugins/-/next-compose-plugins-2.2.1.tgz#020fc53f275a7e719d62521bef4300fbb6fde5ab"
899 | integrity sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==
900 |
901 | next@10.0.9:
902 | version "10.0.9"
903 | resolved "https://registry.yarnpkg.com/next/-/next-10.0.9.tgz#ad5d8e0368fee8363cdfd64d22dfbf71f683ae66"
904 | integrity sha512-HyoVjYydcM6LaFAUOHSxVQCcKOsIimVO/IKXCuWUu1rr6DDgXbWNg/8ckH084qD46MOYlLzjViiZ3KCmNQL4Cw==
905 | dependencies:
906 | "@babel/runtime" "7.12.5"
907 | "@hapi/accept" "5.0.1"
908 | "@next/env" "10.0.9"
909 | "@next/polyfill-module" "10.0.9"
910 | "@next/react-dev-overlay" "10.0.9"
911 | "@next/react-refresh-utils" "10.0.9"
912 | "@opentelemetry/api" "0.14.0"
913 | ast-types "0.13.2"
914 | browserslist "4.16.1"
915 | buffer "5.6.0"
916 | caniuse-lite "^1.0.30001179"
917 | chalk "2.4.2"
918 | chokidar "3.5.1"
919 | crypto-browserify "3.12.0"
920 | cssnano-simple "1.2.2"
921 | etag "1.8.1"
922 | find-cache-dir "3.3.1"
923 | get-orientation "1.1.2"
924 | jest-worker "24.9.0"
925 | native-url "0.3.4"
926 | node-fetch "2.6.1"
927 | node-html-parser "1.4.9"
928 | node-libs-browser "^2.2.1"
929 | p-limit "3.1.0"
930 | path-browserify "1.0.1"
931 | pnp-webpack-plugin "1.6.4"
932 | postcss "8.1.7"
933 | process "0.11.10"
934 | prop-types "15.7.2"
935 | raw-body "2.4.1"
936 | react-is "16.13.1"
937 | react-refresh "0.8.3"
938 | stream-browserify "3.0.0"
939 | styled-jsx "3.3.2"
940 | use-subscription "1.5.1"
941 | vm-browserify "1.1.2"
942 | watchpack "2.1.1"
943 |
944 | node-fetch@2.6.1:
945 | version "2.6.1"
946 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
947 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
948 |
949 | node-html-parser@1.4.9:
950 | version "1.4.9"
951 | resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c"
952 | integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==
953 | dependencies:
954 | he "1.2.0"
955 |
956 | node-libs-browser@^2.2.1:
957 | version "2.2.1"
958 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
959 | integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
960 | dependencies:
961 | assert "^1.1.1"
962 | browserify-zlib "^0.2.0"
963 | buffer "^4.3.0"
964 | console-browserify "^1.1.0"
965 | constants-browserify "^1.0.0"
966 | crypto-browserify "^3.11.0"
967 | domain-browser "^1.1.1"
968 | events "^3.0.0"
969 | https-browserify "^1.0.0"
970 | os-browserify "^0.3.0"
971 | path-browserify "0.0.1"
972 | process "^0.11.10"
973 | punycode "^1.2.4"
974 | querystring-es3 "^0.2.0"
975 | readable-stream "^2.3.3"
976 | stream-browserify "^2.0.1"
977 | stream-http "^2.7.2"
978 | string_decoder "^1.0.0"
979 | timers-browserify "^2.0.4"
980 | tty-browserify "0.0.0"
981 | url "^0.11.0"
982 | util "^0.11.0"
983 | vm-browserify "^1.0.1"
984 |
985 | node-releases@^1.1.69:
986 | version "1.1.71"
987 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
988 | integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==
989 |
990 | normalize-path@^3.0.0, normalize-path@~3.0.0:
991 | version "3.0.0"
992 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
993 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
994 |
995 | object-assign@^4.1.1:
996 | version "4.1.1"
997 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
998 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
999 |
1000 | os-browserify@^0.3.0:
1001 | version "0.3.0"
1002 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
1003 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
1004 |
1005 | p-limit@3.1.0:
1006 | version "3.1.0"
1007 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1008 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1009 | dependencies:
1010 | yocto-queue "^0.1.0"
1011 |
1012 | p-limit@^2.2.0:
1013 | version "2.3.0"
1014 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1015 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1016 | dependencies:
1017 | p-try "^2.0.0"
1018 |
1019 | p-locate@^4.1.0:
1020 | version "4.1.0"
1021 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1022 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1023 | dependencies:
1024 | p-limit "^2.2.0"
1025 |
1026 | p-try@^2.0.0:
1027 | version "2.2.0"
1028 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1029 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1030 |
1031 | pako@~1.0.5:
1032 | version "1.0.11"
1033 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
1034 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
1035 |
1036 | parse-asn1@^5.0.0, parse-asn1@^5.1.5:
1037 | version "5.1.6"
1038 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
1039 | integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
1040 | dependencies:
1041 | asn1.js "^5.2.0"
1042 | browserify-aes "^1.0.0"
1043 | evp_bytestokey "^1.0.0"
1044 | pbkdf2 "^3.0.3"
1045 | safe-buffer "^5.1.1"
1046 |
1047 | path-browserify@0.0.1:
1048 | version "0.0.1"
1049 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
1050 | integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
1051 |
1052 | path-browserify@1.0.1:
1053 | version "1.0.1"
1054 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd"
1055 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==
1056 |
1057 | path-exists@^4.0.0:
1058 | version "4.0.0"
1059 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1060 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1061 |
1062 | pbkdf2@^3.0.3:
1063 | version "3.1.1"
1064 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
1065 | integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
1066 | dependencies:
1067 | create-hash "^1.1.2"
1068 | create-hmac "^1.1.4"
1069 | ripemd160 "^2.0.1"
1070 | safe-buffer "^5.0.1"
1071 | sha.js "^2.4.8"
1072 |
1073 | picomatch@^2.0.4, picomatch@^2.2.1:
1074 | version "2.2.2"
1075 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
1076 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
1077 |
1078 | pkg-dir@^4.1.0:
1079 | version "4.2.0"
1080 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1081 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1082 | dependencies:
1083 | find-up "^4.0.0"
1084 |
1085 | platform@1.3.6:
1086 | version "1.3.6"
1087 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7"
1088 | integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==
1089 |
1090 | pnp-webpack-plugin@1.6.4:
1091 | version "1.6.4"
1092 | resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
1093 | integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==
1094 | dependencies:
1095 | ts-pnp "^1.1.6"
1096 |
1097 | postcss@8.1.7:
1098 | version "8.1.7"
1099 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f"
1100 | integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ==
1101 | dependencies:
1102 | colorette "^1.2.1"
1103 | line-column "^1.0.2"
1104 | nanoid "^3.1.16"
1105 | source-map "^0.6.1"
1106 |
1107 | postcss@^7.0.32:
1108 | version "7.0.35"
1109 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
1110 | integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
1111 | dependencies:
1112 | chalk "^2.4.2"
1113 | source-map "^0.6.1"
1114 | supports-color "^6.1.0"
1115 |
1116 | process-nextick-args@~2.0.0:
1117 | version "2.0.1"
1118 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1119 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1120 |
1121 | process@0.11.10, process@^0.11.10:
1122 | version "0.11.10"
1123 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
1124 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
1125 |
1126 | prop-types@15.7.2:
1127 | version "15.7.2"
1128 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
1129 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
1130 | dependencies:
1131 | loose-envify "^1.4.0"
1132 | object-assign "^4.1.1"
1133 | react-is "^16.8.1"
1134 |
1135 | public-encrypt@^4.0.0:
1136 | version "4.0.3"
1137 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
1138 | integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
1139 | dependencies:
1140 | bn.js "^4.1.0"
1141 | browserify-rsa "^4.0.0"
1142 | create-hash "^1.1.0"
1143 | parse-asn1 "^5.0.0"
1144 | randombytes "^2.0.1"
1145 | safe-buffer "^5.1.2"
1146 |
1147 | punycode@1.3.2:
1148 | version "1.3.2"
1149 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
1150 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
1151 |
1152 | punycode@^1.2.4:
1153 | version "1.4.1"
1154 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1155 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
1156 |
1157 | punycode@^2.1.0:
1158 | version "2.1.1"
1159 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1160 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1161 |
1162 | querystring-es3@^0.2.0:
1163 | version "0.2.1"
1164 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
1165 | integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
1166 |
1167 | querystring@0.2.0:
1168 | version "0.2.0"
1169 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
1170 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
1171 |
1172 | querystring@^0.2.0:
1173 | version "0.2.1"
1174 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd"
1175 | integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==
1176 |
1177 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
1178 | version "2.1.0"
1179 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1180 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1181 | dependencies:
1182 | safe-buffer "^5.1.0"
1183 |
1184 | randomfill@^1.0.3:
1185 | version "1.0.4"
1186 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
1187 | integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
1188 | dependencies:
1189 | randombytes "^2.0.5"
1190 | safe-buffer "^5.1.0"
1191 |
1192 | raw-body@2.4.1:
1193 | version "2.4.1"
1194 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
1195 | integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
1196 | dependencies:
1197 | bytes "3.1.0"
1198 | http-errors "1.7.3"
1199 | iconv-lite "0.4.24"
1200 | unpipe "1.0.0"
1201 |
1202 | react-dom@17.0.1:
1203 | version "17.0.1"
1204 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6"
1205 | integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug==
1206 | dependencies:
1207 | loose-envify "^1.1.0"
1208 | object-assign "^4.1.1"
1209 | scheduler "^0.20.1"
1210 |
1211 | react-is@16.13.1, react-is@^16.8.1:
1212 | version "16.13.1"
1213 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
1214 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
1215 |
1216 | react-refresh@0.8.3:
1217 | version "0.8.3"
1218 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
1219 | integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
1220 |
1221 | react@17.0.1:
1222 | version "17.0.1"
1223 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
1224 | integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w==
1225 | dependencies:
1226 | loose-envify "^1.1.0"
1227 | object-assign "^4.1.1"
1228 |
1229 | readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6:
1230 | version "2.3.7"
1231 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
1232 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
1233 | dependencies:
1234 | core-util-is "~1.0.0"
1235 | inherits "~2.0.3"
1236 | isarray "~1.0.0"
1237 | process-nextick-args "~2.0.0"
1238 | safe-buffer "~5.1.1"
1239 | string_decoder "~1.1.1"
1240 | util-deprecate "~1.0.1"
1241 |
1242 | readable-stream@^3.5.0, readable-stream@^3.6.0:
1243 | version "3.6.0"
1244 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
1245 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1246 | dependencies:
1247 | inherits "^2.0.3"
1248 | string_decoder "^1.1.1"
1249 | util-deprecate "^1.0.1"
1250 |
1251 | readdirp@~3.5.0:
1252 | version "3.5.0"
1253 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
1254 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
1255 | dependencies:
1256 | picomatch "^2.2.1"
1257 |
1258 | regenerator-runtime@^0.13.4:
1259 | version "0.13.7"
1260 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
1261 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
1262 |
1263 | ripemd160@^2.0.0, ripemd160@^2.0.1:
1264 | version "2.0.2"
1265 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
1266 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
1267 | dependencies:
1268 | hash-base "^3.0.0"
1269 | inherits "^2.0.1"
1270 |
1271 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
1272 | version "5.2.1"
1273 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1274 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1275 |
1276 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1277 | version "5.1.2"
1278 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1279 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1280 |
1281 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0:
1282 | version "2.1.2"
1283 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1284 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1285 |
1286 | scheduler@^0.20.1:
1287 | version "0.20.1"
1288 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c"
1289 | integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw==
1290 | dependencies:
1291 | loose-envify "^1.1.0"
1292 | object-assign "^4.1.1"
1293 |
1294 | semver@^6.0.0:
1295 | version "6.3.0"
1296 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1297 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1298 |
1299 | setimmediate@^1.0.4:
1300 | version "1.0.5"
1301 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
1302 | integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
1303 |
1304 | setprototypeof@1.1.1:
1305 | version "1.1.1"
1306 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
1307 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
1308 |
1309 | sha.js@^2.4.0, sha.js@^2.4.8:
1310 | version "2.4.11"
1311 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
1312 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
1313 | dependencies:
1314 | inherits "^2.0.1"
1315 | safe-buffer "^5.0.1"
1316 |
1317 | shell-quote@1.7.2:
1318 | version "1.7.2"
1319 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
1320 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
1321 |
1322 | source-map@0.7.3:
1323 | version "0.7.3"
1324 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
1325 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
1326 |
1327 | source-map@0.8.0-beta.0:
1328 | version "0.8.0-beta.0"
1329 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11"
1330 | integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==
1331 | dependencies:
1332 | whatwg-url "^7.0.0"
1333 |
1334 | source-map@^0.6.1:
1335 | version "0.6.1"
1336 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1337 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1338 |
1339 | stacktrace-parser@0.1.10:
1340 | version "0.1.10"
1341 | resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
1342 | integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
1343 | dependencies:
1344 | type-fest "^0.7.1"
1345 |
1346 | "statuses@>= 1.5.0 < 2":
1347 | version "1.5.0"
1348 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1349 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
1350 |
1351 | stream-browserify@3.0.0:
1352 | version "3.0.0"
1353 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
1354 | integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
1355 | dependencies:
1356 | inherits "~2.0.4"
1357 | readable-stream "^3.5.0"
1358 |
1359 | stream-browserify@^2.0.1:
1360 | version "2.0.2"
1361 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
1362 | integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
1363 | dependencies:
1364 | inherits "~2.0.1"
1365 | readable-stream "^2.0.2"
1366 |
1367 | stream-http@^2.7.2:
1368 | version "2.8.3"
1369 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
1370 | integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
1371 | dependencies:
1372 | builtin-status-codes "^3.0.0"
1373 | inherits "^2.0.1"
1374 | readable-stream "^2.3.6"
1375 | to-arraybuffer "^1.0.0"
1376 | xtend "^4.0.0"
1377 |
1378 | stream-parser@^0.3.1:
1379 | version "0.3.1"
1380 | resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773"
1381 | integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=
1382 | dependencies:
1383 | debug "2"
1384 |
1385 | string-hash@1.1.3:
1386 | version "1.1.3"
1387 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
1388 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
1389 |
1390 | string_decoder@^1.0.0, string_decoder@^1.1.1:
1391 | version "1.3.0"
1392 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1393 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1394 | dependencies:
1395 | safe-buffer "~5.2.0"
1396 |
1397 | string_decoder@~1.1.1:
1398 | version "1.1.1"
1399 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1400 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1401 | dependencies:
1402 | safe-buffer "~5.1.0"
1403 |
1404 | strip-ansi@6.0.0:
1405 | version "6.0.0"
1406 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
1407 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
1408 | dependencies:
1409 | ansi-regex "^5.0.0"
1410 |
1411 | styled-jsx@3.3.2:
1412 | version "3.3.2"
1413 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018"
1414 | integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==
1415 | dependencies:
1416 | "@babel/types" "7.8.3"
1417 | babel-plugin-syntax-jsx "6.18.0"
1418 | convert-source-map "1.7.0"
1419 | loader-utils "1.2.3"
1420 | source-map "0.7.3"
1421 | string-hash "1.1.3"
1422 | stylis "3.5.4"
1423 | stylis-rule-sheet "0.0.10"
1424 |
1425 | stylis-rule-sheet@0.0.10:
1426 | version "0.0.10"
1427 | resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
1428 | integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==
1429 |
1430 | stylis@3.5.4:
1431 | version "3.5.4"
1432 | resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
1433 | integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
1434 |
1435 | supports-color@^5.3.0:
1436 | version "5.5.0"
1437 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1438 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1439 | dependencies:
1440 | has-flag "^3.0.0"
1441 |
1442 | supports-color@^6.1.0:
1443 | version "6.1.0"
1444 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
1445 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
1446 | dependencies:
1447 | has-flag "^3.0.0"
1448 |
1449 | supports-color@^7.1.0:
1450 | version "7.2.0"
1451 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1452 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1453 | dependencies:
1454 | has-flag "^4.0.0"
1455 |
1456 | swr@^0.5.4:
1457 | version "0.5.4"
1458 | resolved "https://registry.yarnpkg.com/swr/-/swr-0.5.4.tgz#9516af6ffd84ba2c23a804ff771be2eb83ba8d46"
1459 | integrity sha512-TUSxxuC8uP/4JKV22ml91WQ0tbif+9HVhm683xm8KYfwZIW5ogwcnU634dg3x6N7azpIDIOLokoIi+z5vCz/yA==
1460 |
1461 | timers-browserify@^2.0.4:
1462 | version "2.0.12"
1463 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
1464 | integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
1465 | dependencies:
1466 | setimmediate "^1.0.4"
1467 |
1468 | to-arraybuffer@^1.0.0:
1469 | version "1.0.1"
1470 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
1471 | integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
1472 |
1473 | to-fast-properties@^2.0.0:
1474 | version "2.0.0"
1475 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
1476 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
1477 |
1478 | to-regex-range@^5.0.1:
1479 | version "5.0.1"
1480 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1481 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1482 | dependencies:
1483 | is-number "^7.0.0"
1484 |
1485 | toidentifier@1.0.0:
1486 | version "1.0.0"
1487 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
1488 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
1489 |
1490 | tr46@^1.0.1:
1491 | version "1.0.1"
1492 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
1493 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
1494 | dependencies:
1495 | punycode "^2.1.0"
1496 |
1497 | ts-pnp@^1.1.6:
1498 | version "1.2.0"
1499 | resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
1500 | integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
1501 |
1502 | tty-browserify@0.0.0:
1503 | version "0.0.0"
1504 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
1505 | integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
1506 |
1507 | type-fest@^0.7.1:
1508 | version "0.7.1"
1509 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
1510 | integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
1511 |
1512 | typescript@^4.2.3:
1513 | version "4.2.3"
1514 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3"
1515 | integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==
1516 |
1517 | unpipe@1.0.0:
1518 | version "1.0.0"
1519 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
1520 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
1521 |
1522 | url@^0.11.0:
1523 | version "0.11.0"
1524 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
1525 | integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
1526 | dependencies:
1527 | punycode "1.3.2"
1528 | querystring "0.2.0"
1529 |
1530 | use-subscription@1.5.1:
1531 | version "1.5.1"
1532 | resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"
1533 | integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==
1534 | dependencies:
1535 | object-assign "^4.1.1"
1536 |
1537 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
1538 | version "1.0.2"
1539 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1540 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1541 |
1542 | util@0.10.3:
1543 | version "0.10.3"
1544 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
1545 | integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
1546 | dependencies:
1547 | inherits "2.0.1"
1548 |
1549 | util@^0.11.0:
1550 | version "0.11.1"
1551 | resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
1552 | integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
1553 | dependencies:
1554 | inherits "2.0.3"
1555 |
1556 | vm-browserify@1.1.2, vm-browserify@^1.0.1:
1557 | version "1.1.2"
1558 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
1559 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
1560 |
1561 | watchpack@2.1.1:
1562 | version "2.1.1"
1563 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7"
1564 | integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==
1565 | dependencies:
1566 | glob-to-regexp "^0.4.1"
1567 | graceful-fs "^4.1.2"
1568 |
1569 | webidl-conversions@^4.0.2:
1570 | version "4.0.2"
1571 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
1572 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
1573 |
1574 | whatwg-url@^7.0.0:
1575 | version "7.1.0"
1576 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
1577 | integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
1578 | dependencies:
1579 | lodash.sortby "^4.7.0"
1580 | tr46 "^1.0.1"
1581 | webidl-conversions "^4.0.2"
1582 |
1583 | xtend@^4.0.0:
1584 | version "4.0.2"
1585 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
1586 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
1587 |
1588 | yocto-queue@^0.1.0:
1589 | version "0.1.0"
1590 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1591 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1592 |
--------------------------------------------------------------------------------