From 864ded959a5a35a8d720a0beeca44bcc485a4ecb Mon Sep 17 00:00:00 2001 From: Steve Ruiz Date: Mon, 21 Jun 2021 22:35:28 +0100 Subject: [PATCH] big cleanup --- .babelrc | 6 +- .eslintignore | 3 + .eslintrc.json | 49 + LICENSE | 21 - README.md | 35 +- components/canvas/bounds/bounding-box.tsx | 2 +- components/canvas/bounds/bounds-bg.tsx | 2 +- components/canvas/bounds/center-handle.tsx | 2 +- components/canvas/bounds/corner-handle.tsx | 2 +- components/canvas/bounds/edge-handle.tsx | 2 +- components/canvas/bounds/handles.tsx | 4 +- components/canvas/bounds/rotate-handle.tsx | 2 +- components/canvas/brush.tsx | 12 +- components/canvas/canvas.tsx | 7 +- .../canvas/context-menu/context-menu.tsx | 29 +- components/canvas/cursor.tsx | 2 +- components/canvas/defs.tsx | 6 +- components/canvas/page.tsx | 15 +- components/canvas/selected.tsx | 9 +- components/canvas/shape.tsx | 56 +- components/code-panel/code-docs.tsx | 90 +- components/code-panel/code-editor.tsx | 2 +- components/code-panel/code-panel.tsx | 5 +- components/controls-panel/control.tsx | 64 +- components/controls-panel/controls-panel.tsx | 6 +- components/editor.tsx | 2 +- components/page-panel/page-panel.tsx | 32 +- components/shared.tsx | 6 +- components/status-bar.tsx | 24 +- components/style-panel/align-distribute.tsx | 2 +- components/style-panel/color-content.tsx | 4 +- components/style-panel/color-picker.tsx | 4 +- components/style-panel/dash-picker.tsx | 2 +- components/style-panel/is-filled-picker.tsx | 7 +- components/style-panel/quick-color-select.tsx | 4 +- components/style-panel/quick-dash-select.tsx | 2 +- components/style-panel/quick-size-select.tsx | 2 +- components/style-panel/size-picker.tsx | 2 +- components/style-panel/style-panel.tsx | 4 +- components/tools-panel/tools-panel.tsx | 10 +- components/tools-panel/undo-redo.tsx | 4 +- components/tools-panel/zoom.tsx | 2 +- components/tooltip.tsx | 2 +- decs.d.ts | 2 +- hooks/useBoundsEvents.ts | 1 + hooks/useCamera.ts | 1 + hooks/useCanvasEvents.ts | 4 +- hooks/useGtag.ts | 1 + hooks/useHandleEvents.ts | 1 + hooks/useKeyboardEvents.ts | 6 + hooks/useLoadOnMount.ts | 1 + hooks/useShapeEvents.ts | 3 +- hooks/useTheme.ts | 9 +- hooks/useZoomEvents.ts | 8 +- jest.config.js | 19 + lib/shape-utils/index.tsx | 388 -- next.config.js | 20 - package.json | 82 +- pages/_app.tsx | 4 +- pages/_document.tsx | 17 +- pages/api/auth/[...nextauth].ts | 10 +- pages/create-error.tsx | 2 +- pages/index.tsx | 3 +- pages/shhh.tsx | 2 +- pages/signout.tsx | 5 +- pages/sponsorware.tsx | 8 +- public/sw.js | 3 +- public/sw.js.map | 1 + public/workbox-ea903bce.js | 1 + public/workbox-ea903bce.js.map | 1 + ...L93.js => worker-6L8AMbRb0NKpPgic9tDJq.js} | 0 state/clipboard.ts | 7 +- {lib => state}/code/circle.ts | 12 +- {lib => state}/code/control.ts | 2 +- {lib => state}/code/dot.ts | 10 +- {lib => state}/code/ellipse.ts | 14 +- {lib => state}/code/generate.ts | 19 +- {lib => state}/code/index.ts | 34 +- {lib => state}/code/line.ts | 16 +- {lib => state}/code/polyline.ts | 16 +- {lib => state}/code/ray.ts | 16 +- {lib => state}/code/rectangle.ts | 10 +- {lib => state}/code/utils.ts | 30 +- {lib => state}/code/vector.ts | 165 +- state/commands/align.ts | 18 +- state/commands/arrow.ts | 2 +- state/commands/change-page.ts | 2 +- state/commands/command.ts | 6 +- state/commands/create-page.ts | 2 +- state/commands/delete-page.ts | 3 +- state/commands/delete-selected.ts | 19 +- state/commands/direct.ts | 20 +- state/commands/distribute.ts | 9 +- state/commands/draw.ts | 2 +- state/commands/duplicate.ts | 3 +- state/commands/edit.ts | 4 +- state/commands/generate.ts | 18 +- state/commands/group.ts | 16 +- state/commands/handle.ts | 21 +- state/commands/move-to-page.ts | 7 +- state/commands/move.ts | 16 +- state/commands/mutate.ts | 4 +- state/commands/nudge.ts | 8 +- state/commands/paste.ts | 9 +- state/commands/reset-bounds.ts | 4 +- state/commands/rotate-ccw.ts | 8 +- state/commands/rotate.ts | 8 +- state/commands/stretch.ts | 12 +- state/commands/style.ts | 7 +- state/commands/toggle.ts | 6 +- state/commands/transform-single.ts | 2 +- state/commands/transform.ts | 11 +- state/commands/translate.ts | 10 +- state/commands/ungroup.ts | 23 +- state/cursor.ts | 2 +- state/data.ts | 3 +- state/hacks.ts | 18 +- state/sessions/arrow-session.ts | 16 +- state/sessions/base-session.ts | 13 +- state/sessions/brush-session.ts | 13 +- state/sessions/direction-session.ts | 13 +- state/sessions/draw-session.ts | 12 +- state/sessions/edit-session.ts | 20 +- state/sessions/handle-session.ts | 11 +- state/sessions/rotate-session.ts | 14 +- state/sessions/transform-session.ts | 20 +- state/sessions/transform-single-session.ts | 9 +- state/sessions/translate-session.ts | 50 +- {lib => state}/shape-styles.ts | 13 +- {lib => state}/shape-utils/arrow.tsx | 22 +- {lib => state}/shape-utils/circle.tsx | 8 +- {lib => state}/shape-utils/dot.tsx | 7 +- {lib => state}/shape-utils/draw.tsx | 6 +- {lib => state}/shape-utils/ellipse.tsx | 5 +- {lib => state}/shape-utils/group.tsx | 25 +- state/shape-utils/index.tsx | 45 + {lib => state}/shape-utils/line.tsx | 7 +- {lib => state}/shape-utils/notes.md | 0 {lib => state}/shape-utils/polyline.tsx | 8 +- {lib => state}/shape-utils/ray.tsx | 6 +- {lib => state}/shape-utils/rectangle.tsx | 6 +- state/shape-utils/register.tsx | 165 + {lib => state}/shape-utils/text.tsx | 30 +- state/state.ts | 45 +- state/storage.ts | 2 +- styles/stitches.config.ts | 10 - test/__mocks__/fileMock.js | 1 + test/pages/__snapshots__/index.test.tsx.snap | 11 + test/pages/index.test.tsx | 9 + test/testUtils.ts | 26 + todo.md | 56 - tsconfig.json | 4 +- types.ts | 157 +- utils/bounds.ts | 30 +- utils/gtag.ts | 10 +- utils/hitTests.ts | 6 +- utils/intersections.ts | 40 +- utils/svg.ts | 93 +- utils/utils.ts | 617 +- utils/vec.ts | 92 +- yarn.lock | 5109 ++++------------- 161 files changed, 2918 insertions(+), 5749 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 LICENSE create mode 100644 jest.config.js delete mode 100644 lib/shape-utils/index.tsx delete mode 100644 next.config.js create mode 100644 public/sw.js.map create mode 100644 public/workbox-ea903bce.js.map rename public/{worker-sTsqr_RdML8Zn1Mtf4L93.js => worker-6L8AMbRb0NKpPgic9tDJq.js} (100%) rename {lib => state}/code/circle.ts (76%) rename {lib => state}/code/control.ts (98%) rename {lib => state}/code/dot.ts (78%) rename {lib => state}/code/ellipse.ts (75%) rename {lib => state}/code/generate.ts (85%) rename {lib => state}/code/index.ts (60%) rename {lib => state}/code/line.ts (69%) rename {lib => state}/code/polyline.ts (67%) rename {lib => state}/code/ray.ts (68%) rename {lib => state}/code/rectangle.ts (78%) rename {lib => state}/code/utils.ts (85%) rename {lib => state}/code/vector.ts (69%) rename {lib => state}/shape-styles.ts (87%) rename {lib => state}/shape-utils/arrow.tsx (96%) rename {lib => state}/shape-utils/circle.tsx (92%) rename {lib => state}/shape-utils/dot.tsx (92%) rename {lib => state}/shape-utils/draw.tsx (97%) rename {lib => state}/shape-utils/ellipse.tsx (97%) rename {lib => state}/shape-utils/group.tsx (91%) create mode 100644 state/shape-utils/index.tsx rename {lib => state}/shape-utils/line.tsx (93%) rename {lib => state}/shape-utils/notes.md (100%) rename {lib => state}/shape-utils/polyline.tsx (94%) rename {lib => state}/shape-utils/ray.tsx (94%) rename {lib => state}/shape-utils/rectangle.tsx (96%) create mode 100644 state/shape-utils/register.tsx rename {lib => state}/shape-utils/text.tsx (89%) create mode 100644 test/__mocks__/fileMock.js create mode 100644 test/pages/__snapshots__/index.test.tsx.snap create mode 100644 test/pages/index.test.tsx create mode 100644 test/testUtils.ts delete mode 100644 todo.md diff --git a/.babelrc b/.babelrc index 27f0f1fa2..1ff94f7ed 100644 --- a/.babelrc +++ b/.babelrc @@ -1,7 +1,3 @@ { - "env": { - "test": { - "presets": ["next/babel"] - } - } + "presets": ["next/babel"] } diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..35e915e52 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +**/node_modules/* +**/out/* +**/.next/* diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..2b7fe86e0 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,49 @@ +{ + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:@typescript-eslint/recommended" + // Uncomment the following lines to enable eslint-config-prettier + // Is not enabled right now to avoid issues with the Next.js repo + // "prettier", + ], + "env": { + "es6": true, + "browser": true, + "jest": true, + "node": true + }, + "settings": { + "react": { + "version": "detect" + } + }, + "ignorePatterns": "**/*.js", + "rules": { + "react/react-in-jsx-scope": 0, + "react/display-name": 0, + "react/prop-types": 0, + "@typescript-eslint/no-extra-semi": 0, + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/explicit-member-accessibility": 0, + "@typescript-eslint/indent": 0, + "@typescript-eslint/member-delimiter-style": 0, + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/no-var-requires": 0, + "@typescript-eslint/no-use-before-define": 0, + "@typescript-eslint/no-unused-vars": [ + 2, + { + "argsIgnorePattern": "^_" + } + ], + "no-console": [ + 2, + { + "allow": ["warn", "error"] + } + ] + } +} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index ee027a19c..000000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Steve Ruiz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index b12f3e33e..55f709867 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,3 @@ -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). +# tldraw -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. - -[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`. - -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. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -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. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +A tiny little drawing app by [steveruizok](https://twitter.com/steveruizok). diff --git a/components/canvas/bounds/bounding-box.tsx b/components/canvas/bounds/bounding-box.tsx index 246fcf2a1..f44c45a34 100644 --- a/components/canvas/bounds/bounding-box.tsx +++ b/components/canvas/bounds/bounding-box.tsx @@ -15,7 +15,7 @@ import CornerHandle from './corner-handle' import EdgeHandle from './edge-handle' import RotateHandle from './rotate-handle' -export default function Bounds() { +export default function Bounds(): JSX.Element { const isBrushing = useSelector((s) => s.isIn('brushSelecting')) const isSelecting = useSelector((s) => s.isIn('selecting')) diff --git a/components/canvas/bounds/bounds-bg.tsx b/components/canvas/bounds/bounds-bg.tsx index d72e6ad32..ca26fb324 100644 --- a/components/canvas/bounds/bounds-bg.tsx +++ b/components/canvas/bounds/bounds-bg.tsx @@ -24,7 +24,7 @@ function handlePointerUp(e: React.PointerEvent) { state.send('STOPPED_POINTING', inputs.pointerUp(e)) } -export default function BoundsBg() { +export default function BoundsBg(): JSX.Element { const rBounds = useRef(null) const bounds = useSelector((state) => state.values.selectedBounds) diff --git a/components/canvas/bounds/center-handle.tsx b/components/canvas/bounds/center-handle.tsx index a35b2899c..2ab9fa110 100644 --- a/components/canvas/bounds/center-handle.tsx +++ b/components/canvas/bounds/center-handle.tsx @@ -7,7 +7,7 @@ export default function CenterHandle({ }: { bounds: Bounds isLocked: boolean -}) { +}): JSX.Element { return ( Array.from(s.values.selectedIds.values()), deepCompareArrays diff --git a/components/canvas/bounds/rotate-handle.tsx b/components/canvas/bounds/rotate-handle.tsx index 280a465e1..075e8eaa6 100644 --- a/components/canvas/bounds/rotate-handle.tsx +++ b/components/canvas/bounds/rotate-handle.tsx @@ -8,7 +8,7 @@ export default function Rotate({ }: { bounds: Bounds size: number -}) { +}): JSX.Element { const events = useHandleEvents('rotate') return ( diff --git a/components/canvas/brush.tsx b/components/canvas/brush.tsx index 336dba6d1..009e4a658 100644 --- a/components/canvas/brush.tsx +++ b/components/canvas/brush.tsx @@ -1,7 +1,7 @@ -import { useSelector } from "state" -import styled from "styles" +import { useSelector } from 'state' +import styled from 'styles' -export default function Brush() { +export default function Brush(): JSX.Element { const brush = useSelector(({ data }) => data.brush) if (!brush) return null @@ -16,8 +16,8 @@ export default function Brush() { ) } -const BrushRect = styled("rect", { - fill: "$brushFill", - stroke: "$brushStroke", +const BrushRect = styled('rect', { + fill: '$brushFill', + stroke: '$brushStroke', zStrokeWidth: 1, }) diff --git a/components/canvas/canvas.tsx b/components/canvas/canvas.tsx index ef8a38d6b..3e7e30290 100644 --- a/components/canvas/canvas.tsx +++ b/components/canvas/canvas.tsx @@ -1,6 +1,6 @@ import styled from 'styles' -import state, { useSelector } from 'state' -import React, { useEffect, useRef } from 'react' +import { useSelector } from 'state' +import React, { useRef } from 'react' import useZoomEvents from 'hooks/useZoomEvents' import useCamera from 'hooks/useCamera' import Defs from './defs' @@ -8,12 +8,11 @@ import Page from './page' import Brush from './brush' import Bounds from './bounds/bounding-box' import BoundsBg from './bounds/bounds-bg' -import Selected from './selected' import Handles from './bounds/handles' import useCanvasEvents from 'hooks/useCanvasEvents' import ContextMenu from './context-menu/context-menu' -export default function Canvas() { +export default function Canvas(): JSX.Element { const rCanvas = useRef(null) const rGroup = useRef(null) diff --git a/components/canvas/context-menu/context-menu.tsx b/components/canvas/context-menu/context-menu.tsx index 59f1c4158..7ee521a93 100644 --- a/components/canvas/context-menu/context-menu.tsx +++ b/components/canvas/context-menu/context-menu.tsx @@ -1,5 +1,4 @@ import * as _ContextMenu from '@radix-ui/react-context-menu' -import * as _Dropdown from '@radix-ui/react-dropdown-menu' import styled from 'styles' import { IconWrapper, @@ -79,7 +78,7 @@ export default function ContextMenu({ children, }: { children: React.ReactNode -}) { +}): JSX.Element { const selectedShapes = useSelector( (s) => getSelectedShapes(s.data), deepCompareArrays @@ -357,7 +356,6 @@ function SubMenu({ } function AlignDistributeSubMenu({ - hasTwoOrMore, hasThreeOrMore, }: { hasTwoOrMore: boolean @@ -474,31 +472,6 @@ function MoveToPageMenu() { ) } -const StyledDialogContent = styled(_Dropdown.Content, { - // position: 'fixed', - // top: '50%', - // left: '50%', - // transform: 'translate(-50%, -50%)', - // minWidth: 200, - // maxWidth: 'fit-content', - // maxHeight: '85vh', - // marginTop: '-5vh', - minWidth: 128, - backgroundColor: '$panel', - borderRadius: '4px', - overflow: 'hidden', - pointerEvents: 'all', - userSelect: 'none', - zIndex: 200, - padding: 2, - border: '1px solid $panel', - boxShadow: '0px 2px 4px rgba(0,0,0,.2)', - - '&:focus': { - outline: 'none', - }, -}) - const StyledArrow = styled(_ContextMenu.Arrow, { fill: 'white', }) diff --git a/components/canvas/cursor.tsx b/components/canvas/cursor.tsx index 4500bf675..cc3b09920 100644 --- a/components/canvas/cursor.tsx +++ b/components/canvas/cursor.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useRef } from 'react' import styled from 'styles' -export default function Cursor() { +export default function Cursor(): JSX.Element { const rCursor = useRef(null) useEffect(() => { diff --git a/components/canvas/defs.tsx b/components/canvas/defs.tsx index c5f8395b9..7cb7dc50c 100644 --- a/components/canvas/defs.tsx +++ b/components/canvas/defs.tsx @@ -1,11 +1,11 @@ -import { getShapeStyle } from 'lib/shape-styles' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeStyle } from 'state/shape-styles' +import { getShapeUtils } from 'state/shape-utils' import React, { memo } from 'react' import { useSelector } from 'state' import { deepCompareArrays, getCurrentCamera, getPage } from 'utils/utils' import { DotCircle, Handle } from './misc' -export default function Defs() { +export default function Defs(): JSX.Element { const zoom = useSelector((s) => getCurrentCamera(s.data).zoom) const currentPageShapeIds = useSelector(({ data }) => { diff --git a/components/canvas/page.tsx b/components/canvas/page.tsx index 12776d8e4..a4a33c413 100644 --- a/components/canvas/page.tsx +++ b/components/canvas/page.tsx @@ -1,13 +1,8 @@ -import { getShapeUtils } from 'lib/shape-utils' -import state, { useSelector } from 'state' -import { Bounds, GroupShape, PageState } from 'types' +import { getShapeUtils } from 'state/shape-utils' +import { useSelector } from 'state' +import { Bounds, PageState } from 'types' import { boundsCollide, boundsContain } from 'utils/bounds' -import { - deepCompareArrays, - getPage, - getViewport, - screenToWorld, -} from 'utils/utils' +import { deepCompareArrays, getPage, getViewport } from 'utils/utils' import Shape from './shape' /* @@ -20,7 +15,7 @@ const noOffset = [0, 0] const viewportCache = new WeakMap() -export default function Page() { +export default function Page(): JSX.Element { const currentPageShapeIds = useSelector((s) => { const page = getPage(s.data) const pageState = s.data.pageStates[page.id] diff --git a/components/canvas/selected.tsx b/components/canvas/selected.tsx index 58f67c107..f245614e0 100644 --- a/components/canvas/selected.tsx +++ b/components/canvas/selected.tsx @@ -6,13 +6,10 @@ import { getSelectedIds, setToArray, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' -import useShapeEvents from 'hooks/useShapeEvents' -import { memo, useRef } from 'react' -import { ShapeType } from 'types' -import vec from 'utils/vec' +import { getShapeUtils } from 'state/shape-utils' +import { memo } from 'react' -export default function Selected() { +export default function Selected(): JSX.Element { const currentSelectedShapeIds = useSelector( ({ data }) => setToArray(getSelectedIds(data)), deepCompareArrays diff --git a/components/canvas/shape.tsx b/components/canvas/shape.tsx index 1c9fb3901..3d516b70e 100644 --- a/components/canvas/shape.tsx +++ b/components/canvas/shape.tsx @@ -1,13 +1,12 @@ import React, { useRef, memo, useEffect } from 'react' -import state, { useSelector } from 'state' +import { useSelector } from 'state' import styled from 'styles' -import { getShapeUtils } from 'lib/shape-utils' -import { getBoundsCenter, getPage, isMobile } from 'utils/utils' -import { ShapeStyles, ShapeType, Shape as _Shape } from 'types' +import { getShapeUtils } from 'state/shape-utils' +import { getPage, isMobile } from 'utils/utils' +import { Shape as _Shape } from 'types' import useShapeEvents from 'hooks/useShapeEvents' import vec from 'utils/vec' -import { getShapeStyle } from 'lib/shape-styles' -import ContextMenu from 'components/canvas/context-menu/context-menu' +import { getShapeStyle } from 'state/shape-styles' const isMobileDevice = isMobile() @@ -17,7 +16,7 @@ interface ShapeProps { parentPoint: number[] } -function Shape({ id, isSelecting, parentPoint }: ShapeProps) { +function Shape({ id, isSelecting, parentPoint }: ShapeProps): JSX.Element { const rGroup = useRef(null) const rFocusable = useRef(null) @@ -122,12 +121,7 @@ interface RealShapeProps { isEditing: boolean } -const RealShape = memo(function RealShape({ - id, - shape, - style, - isParent, -}: RealShapeProps) { +const RealShape = memo(function RealShape({ id, isParent }: RealShapeProps) { return }) @@ -217,25 +211,25 @@ const StyledGroup = styled('g', { ], }) -function Label({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ) -} +// function Label({ children }: { children: React.ReactNode }) { +// return ( +// +// {children} +// +// ) +// } -function pp(n: number[]) { - return '[' + n.map((v) => v.toFixed(1)).join(', ') + ']' -} +// function pp(n: number[]) { +// return '[' + n.map((v) => v.toFixed(1)).join(', ') + ']' +// } export { HoverIndicator } diff --git a/components/code-panel/code-docs.tsx b/components/code-panel/code-docs.tsx index 9fcb9eae1..e7281dde4 100644 --- a/components/code-panel/code-docs.tsx +++ b/components/code-panel/code-docs.tsx @@ -1,6 +1,10 @@ -import styled from "styles" +import styled from 'styles' -export default function CodeDocs({ isHidden }: { isHidden: boolean }) { +export default function CodeDocs({ + isHidden, +}: { + isHidden: boolean +}): JSX.Element { return (

Docs

@@ -8,94 +12,94 @@ export default function CodeDocs({ isHidden }: { isHidden: boolean }) { ) } -const StyledDocs = styled("div", { - position: "absolute", - backgroundColor: "$panel", +const StyledDocs = styled('div', { + position: 'absolute', + backgroundColor: '$panel', top: 0, left: 0, - width: "100%", - height: "100%", + width: '100%', + height: '100%', padding: 16, - font: "$docs", - overflowY: "scroll", - userSelect: "none", + font: '$docs', + overflowY: 'scroll', + userSelect: 'none', paddingBottom: 64, variants: { isHidden: { true: { - visibility: "hidden", + visibility: 'hidden', }, false: { - visibility: "visible", + visibility: 'visible', }, }, }, - "& ol": {}, + '& ol': {}, - "& li": { + '& li': { marginTop: 8, marginBottom: 4, }, - "& code": { - font: "$mono", + '& code': { + font: '$mono', }, - "& hr": { - margin: "32px 0", - borderColor: "$muted", + '& hr': { + margin: '32px 0', + borderColor: '$muted', }, - "& h2": { - margin: "24px 0px", + '& h2': { + margin: '24px 0px', }, - "& h3": { + '& h3': { fontSize: 20, - margin: "48px 0px 32px 0px", + margin: '48px 0px 32px 0px', }, - "& h3 > code": { + '& h3 > code': { fontWeight: 600, - font: "$monoheading", + font: '$monoheading', }, - "& h4": { - margin: "32px 0px 0px 0px", + '& h4': { + margin: '32px 0px 0px 0px', }, - "& h4 > code": { - font: "$monoheading", + '& h4 > code': { + font: '$monoheading', fontSize: 16, - userSelect: "all", + userSelect: 'all', }, - "& h4 > code > i": { + '& h4 > code > i': { fontSize: 14, - color: "$muted", + color: '$muted', }, - "& pre": { - backgroundColor: "$bounds_bg", + '& pre': { + backgroundColor: '$bounds_bg', padding: 16, borderRadius: 4, - userSelect: "all", - margin: "24px 0", + userSelect: 'all', + margin: '24px 0', }, - "& p > code, blockquote > code": { - backgroundColor: "$bounds_bg", - padding: "2px 4px", + '& p > code, blockquote > code': { + backgroundColor: '$bounds_bg', + padding: '2px 4px', borderRadius: 2, - color: "$code", + color: '$code', }, - "& blockquote": { - backgroundColor: "rgba(144, 144, 144, .05)", + '& blockquote': { + backgroundColor: 'rgba(144, 144, 144, .05)', padding: 12, - margin: "20px 0", + margin: '20px 0', borderRadius: 8, }, }) diff --git a/components/code-panel/code-editor.tsx b/components/code-panel/code-editor.tsx index 45ea51a86..23985fd86 100644 --- a/components/code-panel/code-editor.tsx +++ b/components/code-panel/code-editor.tsx @@ -32,7 +32,7 @@ export default function CodeEditor({ onChange, onSave, onKey, -}: Props) { +}: Props): JSX.Element { const { theme } = useTheme() const rEditor = useRef(null) const rMonaco = useRef(null) diff --git a/components/code-panel/code-panel.tsx b/components/code-panel/code-panel.tsx index 1f4dde011..714302394 100644 --- a/components/code-panel/code-panel.tsx +++ b/components/code-panel/code-panel.tsx @@ -2,12 +2,11 @@ import styled from 'styles' import { useStateDesigner } from '@state-designer/react' import React, { useEffect, useRef } from 'react' -import { motion } from 'framer-motion' import state, { useSelector } from 'state' import { CodeFile } from 'types' import CodeDocs from './code-docs' import CodeEditor from './code-editor' -import { generateFromCode } from 'lib/code/generate' +import { generateFromCode } from 'state/code/generate' import * as Panel from '../panel' import { IconButton } from '../shared' import { @@ -30,7 +29,7 @@ const getErrorLineAndColumn = (e: any) => { } } -export default function CodePanel() { +export default function CodePanel(): JSX.Element { const rContainer = useRef(null) const isReadOnly = useSelector((s) => s.data.isReadOnly) const fileId = useSelector((s) => s.data.currentCodeFileId) diff --git a/components/controls-panel/control.tsx b/components/controls-panel/control.tsx index f5ac14056..3f19ea478 100644 --- a/components/controls-panel/control.tsx +++ b/components/controls-panel/control.tsx @@ -1,14 +1,8 @@ -import state, { useSelector } from "state" -import styled from "styles" -import { - ControlType, - NumberCodeControl, - SelectCodeControl, - TextCodeControl, - VectorCodeControl, -} from "types" +import state, { useSelector } from 'state' +import styled from 'styles' +import { ControlType, NumberCodeControl, VectorCodeControl } from 'types' -export default function Control({ id }: { id: string }) { +export default function Control({ id }: { id: string }): JSX.Element { const control = useSelector((s) => s.data.codeControls[id]) if (!control) return null @@ -20,10 +14,6 @@ export default function Control({ id }: { id: string }) { ) : control.type === ControlType.Vector ? ( - ) : control.type === ControlType.Text ? ( - - ) : control.type === ControlType.Select ? ( - ) : null} ) @@ -39,7 +29,7 @@ function NumberControl({ id, min, max, step, value }: NumberCodeControl) { step={step} value={value} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: Number(e.currentTarget.value), }) } @@ -51,7 +41,7 @@ function NumberControl({ id, min, max, step, value }: NumberCodeControl) { step={step} value={value} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: Number(e.currentTarget.value), }) } @@ -70,7 +60,7 @@ function VectorControl({ id, value, isNormalized }: VectorCodeControl) { step={0.01} value={value[0]} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: [Number(e.currentTarget.value), value[1]], }) } @@ -82,7 +72,7 @@ function VectorControl({ id, value, isNormalized }: VectorCodeControl) { step={0.01} value={value[0]} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: [Number(e.currentTarget.value), value[1]], }) } @@ -94,7 +84,7 @@ function VectorControl({ id, value, isNormalized }: VectorCodeControl) { step={0.01} value={value[1]} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: [value[0], Number(e.currentTarget.value)], }) } @@ -106,7 +96,7 @@ function VectorControl({ id, value, isNormalized }: VectorCodeControl) { step={0.01} value={value[1]} onChange={(e) => - state.send("CHANGED_CODE_CONTROL", { + state.send('CHANGED_CODE_CONTROL', { [id]: [value[0], Number(e.currentTarget.value)], }) } @@ -115,28 +105,20 @@ function VectorControl({ id, value, isNormalized }: VectorCodeControl) { ) } -function TextControl({}: TextCodeControl) { - return <> -} +const Inputs = styled('div', { + display: 'flex', + gap: '8px', + height: '100%', -function SelectControl({}: SelectCodeControl) { - return <> -} - -const Inputs = styled("div", { - display: "flex", - gap: "8px", - height: "100%", - - "& input": { - font: "$ui", - width: "64px", - fontSize: "$1", - border: "1px solid $inputBorder", - backgroundColor: "$input", - color: "$text", - height: "100%", - padding: "0px 6px", + '& input': { + font: '$ui', + width: '64px', + fontSize: '$1', + border: '1px solid $inputBorder', + backgroundColor: '$input', + color: '$text', + height: '100%', + padding: '0px 6px', }, "& input[type='range']": { padding: 0, diff --git a/components/controls-panel/controls-panel.tsx b/components/controls-panel/controls-panel.tsx index 23ce5f1b8..36adea955 100644 --- a/components/controls-panel/controls-panel.tsx +++ b/components/controls-panel/controls-panel.tsx @@ -1,14 +1,14 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ import styled from 'styles' -import React, { useEffect, useRef } from 'react' +import React, { useRef } from 'react' import state, { useSelector } from 'state' -import { X, Code, PlayCircle } from 'react-feather' +import { X, Code } from 'react-feather' import { IconButton } from 'components/shared' import * as Panel from '../panel' import Control from './control' import { deepCompareArrays } from 'utils/utils' -export default function ControlPanel() { +export default function ControlPanel(): JSX.Element { const rContainer = useRef(null) const codeControls = useSelector( (state) => Object.keys(state.data.codeControls), diff --git a/components/editor.tsx b/components/editor.tsx index 7ce4c123c..6e0f99dc7 100644 --- a/components/editor.tsx +++ b/components/editor.tsx @@ -11,7 +11,7 @@ import PagePanel from './page-panel/page-panel' // import { useSelector } from 'state' // const CodePanel = dynamic(() => import('./code-panel/code-panel')) -export default function Editor() { +export default function Editor(): JSX.Element { useKeyboardEvents() useLoadOnMount() diff --git a/components/page-panel/page-panel.tsx b/components/page-panel/page-panel.tsx index 4641b0eed..da0310a52 100644 --- a/components/page-panel/page-panel.tsx +++ b/components/page-panel/page-panel.tsx @@ -1,15 +1,14 @@ import styled from 'styles' import * as ContextMenu from '@radix-ui/react-context-menu' import * as DropdownMenu from '@radix-ui/react-dropdown-menu' -import * as Dialog from '@radix-ui/react-dialog' import { IconWrapper, RowButton } from 'components/shared' -import { CheckIcon, ChevronDownIcon, PlusIcon } from '@radix-ui/react-icons' +import { CheckIcon, PlusIcon } from '@radix-ui/react-icons' import * as Panel from '../panel' import state, { useSelector } from 'state' import { useEffect, useRef, useState } from 'react' -export default function PagePanel() { +export default function PagePanel(): JSX.Element { const rIsOpen = useRef(false) const [isOpen, setIsOpen] = useState(false) @@ -189,30 +188,3 @@ const StyledContextMenuItem = styled(ContextMenu.Item, { }, }, }) - -const StyledOverlay = styled(Dialog.Overlay, { - backgroundColor: 'rgba(0, 0, 0, .15)', - position: 'fixed', - top: 0, - right: 0, - bottom: 0, - left: 0, -}) - -const StyledContent = styled(Dialog.Content, { - position: 'fixed', - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - minWidth: 200, - maxWidth: 'fit-content', - maxHeight: '85vh', - padding: 20, - marginTop: '-5vh', - backgroundColor: 'white', - borderRadius: 6, - - '&:focus': { - outline: 'none', - }, -}) diff --git a/components/shared.tsx b/components/shared.tsx index d561bc388..79f3477c1 100644 --- a/components/shared.tsx +++ b/components/shared.tsx @@ -256,7 +256,7 @@ export const DropdownContent = styled(DropdownMenu.Content, { }, }) -export function DashSolidIcon() { +export function DashSolidIcon(): JSX.Element { return ( { const states = s.split('.') @@ -22,11 +20,6 @@ export default function StatusBar() {
{active.join(' | ')} | {log}
- {/*
- {count} | {time.toString().padStart(3, '0')} -
*/} ) } @@ -62,18 +55,3 @@ const Section = styled('div', { whiteSpace: 'nowrap', overflow: 'hidden', }) - -function useRenderCount() { - const rTime = useRef(Date.now()) - const rCounter = useRef(0) - - rCounter.current++ - const now = Date.now() - let time = now - rTime.current - if (time > 100) { - time = 0 - } - rTime.current = now - - return { count: rCounter.current, time } -} diff --git a/components/style-panel/align-distribute.tsx b/components/style-panel/align-distribute.tsx index edbe9b2b0..8368d8593 100644 --- a/components/style-panel/align-distribute.tsx +++ b/components/style-panel/align-distribute.tsx @@ -61,7 +61,7 @@ export default function AlignDistribute({ }: { hasTwoOrMore: boolean hasThreeOrMore: boolean -}) { +}): JSX.Element { return ( void -}) { +}): JSX.Element { return ( {Object.keys(strokes).map((color: ColorStyle) => ( diff --git a/components/style-panel/color-picker.tsx b/components/style-panel/color-picker.tsx index 80b2ad453..a53f02063 100644 --- a/components/style-panel/color-picker.tsx +++ b/components/style-panel/color-picker.tsx @@ -1,5 +1,5 @@ import * as DropdownMenu from '@radix-ui/react-dropdown-menu' -import { strokes } from 'lib/shape-styles' +import { strokes } from 'state/shape-styles' import { ColorStyle } from 'types' import { RowButton, IconWrapper } from '../shared' import { Square } from 'react-feather' @@ -10,7 +10,7 @@ interface Props { onChange: (color: ColorStyle) => void } -export default function ColorPicker({ color, onChange }: Props) { +export default function ColorPicker({ color, onChange }: Props): JSX.Element { return ( void } -export default function IsFilledPicker({ isFilled, onChange }: Props) { +export default function IsFilledPicker({ + isFilled, + onChange, +}: Props): JSX.Element { return ( s.values.selectedStyle.color) return ( diff --git a/components/style-panel/quick-dash-select.tsx b/components/style-panel/quick-dash-select.tsx index ccb9c31b3..05fbde043 100644 --- a/components/style-panel/quick-dash-select.tsx +++ b/components/style-panel/quick-dash-select.tsx @@ -17,7 +17,7 @@ const dashes = { [DashStyle.Dotted]: , } -export default function QuickdashSelect() { +export default function QuickdashSelect(): JSX.Element { const dash = useSelector((s) => s.values.selectedStyle.dash) return ( diff --git a/components/style-panel/quick-size-select.tsx b/components/style-panel/quick-size-select.tsx index 6235fa0f9..84c24649d 100644 --- a/components/style-panel/quick-size-select.tsx +++ b/components/style-panel/quick-size-select.tsx @@ -12,7 +12,7 @@ const sizes = { [SizeStyle.Large]: 22, } -export default function QuickSizeSelect() { +export default function QuickSizeSelect(): JSX.Element { const size = useSelector((s) => s.values.selectedStyle.size) return ( diff --git a/components/style-panel/size-picker.tsx b/components/style-panel/size-picker.tsx index 7b4d3baa1..b7d2bfa10 100644 --- a/components/style-panel/size-picker.tsx +++ b/components/style-panel/size-picker.tsx @@ -8,7 +8,7 @@ function handleChange(size: string) { state.send('CHANGED_STYLE', { size }) } -export default function SizePicker({ size }: { size: SizeStyle }) { +export default function SizePicker({ size }: { size: SizeStyle }): JSX.Element { return ( (null) const isOpen = useSelector((s) => s.data.settings.isStyleOpen) @@ -69,7 +69,7 @@ export default function StylePanel() { // information, based on the user's current selection. We might have to keep // track of this data manually within our state. -function SelectedShapeStyles() { +function SelectedShapeStyles(): JSX.Element { const selectedIds = useSelector( (s) => setToArray(getSelectedIds(s.data)), deepCompareArrays diff --git a/components/tools-panel/tools-panel.tsx b/components/tools-panel/tools-panel.tsx index b629f2141..64667097d 100644 --- a/components/tools-panel/tools-panel.tsx +++ b/components/tools-panel/tools-panel.tsx @@ -2,13 +2,10 @@ import { ArrowTopRightIcon, CircleIcon, CursorArrowIcon, - DividerHorizontalIcon, - DotIcon, LockClosedIcon, LockOpen1Icon, Pencil1Icon, Pencil2Icon, - SewingPinIcon, SquareIcon, TextIcon, } from '@radix-ui/react-icons' @@ -22,19 +19,14 @@ import Zoom from './zoom' import Tooltip from '../tooltip' const selectArrowTool = () => state.send('SELECTED_ARROW_TOOL') -const selectCircleTool = () => state.send('SELECTED_CIRCLE_TOOL') -const selectDotTool = () => state.send('SELECTED_DOT_TOOL') const selectDrawTool = () => state.send('SELECTED_DRAW_TOOL') const selectEllipseTool = () => state.send('SELECTED_ELLIPSE_TOOL') -const selectLineTool = () => state.send('SELECTED_LINE_TOOL') -const selectPolylineTool = () => state.send('SELECTED_POLYLINE_TOOL') const selectTextTool = () => state.send('SELECTED_TEXT_TOOL') -const selectRayTool = () => state.send('SELECTED_RAY_TOOL') const selectRectangleTool = () => state.send('SELECTED_RECTANGLE_TOOL') const selectSelectTool = () => state.send('SELECTED_SELECT_TOOL') const selectToolLock = () => state.send('TOGGLED_TOOL_LOCK') -export default function ToolsPanel() { +export default function ToolsPanel(): JSX.Element { const activeTool = useSelector((s) => s.data.activeTool) const isToolLocked = useSelector((s) => s.data.settings.isToolLocked) diff --git a/components/tools-panel/undo-redo.tsx b/components/tools-panel/undo-redo.tsx index e199ca9d8..836b25974 100644 --- a/components/tools-panel/undo-redo.tsx +++ b/components/tools-panel/undo-redo.tsx @@ -1,6 +1,6 @@ import { IconButton } from 'components/shared' import { RotateCcw, RotateCw, Trash2 } from 'react-feather' -import state, { useSelector } from 'state' +import state from 'state' import styled from 'styles' import Tooltip from '../tooltip' @@ -8,7 +8,7 @@ const undo = () => state.send('UNDO') const redo = () => state.send('REDO') const clear = () => state.send('CLEARED_PAGE') -export default function UndoRedo() { +export default function UndoRedo(): JSX.Element { return ( diff --git a/components/tools-panel/zoom.tsx b/components/tools-panel/zoom.tsx index 90596ce9b..84193082d 100644 --- a/components/tools-panel/zoom.tsx +++ b/components/tools-panel/zoom.tsx @@ -10,7 +10,7 @@ const zoomOut = () => state.send('ZOOMED_OUT') const zoomToFit = () => state.send('ZOOMED_TO_FIT') const zoomToActual = () => state.send('ZOOMED_TO_ACTUAL') -export default function Zoom() { +export default function Zoom(): JSX.Element { return ( diff --git a/components/tooltip.tsx b/components/tooltip.tsx index 2859e83bf..efd2cdf3f 100644 --- a/components/tooltip.tsx +++ b/components/tooltip.tsx @@ -10,7 +10,7 @@ export default function Tooltip({ children: React.ReactNode label: string side?: 'bottom' | 'left' | 'right' | 'top' -}) { +}): JSX.Element { return ( <_Tooltip.Root> <_Tooltip.Trigger as="span">{children} diff --git a/decs.d.ts b/decs.d.ts index 7681361e4..7ec0b3638 100644 --- a/decs.d.ts +++ b/decs.d.ts @@ -20,7 +20,7 @@ interface FontFace { interface FontFaceSet { readonly status: FontFaceSetStatus readonly ready: Promise - check(font: string, text?: string): Boolean + check(font: string, text?: string): boolean load(font: string, text?: string): Promise } diff --git a/hooks/useBoundsEvents.ts b/hooks/useBoundsEvents.ts index e61ac6cba..a6a48a1dc 100644 --- a/hooks/useBoundsEvents.ts +++ b/hooks/useBoundsEvents.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { useCallback } from 'react' import { fastTransform } from 'state/hacks' import inputs from 'state/inputs' diff --git a/hooks/useCamera.ts b/hooks/useCamera.ts index d356078c7..406033e56 100644 --- a/hooks/useCamera.ts +++ b/hooks/useCamera.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import React, { useEffect } from 'react' import state from 'state' import storage from 'state/storage' diff --git a/hooks/useCanvasEvents.ts b/hooks/useCanvasEvents.ts index e525de65f..514d98028 100644 --- a/hooks/useCanvasEvents.ts +++ b/hooks/useCanvasEvents.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { MutableRefObject, useCallback } from 'react' import state from 'state' import { @@ -7,7 +8,6 @@ import { fastTranslate, } from 'state/hacks' import inputs from 'state/inputs' -import { isMobile } from 'utils/utils' export default function useCanvasEvents( rCanvas: MutableRefObject @@ -58,7 +58,7 @@ export default function useCanvasEvents( state.send('STOPPED_POINTING', { id: 'canvas', ...inputs.pointerUp(e) }) }, []) - const handleTouchStart = useCallback((e: React.TouchEvent) => { + const handleTouchStart = useCallback(() => { // if (isMobile()) { // if (e.touches.length === 2) { // state.send('TOUCH_UNDO') diff --git a/hooks/useGtag.ts b/hooks/useGtag.ts index 89703d149..b7e36125e 100644 --- a/hooks/useGtag.ts +++ b/hooks/useGtag.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import router from 'next/router' import { useEffect } from 'react' import * as gtag from 'utils/gtag' diff --git a/hooks/useHandleEvents.ts b/hooks/useHandleEvents.ts index d3e31fa12..1f97968f4 100644 --- a/hooks/useHandleEvents.ts +++ b/hooks/useHandleEvents.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { MutableRefObject, useCallback } from 'react' import state from 'state' import inputs from 'state/inputs' diff --git a/hooks/useKeyboardEvents.ts b/hooks/useKeyboardEvents.ts index 362a09112..d2ad4a618 100644 --- a/hooks/useKeyboardEvents.ts +++ b/hooks/useKeyboardEvents.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { useEffect } from 'react' import state from 'state' import { MoveType } from 'types' @@ -157,6 +158,7 @@ export default function useKeyboardEvents() { } case 'o': { if (metaKey(e)) { + break } else { state.send('SELECTED_DOT_TOOL', getKeyboardEventInfo(e)) } @@ -204,6 +206,7 @@ export default function useKeyboardEvents() { } case 'i': { if (metaKey(e)) { + break } else { state.send('SELECTED_CIRCLE_TOOL', getKeyboardEventInfo(e)) } @@ -221,6 +224,7 @@ export default function useKeyboardEvents() { } case 'y': { if (metaKey(e)) { + break } else { state.send('SELECTED_RAY_TOOL', getKeyboardEventInfo(e)) } @@ -228,6 +232,7 @@ export default function useKeyboardEvents() { } case 'p': { if (metaKey(e)) { + break } else { state.send('SELECTED_POLYLINE_TOOL', getKeyboardEventInfo(e)) } @@ -235,6 +240,7 @@ export default function useKeyboardEvents() { } case 'r': { if (metaKey(e)) { + break } else { state.send('SELECTED_RECTANGLE_TOOL', getKeyboardEventInfo(e)) } diff --git a/hooks/useLoadOnMount.ts b/hooks/useLoadOnMount.ts index 832ff558d..c6f8c6744 100644 --- a/hooks/useLoadOnMount.ts +++ b/hooks/useLoadOnMount.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { useEffect } from 'react' import state from 'state' diff --git a/hooks/useShapeEvents.ts b/hooks/useShapeEvents.ts index b21ba0db1..9a6d53eca 100644 --- a/hooks/useShapeEvents.ts +++ b/hooks/useShapeEvents.ts @@ -1,4 +1,5 @@ -import React, { MutableRefObject, useCallback, useRef } from 'react' +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import React, { MutableRefObject, useCallback } from 'react' import state from 'state' import inputs from 'state/inputs' diff --git a/hooks/useTheme.ts b/hooks/useTheme.ts index 58e9ca1bd..b738b909e 100644 --- a/hooks/useTheme.ts +++ b/hooks/useTheme.ts @@ -1,12 +1,13 @@ -import { useCallback } from "react" -import state, { useSelector } from "state" +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import { useCallback } from 'react' +import state, { useSelector } from 'state' export default function useTheme() { const theme = useSelector((state) => - state.data.settings.isDarkMode ? "dark" : "light" + state.data.settings.isDarkMode ? 'dark' : 'light' ) - const toggleTheme = useCallback(() => state.send("TOGGLED_THEME"), []) + const toggleTheme = useCallback(() => state.send('TOGGLED_THEME'), []) return { theme, toggleTheme } } diff --git a/hooks/useZoomEvents.ts b/hooks/useZoomEvents.ts index 767315c5a..286e1ac44 100644 --- a/hooks/useZoomEvents.ts +++ b/hooks/useZoomEvents.ts @@ -1,4 +1,5 @@ -import { useRef } from 'react' +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { useRef } from 'react' + import state from 'state' import inputs from 'state/inputs' import vec from 'utils/vec' @@ -47,13 +48,12 @@ export default function useZoomEvents() { rPinchPoint.current = origin } - const [distanceDelta, angleDelta] = vec.sub(rPinchDa.current, da) + const [distanceDelta] = vec.sub(rPinchDa.current, da) fastPinchCamera( origin, vec.sub(rPinchPoint.current, origin), - distanceDelta, - angleDelta + distanceDelta ) rPinchDa.current = da diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..e0a5f82eb --- /dev/null +++ b/jest.config.js @@ -0,0 +1,19 @@ +module.exports = { + roots: [''], + testEnvironment: 'jsdom', + moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'jsx'], + testPathIgnorePatterns: ['[/\\\\](node_modules|.next)[/\\\\]'], + transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(ts|tsx)$'], + transform: { + '^.+\\.(ts|tsx)$': 'babel-jest', + }, + modulePaths: [''], + watchPlugins: [ + 'jest-watch-typeahead/filename', + 'jest-watch-typeahead/testname', + ], + moduleNameMapper: { + '\\.(css|less|sass|scss)$': 'identity-obj-proxy', + '\\.(gif|ttf|eot|svg|png)$': '/test/__mocks__/fileMock.js', + }, +} diff --git a/lib/shape-utils/index.tsx b/lib/shape-utils/index.tsx deleted file mode 100644 index 31050f6d1..000000000 --- a/lib/shape-utils/index.tsx +++ /dev/null @@ -1,388 +0,0 @@ -import { - Bounds, - Shape, - ShapeType, - Corner, - Edge, - ShapeStyles, - ShapeBinding, - Mutable, - ShapeByType, -} from 'types' -import vec from 'utils/vec' -import { - getBoundsCenter, - getBoundsFromPoints, - getRotatedCorners, -} from 'utils/utils' -import { - boundsCollidePolygon, - boundsContainPolygon, - pointInBounds, -} from 'utils/bounds' -import { uniqueId } from 'utils/utils' -import circle from './circle' -import dot from './dot' -import polyline from './polyline' -import rectangle from './rectangle' -import ellipse from './ellipse' -import line from './line' -import ray from './ray' -import draw from './draw' -import arrow from './arrow' -import group from './group' -import text from './text' -import React from 'react' - -/* -Shape Utiliies - -A shape utility is an object containing utility methods for each type of shape -in the application. While shapes may be very different, each shape must support -a common set of utility methods, such as hit tests or translations, that - -Operations throughout the app will call these utility methods -when performing tests (such as hit tests) or mutations, such as translations. -*/ - -export interface ShapeUtility { - // A cache for the computed bounds of this kind of shape. - boundsCache: WeakMap - - // Whether to show transform controls when this shape is selected. - canTransform: boolean - - // Whether the shape's aspect ratio can change. - canChangeAspectRatio: boolean - - // Whether the shape's style can be filled. - canStyleFill: boolean - - // Whether the shape may be edited in an editing mode - canEdit: boolean - - // Whether the shape is a foreign object. - isForeignObject: boolean - - // Whether the shape can contain other shapes. - isParent: boolean - - // Whether the shape is only shown when on hovered. - isShy: boolean - - // Create a new shape. - create(props: Partial): K - - // Update a shape's styles - applyStyles( - this: ShapeUtility, - shape: Mutable, - style: Partial - ): ShapeUtility - - translateBy( - this: ShapeUtility, - shape: Mutable, - point: number[] - ): ShapeUtility - - translateTo( - this: ShapeUtility, - shape: Mutable, - point: number[] - ): ShapeUtility - - rotateBy( - this: ShapeUtility, - shape: Mutable, - rotation: number - ): ShapeUtility - - rotateTo( - this: ShapeUtility, - shape: Mutable, - rotation: number, - delta: number - ): ShapeUtility - - // Transform to fit a new bounding box when more than one shape is selected. - transform( - this: ShapeUtility, - shape: Mutable, - bounds: Bounds, - info: { - type: Edge | Corner - initialShape: K - scaleX: number - scaleY: number - transformOrigin: number[] - } - ): ShapeUtility - - // Transform a single shape to fit a new bounding box. - transformSingle( - this: ShapeUtility, - shape: Mutable, - bounds: Bounds, - info: { - type: Edge | Corner - initialShape: K - scaleX: number - scaleY: number - transformOrigin: number[] - } - ): ShapeUtility - - setProperty

( - this: ShapeUtility, - shape: Mutable, - prop: P, - value: K[P] - ): ShapeUtility - - // Respond when any child of this shape changes. - onChildrenChange( - this: ShapeUtility, - shape: Mutable, - children: Shape[] - ): ShapeUtility - - // Respond when a user moves one of the shape's bound elements. - onBindingChange( - this: ShapeUtility, - shape: Mutable, - bindings: Record - ): ShapeUtility - - // Respond when a user moves one of the shape's handles. - onHandleChange( - this: ShapeUtility, - shape: Mutable, - handle: Partial - ): ShapeUtility - - // Respond when a user double clicks the shape's bounds. - onBoundsReset(this: ShapeUtility, shape: Mutable): ShapeUtility - - // Respond when a user double clicks the center of the shape. - onDoubleFocus(this: ShapeUtility, shape: Mutable): ShapeUtility - - // Clean up changes when a session ends. - onSessionComplete(this: ShapeUtility, shape: Mutable): ShapeUtility - - // Render a shape to JSX. - render( - this: ShapeUtility, - shape: K, - info: { - isEditing: boolean - ref?: React.MutableRefObject - } - ): JSX.Element - - invalidate(this: ShapeUtility, shape: K): ShapeUtility - - // Get the bounds of the a shape. - getBounds(this: ShapeUtility, shape: K): Bounds - - // Get the routated bounds of the a shape. - getRotatedBounds(this: ShapeUtility, shape: K): Bounds - - // Get the center of the shape - getCenter(this: ShapeUtility, shape: K): number[] - - // Test whether a point lies within a shape. - hitTest(this: ShapeUtility, shape: K, test: number[]): boolean - - // Test whether bounds collide with or contain a shape. - hitTestBounds(this: ShapeUtility, shape: K, bounds: Bounds): boolean - - shouldDelete(this: ShapeUtility, shape: K): boolean -} - -// A mapping of shape types to shape utilities. -const shapeUtilityMap: Record> = { - [ShapeType.Circle]: circle, - [ShapeType.Dot]: dot, - [ShapeType.Polyline]: polyline, - [ShapeType.Rectangle]: rectangle, - [ShapeType.Ellipse]: ellipse, - [ShapeType.Line]: line, - [ShapeType.Ray]: ray, - [ShapeType.Draw]: draw, - [ShapeType.Arrow]: arrow, - [ShapeType.Text]: text, - [ShapeType.Group]: group, -} - -/** - * A helper to retrieve a shape utility based on a shape object. - * @param shape - * @returns - */ -export function getShapeUtils(shape: T): ShapeUtility { - return shapeUtilityMap[shape?.type] as ShapeUtility -} - -function getDefaultShapeUtil(): ShapeUtility { - return { - boundsCache: new WeakMap(), - canTransform: true, - canChangeAspectRatio: true, - canStyleFill: true, - canEdit: false, - isShy: false, - isParent: false, - isForeignObject: false, - - create(props) { - return { - id: uniqueId(), - isGenerated: false, - point: [0, 0], - name: 'Shape', - parentId: 'page1', - childIndex: 0, - rotation: 0, - isAspectRatioLocked: false, - isLocked: false, - isHidden: false, - ...props, - } as T - }, - - render(shape) { - return - }, - - translateBy(shape, delta) { - shape.point = vec.round(vec.add(shape.point, delta)) - return this - }, - - translateTo(shape, point) { - shape.point = vec.round(point) - return this - }, - - rotateTo(shape, rotation) { - shape.rotation = rotation - return this - }, - - rotateBy(shape, rotation) { - shape.rotation += rotation - return this - }, - - transform(shape, bounds) { - shape.point = [bounds.minX, bounds.minY] - return this - }, - - transformSingle(shape, bounds, info) { - return this.transform(shape, bounds, info) - }, - - onChildrenChange() { - return this - }, - - onBindingChange() { - return this - }, - - onHandleChange() { - return this - }, - - onDoubleFocus() { - return this - }, - - onBoundsReset() { - return this - }, - - onSessionComplete() { - return this - }, - - getBounds(shape) { - const [x, y] = shape.point - return { - minX: x, - minY: y, - maxX: x + 1, - maxY: y + 1, - width: 1, - height: 1, - } - }, - - getRotatedBounds(shape) { - return getBoundsFromPoints( - getRotatedCorners(this.getBounds(shape), shape.rotation) - ) - }, - - getCenter(shape) { - return getBoundsCenter(this.getBounds(shape)) - }, - - hitTest(shape, point) { - return pointInBounds(point, this.getBounds(shape)) - }, - - hitTestBounds(shape, brushBounds) { - const rotatedCorners = getRotatedCorners( - this.getBounds(shape), - shape.rotation - ) - - return ( - boundsContainPolygon(brushBounds, rotatedCorners) || - boundsCollidePolygon(brushBounds, rotatedCorners) - ) - }, - - setProperty(shape, prop, value) { - shape[prop] = value - return this - }, - - applyStyles(shape, style) { - Object.assign(shape.style, style) - return this - }, - - shouldDelete(shape) { - return false - }, - - invalidate(shape) { - this.boundsCache.delete(shape) - return this - }, - } -} - -/** - * A factory of shape utilities, with typing enforced. - * @param shape - * @returns - */ -export function registerShapeUtils( - shapeUtil: Partial> -): ShapeUtility { - return Object.freeze({ ...getDefaultShapeUtil(), ...shapeUtil }) -} - -export function createShape( - type: T, - props: Partial> -): ShapeByType { - return shapeUtilityMap[type].create(props) as ShapeByType -} - -export default shapeUtilityMap diff --git a/next.config.js b/next.config.js deleted file mode 100644 index 549114db3..000000000 --- a/next.config.js +++ /dev/null @@ -1,20 +0,0 @@ -const withPWA = require('next-pwa') -const { withSentryConfig } = require('@sentry/nextjs') - -const SentryWebpackPluginOptions = { - silent: process.env.NODE_ENV === 'development', -} - -module.exports = withSentryConfig( - withPWA({ - future: { - webpack5: true, - }, - pwa: { - dest: 'public', - scope: '/', - disable: process.env.NODE_ENV === 'development', - }, - }), - SentryWebpackPluginOptions -) diff --git a/package.json b/package.json index 29e3a667b..c35d679e8 100644 --- a/package.json +++ b/package.json @@ -1,57 +1,85 @@ { - "name": "code-slate", - "version": "0.1.0", - "private": true, + "name": "with-typescript-eslint-jest", + "author": "@erikdstock", + "license": "MIT", + "version": "1.0.0", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", - "test": "yarn test:app", - "test:all": "yarn test:code", - "test:update": "yarn test:app --updateSnapshot --watchAll=false" + "type-check": "tsc --pretty --noEmit", + "format": "prettier --write .", + "lint": "eslint . --ext ts --ext tsx --ext js", + "test": "jest", + "test:watch": "jest --watchAll", + "test:update": "jest --updateSnapshot", + "test-all": "yarn lint && yarn type-check && yarn test" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "pre-push": "yarn run type-check" + } + }, + "lint-staged": { + "*.@(ts|tsx)": [ + "yarn lint", + "yarn format" + ] }, "dependencies": { - "@monaco-editor/react": "^4.1.3", + "@monaco-editor/react": "^4.2.1", "@radix-ui/react-checkbox": "^0.0.16", - "@radix-ui/react-context-menu": "^0.0.21", + "@radix-ui/react-context-menu": "^0.0.22", "@radix-ui/react-dialog": "^0.0.18", - "@radix-ui/react-dropdown-menu": "^0.0.20", + "@radix-ui/react-dropdown-menu": "^0.0.21", "@radix-ui/react-hover-card": "^0.0.3", "@radix-ui/react-icons": "^1.0.3", "@radix-ui/react-radio-group": "^0.0.17", "@radix-ui/react-tooltip": "^0.0.19", - "@sentry/integrations": "^6.7.1", - "@sentry/nextjs": "^6.7.1", - "@sentry/node": "^6.7.1", - "@sentry/react": "^6.7.1", - "@sentry/tracing": "^6.7.1", + "@sentry/integrations": "^6.7.2", + "@sentry/nextjs": "^6.7.2", + "@sentry/node": "^6.7.2", + "@sentry/react": "^6.7.2", + "@sentry/tracing": "^6.7.2", "@sentry/webpack-plugin": "^1.15.1", - "@state-designer/react": "^1.7.3", - "@stitches/react": "^0.2.1", + "@state-designer/react": "^1.7.32", + "@stitches/react": "^0.2.2", + "@types/uuid": "^8.3.0", "browser-fs-access": "^0.17.3", - "framer-motion": "^4.1.16", + "framer-motion": "^4.1.17", "gtag": "^1.0.1", "idb-keyval": "^5.0.6", "ismobilejs": "^1.1.1", - "next": "10.2.0", + "monaco-editor": "^0.25.2", + "next": "latest", "next-auth": "^3.27.0", "next-pwa": "^5.2.21", "perfect-freehand": "^0.4.9", - "prettier": "^2.3.0", - "react": "17.0.2", - "react-dom": "17.0.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", "react-feather": "^2.0.9", "react-use-gesture": "^9.1.3", "uuid": "^8.3.2" }, "devDependencies": { - "@types/next": "^9.0.0", - "@types/react": "^17.0.5", - "@types/react-dom": "^17.0.3", - "@types/uuid": "^8.3.0", + "@testing-library/react": "^11.2.5", + "@types/jest": "^26.0.23", + "@types/node": "^14.14.25", + "@types/react": "^17.0.1", + "@typescript-eslint/eslint-plugin": "^4.14.2", + "@typescript-eslint/parser": "^4.14.2", "babel-jest": "^27.0.2", + "eslint": "^7.19.0", + "eslint-config-next": "^11.0.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-react": "^7.19.0", + "husky": "^4.2.3", + "identity-obj-proxy": "^3.0.0", "jest": "^27.0.4", - "monaco-editor": "^0.24.0", - "typescript": "^4.2.4" + "jest-watch-typeahead": "^0.6.1", + "lint-staged": "^10.0.10", + "prettier": "^2.3.1", + "typescript": "^4.1.3" } } diff --git a/pages/_app.tsx b/pages/_app.tsx index 4a7f0cd54..201a6395c 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,10 +1,10 @@ import useGtag from 'hooks/useGtag' import { AppProps } from 'next/app' import { globalStyles } from 'styles' -import 'styles/globals.css' import { Provider } from 'next-auth/client' +import 'styles/globals.css' -function MyApp({ Component, pageProps }: AppProps) { +function MyApp({ Component, pageProps }: AppProps): JSX.Element { globalStyles() useGtag() diff --git a/pages/_document.tsx b/pages/_document.tsx index e00a4c672..65fb35297 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,9 +1,19 @@ -import NextDocument, { Html, Head, Main, NextScript } from 'next/document' +import NextDocument, { + Html, + Head, + Main, + NextScript, + DocumentContext, +} from 'next/document' import { dark, getCssString } from 'styles' import { GA_TRACKING_ID } from 'utils/gtag' class MyDocument extends NextDocument { - static async getInitialProps(ctx) { + static async getInitialProps(ctx: DocumentContext): Promise<{ + styles: JSX.Element + html: string + head?: JSX.Element[] + }> { try { const initialProps = await NextDocument.getInitialProps(ctx) @@ -22,10 +32,11 @@ class MyDocument extends NextDocument { } catch (e) { console.error(e.message) } finally { + null } } - render() { + render(): JSX.Element { return ( diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts index 947606be4..7870b8851 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/pages/api/auth/[...nextauth].ts @@ -1,8 +1,11 @@ -import { NextApiRequest, NextApiResponse } from 'next' +import { NextApiHandler, NextApiRequest, NextApiResponse } from 'next' import NextAuth from 'next-auth' import Providers from 'next-auth/providers' -export default function (req: NextApiRequest, res: NextApiResponse) { +export default function Auth( + req: NextApiRequest, + res: NextApiResponse +): ReturnType { return NextAuth(req, res, { providers: [ Providers.GitHub({ @@ -15,8 +18,7 @@ export default function (req: NextApiRequest, res: NextApiResponse) { async redirect(url, baseUrl) { return url.startsWith(baseUrl) ? url : baseUrl }, - async signIn(user, account, profile) { - // @ts-ignore + async signIn(user, account, profile: any) { const canLogin = await isSponsoringMe(profile?.login) if (canLogin) { diff --git a/pages/create-error.tsx b/pages/create-error.tsx index 121f306f1..5f233c74d 100644 --- a/pages/create-error.tsx +++ b/pages/create-error.tsx @@ -1,4 +1,4 @@ -export default function CreateError() { +export default function CreateError(): JSX.Element { return (

diff --git a/pages/sponsorware.tsx b/pages/sponsorware.tsx index d86512f3c..de3730c4e 100644 --- a/pages/sponsorware.tsx +++ b/pages/sponsorware.tsx @@ -3,7 +3,7 @@ import { getSession, signin, signout, useSession } from 'next-auth/client' import { GetServerSideProps } from 'next' import React from 'react' -export default function Sponsorware() { +export default function Sponsorware(): JSX.Element { const [session, loading] = useSession() return ( @@ -27,7 +27,7 @@ export default function Sponsorware() {
  • only available for my sponsors
  • - If you'd like to try it out,{' '} + If you'd like to try it out,{' '} Signed in as {session?.user?.name} ({session?.user?.email}), but - it looks like you're not yet a sponsor. + it looks like you're not yet a sponsor.
    Something wrong? Try
    reloading the page or DM me on Twitter. @@ -67,7 +67,7 @@ export default function Sponsorware() { export const getServerSideProps: GetServerSideProps = async (context) => { const session = await getSession(context) - if (!!session?.user) { + if (session?.user) { context.res.setHeader('Location', `/`) context.res.statusCode = 307 } diff --git a/public/sw.js b/public/sw.js index 926e4f48e..b5caac75d 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1,2 @@ -if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return n[e]||(s=new Promise((async s=>{if("document"in self){const n=document.createElement("script");n.src=e,document.head.appendChild(n),n.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!n[e])throw new Error(`Module ${e} didn’t register its module`);return n[e]}))},s=(s,n)=>{Promise.all(s.map(e)).then((e=>n(1===e.length?e[0]:e)))},n={require:Promise.resolve(s)};self.define=(s,r,t)=>{n[s]||(n[s]=Promise.resolve().then((()=>{let n={};const i={uri:location.origin+s.slice(1)};return Promise.all(r.map((s=>{switch(s){case"exports":return n;case"module":return i;default:return e(s)}}))).then((e=>{const s=t(...e);return n.default||(n.default=s),n}))})))}}define("./sw.js",["./workbox-ea903bce"],(function(e){"use strict";importScripts("worker-sTsqr_RdML8Zn1Mtf4L93.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/VerveineRegular.woff",revision:"858cc7add1765cbcfb0439e275fd167b"},{url:"/_next/static/chunks/245.ce5b9e5f7458bab9f385.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/277.403407e826b90878290c.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/288-927c4239253e14719742.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/37bf9728.224964ff38fcbeae11e1.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/413.cabdee2786cc1cfc278b.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/433-caf2f02f06da9ebe6b55.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/448.9037d63f8ab3e56d4175.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/4c8073aa.2bde4c2edac6a89dc162.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/58917679.c9a296fa294d3d63f7ec.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/605.899dd2ae3f7eeccd53d5.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/64f69659.89e250a93e362eaeb785.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/725.6d0b06d94720e004bf3e.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/768.9668a986d8ee7e8682eb.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/82c1d43a.7bd74b5f0c5e3e0e5142.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/847.f08e8fc00be4d1df0436.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/94.4be39486bdfd850e158f.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/945.793b89ac0f97173af2b2.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/965.f6f31a813cda47c0aa44.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/commons-74dcbb4d31f829044ba6.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/d67bd397.b6201376af6acbfcfd19.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/ee9ce975.86aa96caa4da7c6c2d4b.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/fc6701f7.e6c2fae6a1cd875ac87b.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/framework-0937f3836f2e952792fe.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/main-b92da9bc7e7c9efef0b7.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/pages/_app-d079eb0170fdb9ba1b3e.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/pages/_error-f717ec1d85219d4720aa.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/pages/index-831e74c79b91ae77f1ad.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/polyfills-8683bd742a84c1edd48c.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/chunks/webpack-9d15dacb38c39b5bd50b.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/css/50297e5ab72b54dddbcb.css",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/sTsqr_RdML8Zn1Mtf4L93/_buildManifest.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/_next/static/sTsqr_RdML8Zn1Mtf4L93/_ssgManifest.js",revision:"sTsqr_RdML8Zn1Mtf4L93"},{url:"/android-chrome-192x192.png",revision:"0fd386edd39acea9fa31b4dac03e0e07"},{url:"/android-chrome-512x512.png",revision:"44da99a558c07596c306d4e714befd28"},{url:"/android-icon-144x144.png",revision:"6e9fe5076295cac45cd6f4d3e7f08f6f"},{url:"/android-icon-168x168.png",revision:"3fe7934e2dc81ef7456797201a65c558"},{url:"/android-icon-48x48.png",revision:"f25802841897e0ca547e5d42c513d585"},{url:"/android-icon-72x72.png",revision:"68e29e32526d47b7b415ae18476cd819"},{url:"/android-icon-96x96.png",revision:"7fb410577d10537f9a8ee605afd8f157"},{url:"/apple-touch-icon.png",revision:"42e1ccd90009f853c1654199ab51e9e8"},{url:"/favicon-16x16.png",revision:"bc0808eb6d4a028ed5e82a1b3870e12f"},{url:"/favicon-32x32.png",revision:"9aef18bbed942511815b576802c319bd"},{url:"/favicon.ico",revision:"694c8c5bc32a1f2843e5ede096afaa0e"},{url:"/icons/grab.svg",revision:"a1ca9e5c31d1edd2558ab075f72fde4e"},{url:"/icons/pointer.svg",revision:"dff260f896fe23adb83341639fdf93be"},{url:"/icons/resize.svg",revision:"0a3cb701d15731e25919783801d18f95"},{url:"/manifest.json",revision:"ebe4513d4f6223d063881ffaf4341b34"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:r})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis|gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:mp3|mp4)$/i,new e.StaleWhileRevalidate({cacheName:"static-media-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET")})); +if(!self.define){const e=e=>{"require"!==e&&(e+=".js");let s=Promise.resolve();return i[e]||(s=new Promise((async s=>{if("document"in self){const i=document.createElement("script");i.src=e,document.head.appendChild(i),i.onload=s}else importScripts(e),s()}))),s.then((()=>{if(!i[e])throw new Error(`Module ${e} didn’t register its module`);return i[e]}))},s=(s,i)=>{Promise.all(s.map(e)).then((e=>i(1===e.length?e[0]:e)))},i={require:Promise.resolve(s)};self.define=(s,c,t)=>{i[s]||(i[s]=Promise.resolve().then((()=>{let i={};const n={uri:location.origin+s.slice(1)};return Promise.all(c.map((s=>{switch(s){case"exports":return i;case"module":return n;default:return e(s)}}))).then((e=>{const s=t(...e);return i.default||(i.default=s),i}))})))}}define("./sw.js",["./workbox-ea903bce"],(function(e){"use strict";importScripts("worker-6L8AMbRb0NKpPgic9tDJq.js"),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/VerveineRegular.woff",revision:"858cc7add1765cbcfb0439e275fd167b"},{url:"/_next/static/6L8AMbRb0NKpPgic9tDJq/_buildManifest.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/6L8AMbRb0NKpPgic9tDJq/_ssgManifest.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/245.0b8b5b2c6276314320c8.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/245.0b8b5b2c6276314320c8.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/249-6f03b7a81bcbd0038729.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/249-6f03b7a81bcbd0038729.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/326-3c7a0e1d438e42f6840a.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/326-3c7a0e1d438e42f6840a.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/433-4af653dbe4f101dcf043.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/433-4af653dbe4f101dcf043.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/448.75c2f81459cefda29a33.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/448.75c2f81459cefda29a33.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/500.add46b3673e39a4bea2f.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/500.add46b3673e39a4bea2f.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/517-ef5a73f6d009b76efe08.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/517-ef5a73f6d009b76efe08.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/605.f3864658d8634b76f25b.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/605.f3864658d8634b76f25b.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/679.243b85dfdec37fa00017.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/679.243b85dfdec37fa00017.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/725.ba6f1f8d1ef9761d5764.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/725.ba6f1f8d1ef9761d5764.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/768.3eb2d8f1c748e19b3191.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/768.3eb2d8f1c748e19b3191.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/847.bd02d1a1772e5f87b99d.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/847.bd02d1a1772e5f87b99d.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/94.a2f19400fba005dc6c4f.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/94.a2f19400fba005dc6c4f.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/945.27ce1a50bfc1ce339fd4.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/945.27ce1a50bfc1ce339fd4.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/965.d0b65414f207ca0dc6a2.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/965.d0b65414f207ca0dc6a2.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/ee9ce975.ee18cda6cbd28d404e39.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/ee9ce975.ee18cda6cbd28d404e39.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/framework-0fd486a5f941532fdde0.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/framework-0fd486a5f941532fdde0.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/main-e948a5ffef40ef3bf54a.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/main-e948a5ffef40ef3bf54a.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/_app-a1d000020e93919862ee.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/_app-a1d000020e93919862ee.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/_error-fa66bd2a1f1976f8f4ba.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/_error-fa66bd2a1f1976f8f4ba.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/create-error-dbbfb7ded30741dbea75.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/create-error-dbbfb7ded30741dbea75.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/index-77ea2f4dd2a17b027e3c.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/index-77ea2f4dd2a17b027e3c.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/shhh-c685061b2f91817cb318.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/shhh-c685061b2f91817cb318.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/signout-1aa15c2b9eebca4b25ca.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/signout-1aa15c2b9eebca4b25ca.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/sponsorware-7ed3c2cbeca2692c04bd.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/pages/sponsorware-7ed3c2cbeca2692c04bd.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/polyfills-2eea1e1f8ec955b73e03.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/polyfills-2eea1e1f8ec955b73e03.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/webpack-781ce7a400ed0d5cf690.js",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/chunks/webpack-781ce7a400ed0d5cf690.js.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/css/50297e5ab72b54dddbcb.css",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/_next/static/css/50297e5ab72b54dddbcb.css.map",revision:"6L8AMbRb0NKpPgic9tDJq"},{url:"/android-chrome-192x192.png",revision:"57c9c4cd91d24d48b7ffdda0768fd225"},{url:"/android-chrome-512x512.png",revision:"8d2454e6cf551f8ca1e1d5670b13a8d1"},{url:"/android-chrome-maskable-192x192.png",revision:"71c93ce0b34d2fbb4c6654a9131a3d9d"},{url:"/android-chrome-maskable-512x512.png",revision:"4265b8c09997b16ac1493500b43f3755"},{url:"/apple-touch-icon.png",revision:"8081d08be3673ec33dbeecab06706b2b"},{url:"/favicon-16x16.png",revision:"ac17d75b1ee007781212853a57b88285"},{url:"/favicon-32x32.png",revision:"360bc7cd4706c0657917f3b78fed6b71"},{url:"/favicon.ico",revision:"b2bf6bb7b4d0234f3e6df44fd7d5707e"},{url:"/flat.png",revision:"e0460141713b5c94104ce19b36c4b462"},{url:"/icons/grab.svg",revision:"a1ca9e5c31d1edd2558ab075f72fde4e"},{url:"/icons/pointer.svg",revision:"dff260f896fe23adb83341639fdf93be"},{url:"/icons/resize.svg",revision:"0a3cb701d15731e25919783801d18f95"},{url:"/images/hello.mp4",revision:"b716f249cc6c781c91b0ac9dc23423b3"},{url:"/manifest.json",revision:"3e9972cc640a3e24648a6620cfc03650"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:i,state:c})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis|gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:mp3|mp4)$/i,new e.StaleWhileRevalidate({cacheName:"static-media-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400,purgeOnQuotaError:!0})]}),"GET")})); +//# sourceMappingURL=sw.js.map diff --git a/public/sw.js.map b/public/sw.js.map new file mode 100644 index 000000000..5b449fd5e --- /dev/null +++ b/public/sw.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sw.js","sources":["../../../../../private/var/folders/3w/cj9n4h8j7xl3b82k45v7xw2r0000gn/T/e2857e5ee10e9a773146972d39d21915/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {ExpirationPlugin as workbox_expiration_ExpirationPlugin} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-expiration/ExpirationPlugin.mjs';\nimport {CacheFirst as workbox_strategies_CacheFirst} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-strategies/CacheFirst.mjs';\nimport {StaleWhileRevalidate as workbox_strategies_StaleWhileRevalidate} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-strategies/StaleWhileRevalidate.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/Users/stephenruiz/Developer/GitHub/code-slate/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \"worker-6L8AMbRb0NKpPgic9tDJq.js\"\n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/VerveineRegular.woff\",\n \"revision\": \"858cc7add1765cbcfb0439e275fd167b\"\n },\n {\n \"url\": \"/_next/static/6L8AMbRb0NKpPgic9tDJq/_buildManifest.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/6L8AMbRb0NKpPgic9tDJq/_ssgManifest.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/245.0b8b5b2c6276314320c8.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/245.0b8b5b2c6276314320c8.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/249-6f03b7a81bcbd0038729.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/249-6f03b7a81bcbd0038729.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/326-3c7a0e1d438e42f6840a.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/326-3c7a0e1d438e42f6840a.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/433-4af653dbe4f101dcf043.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/433-4af653dbe4f101dcf043.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/448.75c2f81459cefda29a33.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/448.75c2f81459cefda29a33.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/500.add46b3673e39a4bea2f.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/500.add46b3673e39a4bea2f.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/517-ef5a73f6d009b76efe08.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/517-ef5a73f6d009b76efe08.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/605.f3864658d8634b76f25b.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/605.f3864658d8634b76f25b.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/679.243b85dfdec37fa00017.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/679.243b85dfdec37fa00017.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/725.ba6f1f8d1ef9761d5764.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/725.ba6f1f8d1ef9761d5764.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/768.3eb2d8f1c748e19b3191.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/768.3eb2d8f1c748e19b3191.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/847.bd02d1a1772e5f87b99d.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/847.bd02d1a1772e5f87b99d.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/94.a2f19400fba005dc6c4f.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/94.a2f19400fba005dc6c4f.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/945.27ce1a50bfc1ce339fd4.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/945.27ce1a50bfc1ce339fd4.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/965.d0b65414f207ca0dc6a2.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/965.d0b65414f207ca0dc6a2.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/ee9ce975.ee18cda6cbd28d404e39.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/ee9ce975.ee18cda6cbd28d404e39.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-0fd486a5f941532fdde0.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/framework-0fd486a5f941532fdde0.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/main-e948a5ffef40ef3bf54a.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/main-e948a5ffef40ef3bf54a.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-a1d000020e93919862ee.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_app-a1d000020e93919862ee.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-fa66bd2a1f1976f8f4ba.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/_error-fa66bd2a1f1976f8f4ba.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/create-error-dbbfb7ded30741dbea75.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/create-error-dbbfb7ded30741dbea75.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-77ea2f4dd2a17b027e3c.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/index-77ea2f4dd2a17b027e3c.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-c685061b2f91817cb318.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/shhh-c685061b2f91817cb318.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-1aa15c2b9eebca4b25ca.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/signout-1aa15c2b9eebca4b25ca.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-7ed3c2cbeca2692c04bd.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/pages/sponsorware-7ed3c2cbeca2692c04bd.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/polyfills-2eea1e1f8ec955b73e03.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/polyfills-2eea1e1f8ec955b73e03.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-781ce7a400ed0d5cf690.js\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/chunks/webpack-781ce7a400ed0d5cf690.js.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/css/50297e5ab72b54dddbcb.css\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/_next/static/css/50297e5ab72b54dddbcb.css.map\",\n \"revision\": \"6L8AMbRb0NKpPgic9tDJq\"\n },\n {\n \"url\": \"/android-chrome-192x192.png\",\n \"revision\": \"57c9c4cd91d24d48b7ffdda0768fd225\"\n },\n {\n \"url\": \"/android-chrome-512x512.png\",\n \"revision\": \"8d2454e6cf551f8ca1e1d5670b13a8d1\"\n },\n {\n \"url\": \"/android-chrome-maskable-192x192.png\",\n \"revision\": \"71c93ce0b34d2fbb4c6654a9131a3d9d\"\n },\n {\n \"url\": \"/android-chrome-maskable-512x512.png\",\n \"revision\": \"4265b8c09997b16ac1493500b43f3755\"\n },\n {\n \"url\": \"/apple-touch-icon.png\",\n \"revision\": \"8081d08be3673ec33dbeecab06706b2b\"\n },\n {\n \"url\": \"/favicon-16x16.png\",\n \"revision\": \"ac17d75b1ee007781212853a57b88285\"\n },\n {\n \"url\": \"/favicon-32x32.png\",\n \"revision\": \"360bc7cd4706c0657917f3b78fed6b71\"\n },\n {\n \"url\": \"/favicon.ico\",\n \"revision\": \"b2bf6bb7b4d0234f3e6df44fd7d5707e\"\n },\n {\n \"url\": \"/flat.png\",\n \"revision\": \"e0460141713b5c94104ce19b36c4b462\"\n },\n {\n \"url\": \"/icons/grab.svg\",\n \"revision\": \"a1ca9e5c31d1edd2558ab075f72fde4e\"\n },\n {\n \"url\": \"/icons/pointer.svg\",\n \"revision\": \"dff260f896fe23adb83341639fdf93be\"\n },\n {\n \"url\": \"/icons/resize.svg\",\n \"revision\": \"0a3cb701d15731e25919783801d18f95\"\n },\n {\n \"url\": \"/images/hello.mp4\",\n \"revision\": \"b716f249cc6c781c91b0ac9dc23423b3\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"3e9972cc640a3e24648a6620cfc03650\"\n }\n], {\n \"ignoreURLParametersMatching\": []\n});\nworkbox_precaching_cleanupOutdatedCaches();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({request, response, event, state}) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, {status: 200, statusText: 'OK', headers: response.headers}); } return response; } }] }), 'GET');\nworkbox_routing_registerRoute(/^https:\\/\\/fonts\\.(?:googleapis|gstatic)\\.com\\/.*/i, new workbox_strategies_CacheFirst({ \"cacheName\":\"google-fonts\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 31536000, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-font-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 4, maxAgeSeconds: 604800, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-image-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/image\\?url=.+$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-image\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 64, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:mp3|mp4)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-media-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:js)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-js-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:css|less)$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"static-style-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\/_next\\/data\\/.+\\/.+\\.json$/i, new workbox_strategies_StaleWhileRevalidate({ \"cacheName\":\"next-data\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(/\\.(?:json|xml|csv)$/i, new workbox_strategies_NetworkFirst({ \"cacheName\":\"static-data-assets\", plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n // Exclude /api/auth/callback/* to fix OAuth workflow in Safari without impact other environment\n // Above route is default for next-auth, you may need to change it if your OAuth workflow has a different callback route\n // Issue: https://github.com/shadowwalker/next-pwa/issues/131#issuecomment-821894809\n if (pathname.startsWith('/api/auth/')) return false\n if (pathname.startsWith('/api/')) return true\n return false\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"apis\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 16, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\nworkbox_routing_registerRoute(({url}) => {\n const isSameOrigin = self.origin === url.origin\n if (!isSameOrigin) return false\n const pathname = url.pathname\n if (pathname.startsWith('/api/')) return false\n return true\n }, new workbox_strategies_NetworkFirst({ \"cacheName\":\"others\",\"networkTimeoutSeconds\":10, plugins: [new workbox_expiration_ExpirationPlugin({ maxEntries: 32, maxAgeSeconds: 86400, purgeOnQuotaError: true })] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","async","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_CacheFirst","workbox_expiration_ExpirationPlugin","maxEntries","maxAgeSeconds","purgeOnQuotaError","workbox_strategies_StaleWhileRevalidate","url","origin","pathname","startsWith"],"mappings":"0yBAoBAA,cACE,mCASFC,KAAKC,kDAU+B,CAClC,KACS,iCACK,oCAEd,KACS,iEACK,yBAEd,KACS,+DACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,2DACK,yBAEd,KACS,+DACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,4DACK,yBAEd,KACS,gEACK,yBAEd,KACS,iEACK,yBAEd,KACS,qEACK,yBAEd,KACS,kEACK,yBAEd,KACS,sEACK,yBAEd,KACS,6DACK,yBAEd,KACS,iEACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,qEACK,yBAEd,KACS,yEACK,yBAEd,KACS,2EACK,yBAEd,KACS,+EACK,yBAEd,KACS,oEACK,yBAEd,KACS,wEACK,yBAEd,KACS,mEACK,yBAEd,KACS,uEACK,yBAEd,KACS,sEACK,yBAEd,KACS,0EACK,yBAEd,KACS,0EACK,yBAEd,KACS,8EACK,yBAEd,KACS,kEACK,yBAEd,KACS,sEACK,yBAEd,KACS,gEACK,yBAEd,KACS,oEACK,yBAEd,KACS,sDACK,yBAEd,KACS,0DACK,yBAEd,KACS,uCACK,oCAEd,KACS,uCACK,oCAEd,KACS,gDACK,oCAEd,KACS,gDACK,oCAEd,KACS,iCACK,oCAEd,KACS,8BACK,oCAEd,KACS,8BACK,oCAEd,KACS,wBACK,oCAEd,KACS,qBACK,oCAEd,KACS,2BACK,oCAEd,KACS,8BACK,oCAEd,KACS,6BACK,oCAEd,KACS,6BACK,oCAEd,KACS,0BACK,qCAEb,6BAC8B,+CAMH,IAAK,IAAIC,eAAgC,WAAc,YAAaC,QAAS,CAAC,CAAEC,gBAAiBC,OAAQC,QAAAA,EAASC,SAAAA,EAAUC,MAAAA,EAAOC,MAAAA,KAAiBF,GAA8B,mBAAlBA,EAASG,KAAoC,IAAIC,SAASJ,EAASK,KAAM,CAACC,OAAQ,IAAKC,WAAY,KAAMC,QAASR,EAASQ,UAAoBR,MAAmB,uBAClU,qDAAsD,IAAIS,aAA8B,WAAc,eAAgBb,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,QAAUC,mBAAmB,OAAa,uBAClP,8CAA+C,IAAIC,uBAAwC,WAAc,qBAAsBlB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,EAAGC,cAAe,OAAQC,mBAAmB,OAAa,uBACzP,wCAAyC,IAAIC,uBAAwC,WAAc,sBAAuBlB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBACpP,2BAA4B,IAAIC,uBAAwC,WAAc,aAAclB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBAC9N,kBAAmB,IAAIC,uBAAwC,WAAc,sBAAuBlB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBAC9N,aAAc,IAAIC,uBAAwC,WAAc,mBAAoBlB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBACtN,mBAAoB,IAAIC,uBAAwC,WAAc,sBAAuBlB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBAC/N,gCAAiC,IAAIC,uBAAwC,WAAc,YAAalB,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,uBAClO,uBAAwB,IAAIlB,eAAgC,WAAc,qBAAsBC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,wBAC1N,EAAEE,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,QACpBC,EAAWF,EAAIE,gBAIjBA,EAASC,WAAW,iBACpBD,EAASC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,6BAA+B,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa,wBACxL,EAAEE,IAAAA,WACLtB,KAAKuB,SAAWD,EAAIC,QACtB,OAAO,SACTD,EAAIE,SACRC,WAAW,WAEvB,IAAIvB,eAAgC,WAAc,+BAAiC,GAAIC,QAAS,CAAC,IAAIc,mBAAoC,CAAEC,WAAY,GAAIC,cAAe,MAAOC,mBAAmB,OAAa"} \ No newline at end of file diff --git a/public/workbox-ea903bce.js b/public/workbox-ea903bce.js index 2ac91a3cd..fdec4d823 100644 --- a/public/workbox-ea903bce.js +++ b/public/workbox-ea903bce.js @@ -1 +1,2 @@ define("./workbox-ea903bce.js",["exports"],(function(t){"use strict";try{self["workbox:core:6.1.5"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:6.1.5"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=r&&r.handler;const c=t.method;if(!a&&this.i.has(c)&&(a=this.i.get(c)),!a)return;let o;try{o=a.handle({url:s,request:t,event:e,params:i})}catch(t){o=Promise.reject(t)}const h=r&&r.catchHandler;return o instanceof Promise&&(this.o||h)&&(o=o.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){n=t}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),o}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const a=r.match({url:t,sameOrigin:e,request:s,event:n});if(a)return i=a,(Array.isArray(a)&&0===a.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const o=()=>(c||(c=new a,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new r(t,e,n);else if("function"==typeof t)a=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}return o().registerRoute(a),a}try{self["workbox:strategies:6.1.5"]&&_()}catch(t){}const u={cacheWillUpdate:async({response:t})=>200===t.status||0===t.status?t:null},l={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},f=t=>[l.prefix,t,l.suffix].filter((t=>t&&t.length>0)).join("-"),w=t=>t||f(l.precache),d=t=>t||f(l.runtime);function p(){return(p=Object.assign||function(t){for(var e=1;e{this.resolve=t,this.reject=e}))}}const g=new Set;function R(t){return"string"==typeof t?new Request(t):t}class v{constructor(t,e){this.h={},Object.assign(this,e),this.event=e.event,this.u=t,this.l=new m,this.p=[],this.m=[...t.plugins],this.g=new Map;for(const t of this.m)this.g.set(t,{});this.event.waitUntil(this.l.promise)}async fetch(t){const{event:e}=this;let n=R(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){throw new s("plugin-error-request-will-fetch",{thrownError:t})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.u.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=R(t);let s;const{cacheName:n,matchOptions:i}=this.u,r=await this.getCacheKey(e,"read"),a=p({},i,{cacheName:n});s=await caches.match(r,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=R(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=r.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const c=await this.R(e);if(!c)return!1;const{cacheName:o,matchOptions:h}=this.u,u=await self.caches.open(o),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=y(e.url,s);if(e.url===i)return t.match(e,n);const r=p({},n,{ignoreSearch:!0}),a=await t.keys(e,r);for(const e of a)if(i===y(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){throw"QuotaExceededError"===t.name&&await async function(){for(const t of g)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:o,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){if(!this.h[e]){let s=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))s=R(await t({mode:e,request:s,event:this.event,params:this.params}));this.h[e]=s}return this.h[e]}hasCallback(t){for(const e of this.u.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.u.plugins)if("function"==typeof e[t]){const s=this.g.get(e),n=n=>{const i=p({},n,{state:s});return e[t](i)};yield n}}waitUntil(t){return this.p.push(t),t}async doneWaiting(){let t;for(;t=this.p.shift();)await t}destroy(){this.l.resolve()}async R(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class q{constructor(t={}){this.cacheName=d(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new v(this,{event:e,request:s,params:n}),r=this.v(i,s,e);return[r,this.q(r,i,s,e)]}async v(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this.U(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async q(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){r=t}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}function U(t){t.then((()=>{}))}class x{constructor(t,e,{onupgradeneeded:s,onversionchange:n}={}){this._=null,this.L=t,this.N=e,this.C=s,this.D=n||(()=>this.close())}get db(){return this._}async open(){if(!this._)return this._=await new Promise(((t,e)=>{let s=!1;setTimeout((()=>{s=!0,e(new Error("The open request was blocked and timed out"))}),this.OPEN_TIMEOUT);const n=indexedDB.open(this.L,this.N);n.onerror=()=>e(n.error),n.onupgradeneeded=t=>{s?(n.transaction.abort(),n.result.close()):"function"==typeof this.C&&this.C(t)},n.onsuccess=()=>{const e=n.result;s?e.close():(e.onversionchange=this.D.bind(this),t(e))}})),this}async getKey(t,e){return(await this.getAllKeys(t,e,1))[0]}async getAll(t,e,s){return await this.getAllMatching(t,{query:e,count:s})}async getAllKeys(t,e,s){return(await this.getAllMatching(t,{query:e,count:s,includeKeys:!0})).map((t=>t.key))}async getAllMatching(t,{index:e,query:s=null,direction:n="next",count:i,includeKeys:r=!1}={}){return await this.transaction([t],"readonly",((a,c)=>{const o=a.objectStore(t),h=e?o.index(e):o,u=[],l=h.openCursor(s,n);l.onsuccess=()=>{const t=l.result;t?(u.push(r?t:t.value),i&&u.length>=i?c(u):t.continue()):c(u)}}))}async transaction(t,e,s){return await this.open(),await new Promise(((n,i)=>{const r=this._.transaction(t,e);r.onabort=()=>i(r.error),r.oncomplete=()=>n(),s(r,(t=>n(t)))}))}async T(t,e,s,...n){return await this.transaction([e],s,((s,i)=>{const r=s.objectStore(e),a=r[t].apply(r,n);a.onsuccess=()=>i(a.result)}))}close(){this._&&(this._.close(),this._=null)}}x.prototype.OPEN_TIMEOUT=2e3;const b={readonly:["get","count","getKey","getAll","getAllKeys"],readwrite:["add","put","clear","delete"]};for(const[t,e]of Object.entries(b))for(const s of e)s in IDBObjectStore.prototype&&(x.prototype[s]=async function(e,...n){return await this.T(s,e,t,...n)});try{self["workbox:expiration:6.1.5"]&&_()}catch(t){}const L="cache-entries",N=t=>{const e=new URL(t,location.href);return e.hash="",e.href};class C{constructor(t){this.P=t,this._=new x("workbox-expiration",1,{onupgradeneeded:t=>this.k(t)})}k(t){const e=t.target.result.createObjectStore(L,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1}),(async t=>{await new Promise(((e,s)=>{const n=indexedDB.deleteDatabase(t);n.onerror=()=>{s(n.error)},n.onblocked=()=>{s(new Error("Delete blocked"))},n.onsuccess=()=>{e()}}))})(this.P)}async setTimestamp(t,e){const s={url:t=N(t),timestamp:e,cacheName:this.P,id:this.K(t)};await this._.put(L,s)}async getTimestamp(t){return(await this._.get(L,this.K(t))).timestamp}async expireEntries(t,e){const s=await this._.transaction(L,"readwrite",((s,n)=>{const i=s.objectStore(L).index("timestamp").openCursor(null,"prev"),r=[];let a=0;i.onsuccess=()=>{const s=i.result;if(s){const n=s.value;n.cacheName===this.P&&(t&&n.timestamp=e?r.push(s.value):a++),s.continue()}else n(r)}})),n=[];for(const t of s)await this._.delete(L,t.id),n.push(t.url);return n}K(t){return this.P+"|"+N(t)}}class E{constructor(t,e={}){this.O=!1,this.W=!1,this.M=e.maxEntries,this.A=e.maxAgeSeconds,this.S=e.matchOptions,this.P=t,this.I=new C(t)}async expireEntries(){if(this.O)return void(this.W=!0);this.O=!0;const t=this.A?Date.now()-1e3*this.A:0,e=await this.I.expireEntries(t,this.M),s=await self.caches.open(this.P);for(const t of e)await s.delete(t,this.S);this.O=!1,this.W&&(this.W=!1,U(this.expireEntries()))}async updateTimestamp(t){await this.I.setTimestamp(t,Date.now())}async isURLExpired(t){if(this.A){return await this.I.getTimestamp(t){e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class k{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=e&&e.cacheKey||this.j.getCacheKeyForURL(t.url);return s?new Request(s):t},this.j=t}}let K,O;async function W(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},a=e?e(r):r,c=function(){if(void 0===K){const t=new Response("");if("body"in t)try{new Response(t.body),K=!0}catch(t){K=!1}K=!1}return K}()?i.body:await i.blob();return new Response(c,a)}class M extends q{constructor(t={}){t.cacheName=w(t.cacheName),super(t),this.F=!1!==t.fallbackToNetwork,this.plugins.push(M.copyRedirectedCacheableResponsesPlugin)}async U(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.B(t,e):await this.H(t,e))}async H(t,e){let n;if(!this.F)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});return n=await e.fetch(t),n}async B(t,e){this.$();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}$(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==M.copyRedirectedCacheableResponsesPlugin&&(n===M.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(M.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}M.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},M.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await W(t):t};class A{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.G=new Map,this.V=new Map,this.J=new Map,this.u=new M({cacheName:w(t),plugins:[...e,new k({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.u}precache(t){this.addToCacheList(t),this.X||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.X=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=T(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.G.has(i)&&this.G.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.G.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.J.has(t)&&this.J.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.J.set(t,n.integrity)}if(this.G.set(i,t),this.V.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return D(t,(async()=>{const e=new P;this.strategy.plugins.push(e);for(const[e,s]of this.G){const n=this.J.get(s),i=this.V.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return D(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.G.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.G}getCachedURLs(){return[...this.G.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.G.get(e.href)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=p({cacheKey:e},s.params),this.strategy.handle(s))}}const S=()=>(O||(O=new A),O);class I extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const t of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(t);if(e)return{cacheKey:e}}}),t.strategy)}}t.CacheFirst=class extends q{async U(t,e){let n,i=await e.cacheMatch(t);if(!i)try{i=await e.fetchAndCachePut(t)}catch(t){n=t}if(!i)throw new s("no-response",{url:t.url,error:n});return i}},t.ExpirationPlugin=class{constructor(t={}){var e;this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const i=this.Y(n),r=this.Z(s);U(r.expireEntries());const a=r.updateTimestamp(e.url);if(t)try{t.waitUntil(a)}catch(t){}return i?n:null},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.Z(t);await s.updateTimestamp(e.url),await s.expireEntries()},this.tt=t,this.A=t.maxAgeSeconds,this.et=new Map,t.purgeOnQuotaError&&(e=()=>this.deleteCacheAndMetadata(),g.add(e))}Z(t){if(t===d())throw new s("expire-custom-caches-only");let e=this.et.get(t);return e||(e=new E(t,this.tt),this.et.set(t,e)),e}Y(t){if(!this.A)return!0;const e=this.st(t);if(null===e)return!0;return e>=Date.now()-1e3*this.A}st(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[t,e]of this.et)await self.caches.delete(t),await e.delete();this.et=new Map}},t.NetworkFirst=class extends q{constructor(t={}){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u),this.nt=t.networkTimeoutSeconds||0}async U(t,e){const n=[],i=[];let r;if(this.nt){const{id:s,promise:a}=this.it({request:t,logs:n,handler:e});r=s,i.push(a)}const a=this.rt({timeoutId:r,request:t,logs:n,handler:e});i.push(a);const c=await e.waitUntil((async()=>await e.waitUntil(Promise.race(i))||await a)());if(!c)throw new s("no-response",{url:t.url});return c}it({request:t,logs:e,handler:s}){let n;return{promise:new Promise((e=>{n=setTimeout((async()=>{e(await s.cacheMatch(t))}),1e3*this.nt)})),id:n}}async rt({timeoutId:t,request:e,logs:s,handler:n}){let i,r;try{r=await n.fetchAndCachePut(e)}catch(t){i=t}return t&&clearTimeout(t),!i&&r||(r=await n.cacheMatch(e)),r}},t.StaleWhileRevalidate=class extends q{constructor(t){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u)}async U(t,e){const n=e.fetchAndCachePut(t).catch((()=>{}));let i,r=await e.cacheMatch(t);if(r);else try{r=await n}catch(t){i=t}if(!r)throw new s("no-response",{url:t.url,error:i});return r}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=w();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.clientsClaim=function(){self.addEventListener("activate",(()=>self.clients.claim()))},t.precacheAndRoute=function(t,e){!function(t){S().precache(t)}(t),function(t){const e=S();h(new I(e,t))}(e)},t.registerRoute=h})); +//# sourceMappingURL=workbox-ea903bce.js.map diff --git a/public/workbox-ea903bce.js.map b/public/workbox-ea903bce.js.map new file mode 100644 index 000000000..d4f418750 --- /dev/null +++ b/public/workbox-ea903bce.js.map @@ -0,0 +1 @@ +{"version":3,"file":"workbox-ea903bce.js","sources":["node_modules/workbox-core/_version.js","node_modules/workbox-core/_private/logger.js","node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-routing/_version.js","node_modules/workbox-routing/utils/constants.js","node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-routing/Route.js","node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-routing/Router.js","node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-routing/registerRoute.js","node_modules/workbox-strategies/_version.js","node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-core/_private/timeout.js","node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-strategies/Strategy.js","node_modules/workbox-core/_private/dontWaitFor.js","node_modules/workbox-core/_private/DBWrapper.js","node_modules/workbox-expiration/_version.js","node_modules/workbox-expiration/models/CacheTimestampsModel.js","node_modules/workbox-core/_private/deleteDatabase.js","node_modules/workbox-expiration/CacheExpiration.js","node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-precaching/_version.js","node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-core/copyResponse.js","node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-strategies/CacheFirst.js","node_modules/workbox-expiration/ExpirationPlugin.js","node_modules/workbox-core/registerQuotaErrorCallback.js","node_modules/workbox-strategies/NetworkFirst.js","node_modules/workbox-strategies/StaleWhileRevalidate.js","node_modules/workbox-precaching/cleanupOutdatedCaches.js","node_modules/workbox-precaching/utils/deleteOutdatedCaches.js","node_modules/workbox-core/clientsClaim.js","node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-precaching/precache.js","node_modules/workbox-precaching/addRoute.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst logger = (process.env.NODE_ENV === 'production' ? null : (() => {\n // Don't overwrite this value if it's already set.\n // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923\n if (!('__WB_DISABLE_DEV_LOGS' in self)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: `#7f8c8d`,\n log: `#2ecc71`,\n warn: `#f39c12`,\n error: `#c0392b`,\n groupCollapsed: `#3498db`,\n groupEnd: null,\n };\n const print = function (method, args) {\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === 'groupCollapsed') {\n // Safari doesn't print all console.groupCollapsed() arguments:\n // https://bugs.webkit.org/show_bug.cgi?id=182754\n if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n `border-radius: 0.5em`,\n `color: white`,\n `font-weight: bold`,\n `padding: 2px 0.5em`,\n ];\n // When in a group, the workbox prefix is not displayed.\n const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];\n console[method](...logPrefix, ...args);\n if (method === 'groupCollapsed') {\n inGroup = true;\n }\n if (method === 'groupEnd') {\n inGroup = false;\n }\n };\n const api = {};\n const loggerMethods = Object.keys(methodToColorMap);\n for (const key of loggerMethods) {\n const method = key;\n api[method] = (...args) => {\n print(method, args);\n };\n }\n return api;\n})());\nexport { logger };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = (process.env.NODE_ENV === 'production') ?\n fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof module:workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {module:workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {module:workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * [Route]{@link module:workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * [See the module docs for info.]{@link https://developers.google.com/web/tools/workbox/modules/workbox-routing}\n *\n * @memberof module:workbox-routing\n * @extends module:workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * [handler's]{@link module:workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if ((url.origin !== location.origin) && (result.index !== 0)) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp}' only partially matched ` +\n `against the cross-origin URL '${url}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a FetchEvent through one or more\n * [Routes]{@link module:workbox-routing.Route} responding with a Request if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof module:workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n if (event.data && event.data.type === 'CACHE_URLS') {\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([\n `Found a route to handle this request:`, route,\n ]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`, params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n err = catchErr;\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do. \n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n params = matchResult;\n if (Array.isArray(matchResult) && matchResult.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if ((matchResult.constructor === Object &&\n Object.keys(matchResult).length === 0)) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {module:workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {module:workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call [registerRoute()]{@link module:workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|module:workbox-routing.Route~matchCallback|module:workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {module:workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {module:workbox-routing.Route} The generated `Route`(Useful for\n * unregistering).\n *\n * @memberof module:workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http') ?\n captureUrl.pathname : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if ((new RegExp(`${wildcards}`)).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if ((url.pathname === captureUrl.pathname) &&\n (url.origin !== captureUrl.origin)) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array} ignoreParams\n * @return {Promise}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = { ...matchOptions, ignoreSearch: true };\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return (typeof input === 'string') ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * [handle()]{@link module:workbox-strategies.Strategy~handle} or\n * [handleAll()]{@link module:workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof module:workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {module:workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * [match callback]{@link module:workbox-routing~matchCallback},\n * (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * [match callback]{@link module:workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof module:workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = await event.preloadResponse;\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail') ?\n request.clone() : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownError: err,\n });\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ?\n undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = { ...matchOptions, ...{ cacheName } };\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse = (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions) :\n null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ?\n responseToCache.clone() : responseToCache);\n }\n catch (error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise}\n */\n async getCacheKey(request, mode) {\n if (!this._cacheKeys[mode]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n params: this.params,\n }));\n }\n this._cacheKeys[mode] = effectiveRequest;\n }\n return this._cacheKeys[mode];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * [`iterateCallbacks()`]{@link module:workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = { ...param, state };\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * [`doneWaiting()`]{@link module:workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * [`waitUntil()`]{@link module:workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while (promise = this._extendLifetimePromises.shift()) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve();\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache = (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof module:workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof module:workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * [route]{@link module:workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to [`handle()`]{@link module:workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of [response, done] promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string' ?\n new Request(options.request) :\n options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n error = waitUntilError;\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the [`handler`]{@link module:workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {module:workbox-strategies.StrategyHandler} handler\n * @return {Promise}\n *\n * @memberof module:workbox-strategies.Strategy\n */\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A helper function that prevents a promise from being flagged as unused.\n *\n * @private\n **/\nexport function dontWaitFor(promise) {\n // Effective no-op.\n promise.then(() => { });\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A class that wraps common IndexedDB functionality in a promise-based API.\n * It exposes all the underlying power and functionality of IndexedDB, but\n * wraps the most commonly used features in a way that's much simpler to use.\n *\n * @private\n */\nexport class DBWrapper {\n /**\n * @param {string} name\n * @param {number} version\n * @param {Object=} [callback]\n * @param {!Function} [callbacks.onupgradeneeded]\n * @param {!Function} [callbacks.onversionchange] Defaults to\n * DBWrapper.prototype._onversionchange when not specified.\n * @private\n */\n constructor(name, version, { onupgradeneeded, onversionchange, } = {}) {\n this._db = null;\n this._name = name;\n this._version = version;\n this._onupgradeneeded = onupgradeneeded;\n this._onversionchange = onversionchange || (() => this.close());\n }\n /**\n * Returns the IDBDatabase instance (not normally needed).\n * @return {IDBDatabase|undefined}\n *\n * @private\n */\n get db() {\n return this._db;\n }\n /**\n * Opens a connected to an IDBDatabase, invokes any onupgradedneeded\n * callback, and added an onversionchange callback to the database.\n *\n * @return {IDBDatabase}\n * @private\n */\n async open() {\n if (this._db)\n return;\n this._db = await new Promise((resolve, reject) => {\n // This flag is flipped to true if the timeout callback runs prior\n // to the request failing or succeeding. Note: we use a timeout instead\n // of an onblocked handler since there are cases where onblocked will\n // never never run. A timeout better handles all possible scenarios:\n // https://github.com/w3c/IndexedDB/issues/223\n let openRequestTimedOut = false;\n setTimeout(() => {\n openRequestTimedOut = true;\n reject(new Error('The open request was blocked and timed out'));\n }, this.OPEN_TIMEOUT);\n const openRequest = indexedDB.open(this._name, this._version);\n openRequest.onerror = () => reject(openRequest.error);\n openRequest.onupgradeneeded = (evt) => {\n if (openRequestTimedOut) {\n openRequest.transaction.abort();\n openRequest.result.close();\n }\n else if (typeof this._onupgradeneeded === 'function') {\n this._onupgradeneeded(evt);\n }\n };\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n if (openRequestTimedOut) {\n db.close();\n }\n else {\n db.onversionchange = this._onversionchange.bind(this);\n resolve(db);\n }\n };\n });\n return this;\n }\n /**\n * Polyfills the native `getKey()` method. Note, this is overridden at\n * runtime if the browser supports the native method.\n *\n * @param {string} storeName\n * @param {*} query\n * @return {Array}\n * @private\n */\n async getKey(storeName, query) {\n return (await this.getAllKeys(storeName, query, 1))[0];\n }\n /**\n * Polyfills the native `getAll()` method. Note, this is overridden at\n * runtime if the browser supports the native method.\n *\n * @param {string} storeName\n * @param {*} query\n * @param {number} count\n * @return {Array}\n * @private\n */\n async getAll(storeName, query, count) {\n return await this.getAllMatching(storeName, { query, count });\n }\n /**\n * Polyfills the native `getAllKeys()` method. Note, this is overridden at\n * runtime if the browser supports the native method.\n *\n * @param {string} storeName\n * @param {*} query\n * @param {number} count\n * @return {Array}\n * @private\n */\n async getAllKeys(storeName, query, count) {\n const entries = await this.getAllMatching(storeName, { query, count, includeKeys: true });\n return entries.map((entry) => entry.key);\n }\n /**\n * Supports flexible lookup in an object store by specifying an index,\n * query, direction, and count. This method returns an array of objects\n * with the signature .\n *\n * @param {string} storeName\n * @param {Object} [opts]\n * @param {string} [opts.index] The index to use (if specified).\n * @param {*} [opts.query]\n * @param {IDBCursorDirection} [opts.direction]\n * @param {number} [opts.count] The max number of results to return.\n * @param {boolean} [opts.includeKeys] When true, the structure of the\n * returned objects is changed from an array of values to an array of\n * objects in the form {key, primaryKey, value}.\n * @return {Array}\n * @private\n */\n async getAllMatching(storeName, { index, query = null, // IE/Edge errors if query === `undefined`.\n direction = 'next', count, includeKeys = false, } = {}) {\n return await this.transaction([storeName], 'readonly', (txn, done) => {\n const store = txn.objectStore(storeName);\n const target = index ? store.index(index) : store;\n const results = [];\n const request = target.openCursor(query, direction);\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n results.push(includeKeys ? cursor : cursor.value);\n if (count && results.length >= count) {\n done(results);\n }\n else {\n cursor.continue();\n }\n }\n else {\n done(results);\n }\n };\n });\n }\n /**\n * Accepts a list of stores, a transaction type, and a callback and\n * performs a transaction. A promise is returned that resolves to whatever\n * value the callback chooses. The callback holds all the transaction logic\n * and is invoked with two arguments:\n * 1. The IDBTransaction object\n * 2. A `done` function, that's used to resolve the promise when\n * when the transaction is done, if passed a value, the promise is\n * resolved to that value.\n *\n * @param {Array} storeNames An array of object store names\n * involved in the transaction.\n * @param {string} type Can be `readonly` or `readwrite`.\n * @param {!Function} callback\n * @return {*} The result of the transaction ran by the callback.\n * @private\n */\n async transaction(storeNames, type, callback) {\n await this.open();\n return await new Promise((resolve, reject) => {\n const txn = this._db.transaction(storeNames, type);\n txn.onabort = () => reject(txn.error);\n txn.oncomplete = () => resolve();\n callback(txn, (value) => resolve(value));\n });\n }\n /**\n * Delegates async to a native IDBObjectStore method.\n *\n * @param {string} method The method name.\n * @param {string} storeName The object store name.\n * @param {string} type Can be `readonly` or `readwrite`.\n * @param {...*} args The list of args to pass to the native method.\n * @return {*} The result of the transaction.\n * @private\n */\n async _call(method, storeName, type, ...args) {\n const callback = (txn, done) => {\n const objStore = txn.objectStore(storeName);\n // TODO(philipwalton): Fix this underlying TS2684 error.\n // @ts-ignore\n const request = objStore[method].apply(objStore, args);\n request.onsuccess = () => done(request.result);\n };\n return await this.transaction([storeName], type, callback);\n }\n /**\n * Closes the connection opened by `DBWrapper.open()`. Generally this method\n * doesn't need to be called since:\n * 1. It's usually better to keep a connection open since opening\n * a new connection is somewhat slow.\n * 2. Connections are automatically closed when the reference is\n * garbage collected.\n * The primary use case for needing to close a connection is when another\n * reference (typically in another tab) needs to upgrade it and would be\n * blocked by the current, open connection.\n *\n * @private\n */\n close() {\n if (this._db) {\n this._db.close();\n this._db = null;\n }\n }\n}\n// Exposed on the prototype to let users modify the default timeout on a\n// per-instance or global basis.\nDBWrapper.prototype.OPEN_TIMEOUT = 2000;\n// Wrap native IDBObjectStore methods according to their mode.\nconst methodsToWrap = {\n readonly: ['get', 'count', 'getKey', 'getAll', 'getAllKeys'],\n readwrite: ['add', 'put', 'clear', 'delete'],\n};\nfor (const [mode, methods] of Object.entries(methodsToWrap)) {\n for (const method of methods) {\n if (method in IDBObjectStore.prototype) {\n // Don't use arrow functions here since we're outside of the class.\n DBWrapper.prototype[method] =\n async function (storeName, ...args) {\n return await this._call(method, storeName, mode, ...args);\n };\n }\n }\n}\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:expiration:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { DBWrapper } from 'workbox-core/_private/DBWrapper.js';\nimport { deleteDatabase } from 'workbox-core/_private/deleteDatabase.js';\nimport '../_version.js';\nconst DB_NAME = 'workbox-expiration';\nconst OBJECT_STORE_NAME = 'cache-entries';\nconst normalizeURL = (unNormalizedUrl) => {\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = '';\n return url.href;\n};\n/**\n * Returns the timestamp model.\n *\n * @private\n */\nclass CacheTimestampsModel {\n /**\n *\n * @param {string} cacheName\n *\n * @private\n */\n constructor(cacheName) {\n this._cacheName = cacheName;\n this._db = new DBWrapper(DB_NAME, 1, {\n onupgradeneeded: (event) => this._handleUpgrade(event),\n });\n }\n /**\n * Should perform an upgrade of indexedDB.\n *\n * @param {Event} event\n *\n * @private\n */\n _handleUpgrade(event) {\n const db = event.target.result;\n // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we\n // have to use the `id` keyPath here and create our own values (a\n // concatenation of `url + cacheName`) instead of simply using\n // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.\n const objStore = db.createObjectStore(OBJECT_STORE_NAME, { keyPath: 'id' });\n // TODO(philipwalton): once we don't have to support EdgeHTML, we can\n // create a single index with the keyPath `['cacheName', 'timestamp']`\n // instead of doing both these indexes.\n objStore.createIndex('cacheName', 'cacheName', { unique: false });\n objStore.createIndex('timestamp', 'timestamp', { unique: false });\n // Previous versions of `workbox-expiration` used `this._cacheName`\n // as the IDBDatabase name.\n deleteDatabase(this._cacheName);\n }\n /**\n * @param {string} url\n * @param {number} timestamp\n *\n * @private\n */\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n url,\n timestamp,\n cacheName: this._cacheName,\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n id: this._getId(url),\n };\n await this._db.put(OBJECT_STORE_NAME, entry);\n }\n /**\n * Returns the timestamp stored for a given URL.\n *\n * @param {string} url\n * @return {number}\n *\n * @private\n */\n async getTimestamp(url) {\n const entry = await this._db.get(OBJECT_STORE_NAME, this._getId(url));\n return entry.timestamp;\n }\n /**\n * Iterates through all the entries in the object store (from newest to\n * oldest) and removes entries once either `maxCount` is reached or the\n * entry's timestamp is less than `minTimestamp`.\n *\n * @param {number} minTimestamp\n * @param {number} maxCount\n * @return {Array}\n *\n * @private\n */\n async expireEntries(minTimestamp, maxCount) {\n const entriesToDelete = await this._db.transaction(OBJECT_STORE_NAME, 'readwrite', (txn, done) => {\n const store = txn.objectStore(OBJECT_STORE_NAME);\n const request = store.index('timestamp').openCursor(null, 'prev');\n const entriesToDelete = [];\n let entriesNotDeletedCount = 0;\n request.onsuccess = () => {\n const cursor = request.result;\n if (cursor) {\n const result = cursor.value;\n // TODO(philipwalton): once we can use a multi-key index, we\n // won't have to check `cacheName` here.\n if (result.cacheName === this._cacheName) {\n // Delete an entry if it's older than the max age or\n // if we already have the max number allowed.\n if ((minTimestamp && result.timestamp < minTimestamp) ||\n (maxCount && entriesNotDeletedCount >= maxCount)) {\n // TODO(philipwalton): we should be able to delete the\n // entry right here, but doing so causes an iteration\n // bug in Safari stable (fixed in TP). Instead we can\n // store the keys of the entries to delete, and then\n // delete the separate transactions.\n // https://github.com/GoogleChrome/workbox/issues/1978\n // cursor.delete();\n // We only need to return the URL, not the whole entry.\n entriesToDelete.push(cursor.value);\n }\n else {\n entriesNotDeletedCount++;\n }\n }\n cursor.continue();\n }\n else {\n done(entriesToDelete);\n }\n };\n });\n // TODO(philipwalton): once the Safari bug in the following issue is fixed,\n // we should be able to remove this loop and do the entry deletion in the\n // cursor loop above:\n // https://github.com/GoogleChrome/workbox/issues/1978\n const urlsDeleted = [];\n for (const entry of entriesToDelete) {\n await this._db.delete(OBJECT_STORE_NAME, entry.id);\n urlsDeleted.push(entry.url);\n }\n return urlsDeleted;\n }\n /**\n * Takes a URL and returns an ID that will be unique in the object store.\n *\n * @param {string} url\n * @return {string}\n *\n * @private\n */\n _getId(url) {\n // Creating an ID from the URL and cache name won't be necessary once\n // Edge switches to Chromium and all browsers we support work with\n // array keyPaths.\n return this._cacheName + '|' + normalizeURL(url);\n }\n}\nexport { CacheTimestampsModel };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Deletes the database.\n * Note: this is exported separately from the DBWrapper module because most\n * usages of IndexedDB in workbox dont need deleting, and this way it can be\n * reused in tests to delete databases without creating DBWrapper instances.\n *\n * @param {string} name The database name.\n * @private\n */\nexport const deleteDatabase = async (name) => {\n await new Promise((resolve, reject) => {\n const request = indexedDB.deleteDatabase(name);\n request.onerror = () => {\n reject(request.error);\n };\n request.onblocked = () => {\n reject(new Error('Delete blocked'));\n };\n request.onsuccess = () => {\n resolve();\n };\n });\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheTimestampsModel } from './models/CacheTimestampsModel.js';\nimport './_version.js';\n/**\n * The `CacheExpiration` class allows you define an expiration and / or\n * limit on the number of responses stored in a\n * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).\n *\n * @memberof module:workbox-expiration\n */\nclass CacheExpiration {\n /**\n * To construct a new CacheExpiration instance you must provide at least\n * one of the `config` properties.\n *\n * @param {string} cacheName Name of the cache to apply restrictions to.\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n */\n constructor(cacheName, config = {}) {\n this._isRunning = false;\n this._rerunRequested = false;\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'cacheName',\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n /**\n * Expires entries for the given cache and given criteria.\n */\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds ?\n Date.now() - (this._maxAgeSeconds * 1000) : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n // Delete URLs from the cache\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired) {\n await cache.delete(url, this._matchOptions);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (urlsExpired.length > 0) {\n logger.groupCollapsed(`Expired ${urlsExpired.length} ` +\n `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` +\n `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` +\n `'${this._cacheName}' cache.`);\n logger.log(`Expired the following ${urlsExpired.length === 1 ?\n 'URL' : 'URLs'}:`);\n urlsExpired.forEach((url) => logger.log(` ${url}`));\n logger.groupEnd();\n }\n else {\n logger.debug(`Cache expiration ran and found no entries to remove.`);\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n dontWaitFor(this.expireEntries());\n }\n }\n /**\n * Update the timestamp for the given URL. This ensures the when\n * removing entries based on maximum entries, most recently used\n * is accurate or when expiring, the timestamp is up-to-date.\n *\n * @param {string} url\n */\n async updateTimestamp(url) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(url, 'string', {\n moduleName: 'workbox-expiration',\n className: 'CacheExpiration',\n funcName: 'updateTimestamp',\n paramName: 'url',\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n /**\n * Can be used to check if a URL has expired or not before it's used.\n *\n * This requires a look up from IndexedDB, so can be slow.\n *\n * Note: This method will not remove the cached entry, call\n * `expireEntries()` to remove indexedDB and Cache entries.\n *\n * @param {string} url\n * @return {boolean}\n */\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (process.env.NODE_ENV !== 'production') {\n throw new WorkboxError(`expired-test-without-max-age`, {\n methodName: 'isURLExpired',\n paramName: 'maxAgeSeconds',\n });\n }\n return false;\n }\n else {\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - (this._maxAgeSeconds * 1000);\n return (timestamp < expireOlderThan);\n }\n }\n /**\n * Removes the IndexedDB object store used to keep track of cache expiration\n * metadata.\n */\n async delete() {\n // Make sure we don't attempt another rerun if we're called in the middle of\n // a cache expiration.\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Infinity); // Expires all.\n }\n}\nexport { CacheExpiration };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.1.5'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n const cacheKey = params && params.cacheKey ||\n this._precacheController.getCacheKeyForURL(request.url);\n return cacheKey ? new Request(cacheKey) : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof module:workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream() ?\n clonedResponse.body : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A [Strategy]{@link module:workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * [PrecacheController]{@link module:workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (!response) {\n // If this is an `install` event then populate the cache. If this is a\n // `fetch` event (or any other event) then respond with the cached\n // response.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n return await this._handleFetch(request, handler);\n }\n return response;\n }\n async _handleFetch(request, handler) {\n let response;\n // Fall back to the network if we don't have a cached response\n // (perhaps due to manual cache cleanup).\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network instead.`);\n }\n response = await handler.fetch(request);\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = handler.params && handler.params.cacheKey ||\n await handler.getCacheKey(request, 'read');\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` +\n getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey.url)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n }\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n }\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof module:workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {module:workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = (typeof entry !== 'string' && entry.revision) ?\n 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n install(event) {\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise}\n */\n activate(event) {\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {module:workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = { cacheKey, ...options.params };\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of [Route]{@link module:workbox-routing.Route} that takes a\n * [PrecacheController]{@link module:workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof module:workbox-precaching\n * @extends module:workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {module:workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n return { cacheKey };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` +\n getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a [cache-first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#cache-falling-back-to-network}\n * request strategy.\n *\n * A cache first strategy is useful for assets that have been revisioned,\n * such as URLs like `/styles/example.a8f5f1.css`, since they\n * can be cached for long periods of time.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-strategies\n */\nclass CacheFirst extends Strategy {\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'makeRequest',\n paramName: 'request',\n });\n }\n let response = await handler.cacheMatch(request);\n let error;\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (err) {\n error = err;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network.`);\n }\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { CacheFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { dontWaitFor } from 'workbox-core/_private/dontWaitFor.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { registerQuotaErrorCallback } from 'workbox-core/registerQuotaErrorCallback.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { CacheExpiration } from './CacheExpiration.js';\nimport './_version.js';\n/**\n * This plugin can be used in a `workbox-strategy` to regularly enforce a\n * limit on the age and / or the number of cached requests.\n *\n * It can only be used with `workbox-strategy` instances that have a\n * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).\n * In other words, it can't be used to expire entries in strategy that uses the\n * default runtime cache name.\n *\n * Whenever a cached request is used or updated, this plugin will look\n * at the associated cache and remove any old or extra requests.\n *\n * When using `maxAgeSeconds`, requests may be used *once* after expiring\n * because the expiration clean up will not have occurred until *after* the\n * cached request has been used. If the request has a \"Date\" header, then\n * a light weight expiration check is performed and the request will not be\n * used immediately.\n *\n * When using `maxEntries`, the entry least-recently requested will be removed\n * from the cache first.\n *\n * @memberof module:workbox-expiration\n */\nclass ExpirationPlugin {\n /**\n * @param {Object} config\n * @param {number} [config.maxEntries] The maximum number of entries to cache.\n * Entries used the least will be removed as the maximum is reached.\n * @param {number} [config.maxAgeSeconds] The maximum age of an entry before\n * it's treated as stale and removed.\n * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)\n * that will be used when calling `delete()` on the cache.\n * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to\n * automatic deletion if the available storage quota has been exceeded.\n */\n constructor(config = {}) {\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when a `Response` is about to be returned\n * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to\n * the handler. It allows the `Response` to be inspected for freshness and\n * prevents it from being used if the `Response`'s `Date` header value is\n * older than the configured `maxAgeSeconds`.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache the response is in.\n * @param {Response} options.cachedResponse The `Response` object that's been\n * read from a cache and whose freshness should be checked.\n * @return {Response} Either the `cachedResponse`, if it's\n * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.\n *\n * @private\n */\n this.cachedResponseWillBeUsed = async ({ event, request, cacheName, cachedResponse }) => {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n // Expire entries to ensure that even if the expiration date has\n // expired, it'll only be used once.\n const cacheExpiration = this._getCacheExpiration(cacheName);\n dontWaitFor(cacheExpiration.expireEntries());\n // Update the metadata for the request URL to the current timestamp,\n // but don't `await` it as we don't want to block the response.\n const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);\n if (event) {\n try {\n event.waitUntil(updateTimestampDone);\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n // The event may not be a fetch event; only log the URL if it is.\n if ('request' in event) {\n logger.warn(`Unable to ensure service worker stays alive when ` +\n `updating cache entry for ` +\n `'${getFriendlyURL(event.request.url)}'.`);\n }\n }\n }\n }\n return isFresh ? cachedResponse : null;\n };\n /**\n * A \"lifecycle\" callback that will be triggered automatically by the\n * `workbox-strategies` handlers when an entry is added to a cache.\n *\n * @param {Object} options\n * @param {string} options.cacheName Name of the cache that was updated.\n * @param {string} options.request The Request for the cached entry.\n *\n * @private\n */\n this.cacheDidUpdate = async ({ cacheName, request }) => {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(cacheName, 'string', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'cacheName',\n });\n assert.isInstance(request, Request, {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'cacheDidUpdate',\n paramName: 'request',\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n };\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new WorkboxError('max-entries-or-age-required', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n });\n }\n if (config.maxEntries) {\n assert.isType(config.maxEntries, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxEntries',\n });\n }\n if (config.maxAgeSeconds) {\n assert.isType(config.maxAgeSeconds, 'number', {\n moduleName: 'workbox-expiration',\n className: 'Plugin',\n funcName: 'constructor',\n paramName: 'config.maxAgeSeconds',\n });\n }\n }\n this._config = config;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._cacheExpirations = new Map();\n if (config.purgeOnQuotaError) {\n registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());\n }\n }\n /**\n * A simple helper method to return a CacheExpiration instance for a given\n * cache name.\n *\n * @param {string} cacheName\n * @return {CacheExpiration}\n *\n * @private\n */\n _getCacheExpiration(cacheName) {\n if (cacheName === cacheNames.getRuntimeName()) {\n throw new WorkboxError('expire-custom-caches-only');\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n /**\n * @param {Response} cachedResponse\n * @return {boolean}\n *\n * @private\n */\n _isResponseDateFresh(cachedResponse) {\n if (!this._maxAgeSeconds) {\n // We aren't expiring by age, so return true, it's fresh\n return true;\n }\n // Check if the 'date' header will suffice a quick expiration check.\n // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for\n // discussion.\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n // Unable to parse date, so assume it's fresh.\n return true;\n }\n // If we have a valid headerTime, then our response is fresh iff the\n // headerTime plus maxAgeSeconds is greater than the current time.\n const now = Date.now();\n return dateHeaderTimestamp >= now - (this._maxAgeSeconds * 1000);\n }\n /**\n * This method will extract the data header and parse it into a useful\n * value.\n *\n * @param {Response} cachedResponse\n * @return {number|null}\n *\n * @private\n */\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has('date')) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get('date');\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n // If the Date header was invalid for some reason, parsedDate.getTime()\n // will return NaN.\n if (isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n /**\n * This is a helper method that performs two operations:\n *\n * - Deletes *all* the underlying Cache instances associated with this plugin\n * instance, by calling caches.delete() on your behalf.\n * - Deletes the metadata from IndexedDB used to keep track of expiration\n * details for each Cache instance.\n *\n * When using cache expiration, calling this method is preferable to calling\n * `caches.delete()` directly, since this will ensure that the IndexedDB\n * metadata is also cleanly removed and open IndexedDB instances are deleted.\n *\n * Note that if you're *not* using cache expiration for a given cache, calling\n * `caches.delete()` and passing in the cache's name should be sufficient.\n * There is no Workbox-specific method needed for cleanup in that case.\n */\n async deleteCacheAndMetadata() {\n // Do this one at a time instead of all at once via `Promise.all()` to\n // reduce the chance of inconsistency if a promise rejects.\n for (const [cacheName, cacheExpiration] of this._cacheExpirations) {\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n // Reset this._cacheExpirations to its initial state.\n this._cacheExpirations = new Map();\n }\n}\nexport { ExpirationPlugin };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from './_private/logger.js';\nimport { assert } from './_private/assert.js';\nimport { quotaErrorCallbacks } from './models/quotaErrorCallbacks.js';\nimport './_version.js';\n/**\n * Adds a function to the set of quotaErrorCallbacks that will be executed if\n * there's a quota error.\n *\n * @param {Function} callback\n * @memberof module:workbox-core\n */\nfunction registerQuotaErrorCallback(callback) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(callback, 'function', {\n moduleName: 'workbox-core',\n funcName: 'register',\n paramName: 'callback',\n });\n }\n quotaErrorCallbacks.add(callback);\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Registered a callback to respond to quota errors.', callback);\n }\n}\nexport { registerQuotaErrorCallback };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#network-falling-back-to-cache}\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-strategies\n */\nclass NetworkFirst extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({ timeoutId, request, logs, handler });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return await handler.waitUntil(Promise.race(promises)) ||\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n await networkPromise;\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} options.event\n * @return {Promise}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await handler.cacheMatch(request));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} options.event\n * @return {Promise}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n error = fetchError;\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` +\n ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\n }\n}\nexport { NetworkFirst };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [stale-while-revalidate]{@link https://developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook/#stale-while-revalidate}\n * request strategy.\n *\n * Resources are requested from both the cache and the network in parallel.\n * The strategy will respond with the cached version if available, otherwise\n * wait for the network response. The cache is updated with the network response\n * with each successful request.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses]{@link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests}.\n * Opaque responses are cross-origin requests where the response doesn't\n * support [CORS]{@link https://enable-cors.org/}.\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends module:workbox-strategies.Strategy\n * @memberof module:workbox-strategies\n */\nclass StaleWhileRevalidate extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * [workbox-core]{@link module:workbox-core.cacheNames}.\n * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n */\n constructor(options) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {module:workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'request',\n });\n }\n const fetchAndCachePromise = handler\n .fetchAndCachePut(request)\n .catch(() => {\n // Swallow this error because a 'no-response' error will be thrown in\n // main handler return flow. This will be in the `waitUntil()` flow.\n });\n let response = await handler.cacheMatch(request);\n let error;\n if (response) {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Found a cached response in the '${this.cacheName}'` +\n ` cache. Will update with the network response in the background.`);\n }\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`No response found in the '${this.cacheName}' cache. ` +\n `Will wait for the network response.`);\n }\n try {\n // NOTE(philipwalton): Really annoying that we have to type cast here.\n // https://github.com/microsoft/TypeScript/issues/20006\n response = await fetchAndCachePromise;\n }\n catch (err) {\n error = err;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url, error });\n }\n return response;\n }\n}\nexport { StaleWhileRevalidate };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { deleteOutdatedCaches } from './utils/deleteOutdatedCaches.js';\nimport './_version.js';\n/**\n * Adds an `activate` event listener which will clean up incompatible\n * precaches that were created by older versions of Workbox.\n *\n * @memberof module:workbox-precaching\n */\nfunction cleanupOutdatedCaches() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('activate', ((event) => {\n const cacheName = cacheNames.getPrecacheName();\n event.waitUntil(deleteOutdatedCaches(cacheName).then((cachesDeleted) => {\n if (process.env.NODE_ENV !== 'production') {\n if (cachesDeleted.length > 0) {\n logger.log(`The following out-of-date precaches were cleaned up ` +\n `automatically:`, cachesDeleted);\n }\n }\n }));\n }));\n}\nexport { cleanupOutdatedCaches };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst SUBSTRING_TO_FIND = '-precache-';\n/**\n * Cleans up incompatible precaches that were created by older versions of\n * Workbox, by a service worker registered under the current scope.\n *\n * This is meant to be called as part of the `activate` event.\n *\n * This should be safe to use as long as you don't include `substringToFind`\n * (defaulting to `-precache-`) in your non-precache cache names.\n *\n * @param {string} currentPrecacheName The cache name currently in use for\n * precaching. This cache won't be deleted.\n * @param {string} [substringToFind='-precache-'] Cache names which include this\n * substring will be deleted (excluding `currentPrecacheName`).\n * @return {Array} A list of all the cache names that were deleted.\n *\n * @private\n * @memberof module:workbox-precaching\n */\nconst deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND) => {\n const cacheNames = await self.caches.keys();\n const cacheNamesToDelete = cacheNames.filter((cacheName) => {\n return cacheName.includes(substringToFind) &&\n cacheName.includes(self.registration.scope) &&\n cacheName !== currentPrecacheName;\n });\n await Promise.all(cacheNamesToDelete.map((cacheName) => self.caches.delete(cacheName)));\n return cacheNamesToDelete;\n};\nexport { deleteOutdatedCaches };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport './_version.js';\n/**\n * Claim any currently available clients once the service worker\n * becomes active. This is normally used in conjunction with `skipWaiting()`.\n *\n * @memberof module:workbox-core\n */\nfunction clientsClaim() {\n self.addEventListener('activate', () => self.clients.claim());\n}\nexport { clientsClaim };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * [precache()]{@link module:workbox-precaching.precache} and\n * [addRoute()]{@link module:workbox-precaching.addRoute} in a single call.\n *\n * @param {Array} entries Array of entries to precache.\n * @param {Object} [options] See\n * [PrecacheRoute options]{@link module:workbox-precaching.PrecacheRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * [\"precache cache\"]{@link module:workbox-core.cacheNames} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * [addRoute()]{@link module:workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}.\n *\n * @param {Array} [entries=[]] Array of entries to precache.\n *\n * @memberof module:workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See\n * [PrecacheRoute options]{@link module:workbox-precaching.PrecacheRoute}.\n *\n * @memberof module:workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n"],"names":["self","_","e","messageGenerator","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","name","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","this","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","routes","matchResult","Array","isArray","Object","keys","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","getOrCreateDefaultRouter","capture","captureUrl","RegExp","moduleName","funcName","paramName","cacheOkAndOpaquePlugin","cacheWillUpdate","response","status","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","userCacheName","stripParams","fullURL","ignoreParams","strippedURL","param","searchParams","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","mode","FetchEvent","preloadResponse","possiblePreloadResponse","originalRequest","hasCallback","clone","cb","iterateCallbacks","thrownError","pluginFilteredRequest","fetchResponse","fetch","fetchOptions","callback","error","runCallbacks","responseClone","cachePut","key","cachedResponse","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheKey","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","state","statefulCallback","statefulParam","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","doneWaiting","waitUntilError","dontWaitFor","DBWrapper","version","onupgradeneeded","onversionchange","_db","_name","_version","_onupgradeneeded","_onversionchange","close","openRequestTimedOut","OPEN_TIMEOUT","openRequest","indexedDB","onerror","evt","transaction","abort","onsuccess","db","bind","storeName","query","getAllKeys","count","getAllMatching","includeKeys","direction","txn","done","store","objectStore","target","results","openCursor","cursor","continue","storeNames","onabort","oncomplete","objStore","apply","prototype","methodsToWrap","readonly","readwrite","methods","entries","IDBObjectStore","_call","OBJECT_STORE_NAME","normalizeURL","unNormalizedUrl","hash","CacheTimestampsModel","_cacheName","_handleUpgrade","createObjectStore","keyPath","createIndex","unique","deleteDatabase","onblocked","timestamp","id","_getId","minTimestamp","maxCount","entriesToDelete","entriesNotDeletedCount","urlsDeleted","CacheExpiration","config","_isRunning","_rerunRequested","_maxEntries","maxEntries","_maxAgeSeconds","maxAgeSeconds","_matchOptions","_timestampModel","Date","now","urlsExpired","expireEntries","setTimestamp","getTimestamp","Infinity","asyncFn","returnPromise","createCacheKey","urlObject","revision","cacheKeyURL","originalURL","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","cachedResponseWillBeUsed","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","supportStatus","copyResponse","modifier","clonedResponse","responseInit","headers","Headers","statusText","modifiedResponseInit","body","testResponse","Response","canConstructResponseFromBodyStream","blob","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","cacheMatch","_handleInstall","_handleFetch","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","defaultPrecacheCacheabilityPlugin","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","integrity","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","urlWithoutIgnoredParams","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","fetchAndCachePut","isFresh","_isResponseDateFresh","cacheExpiration","_getCacheExpiration","updateTimestampDone","updateTimestamp","cacheDidUpdate","_config","_cacheExpirations","purgeOnQuotaError","deleteCacheAndMetadata","add","dateHeaderTimestamp","_getDateHeaderTimestamp","dateHeader","headerTime","getTime","isNaN","p","unshift","_networkTimeoutSeconds","networkTimeoutSeconds","logs","promises","timeoutId","_getTimeoutPromise","networkPromise","_getNetworkPromise","race","fetchError","clearTimeout","fetchAndCachePromise","currentPrecacheName","substringToFind","cacheNamesToDelete","includes","deleteOutdatedCaches","cachesDeleted","clients","claim","addRoute"],"mappings":"qEAEA,IACIA,KAAK,uBAAyBC,IAElC,MAAOC,ICEP,MCgBaC,EAdI,CAACC,KAASC,SACnBC,EAAMF,SACNC,EAAKE,OAAS,IACdD,GAAQ,OAAME,KAAKC,UAAUJ,MAE1BC,GCIX,MAAMI,UAAqBC,MASvBC,YAAYC,EAAWC,SACHX,EAAiBU,EAAWC,SAEvCC,KAAOF,OACPC,QAAUA,GC7BvB,IACId,KAAK,0BAA4BC,IAErC,MAAOC,ICWA,MCAMc,EAAoBC,GACzBA,GAA8B,iBAAZA,EASXA,EAWA,CAAEC,OAAQD,GCjBzB,MAAME,EAYFP,YAAYQ,EAAOH,EAASI,EFhBH,YE8BhBJ,QAAUD,EAAiBC,QAC3BG,MAAQA,OACRC,OAASA,EAOlBC,gBAAgBL,QACPM,aAAeP,EAAiBC,IChC7C,MAAMO,UAAoBL,EActBP,YAAYa,EAAQR,EAASI,UASX,EAAGK,IAAAA,YACPC,EAASF,EAAOG,KAAKF,EAAIG,SAE1BF,IAOAD,EAAII,SAAWC,SAASD,QAA6B,IAAjBH,EAAOK,cAYzCL,EAAOM,MAAM,KAEXhB,EAASI,ICxC9B,MAAMa,EAIFtB,mBACSuB,EAAU,IAAIC,SACdC,EAAqB,IAAID,wBAQvBE,KAAKH,EAMhBI,mBAEIvC,KAAKwC,iBAAiB,SAAWC,UACvBC,QAAEA,GAAYD,EACdE,EAAkBL,KAAKM,cAAc,CAAEF,QAAAA,EAASD,MAAAA,IAClDE,GACAF,EAAMI,YAAYF,MA0B9BG,mBAEI9C,KAAKwC,iBAAiB,WAAaC,OAC3BA,EAAMM,MAA4B,eAApBN,EAAMM,KAAKC,KAAuB,OAC1CC,QAAEA,GAAYR,EAAMM,KAIpBG,EAAkBC,QAAQC,IAAIH,EAAQI,YAAYC,KAAKC,IACpC,iBAAVA,IACPA,EAAQ,CAACA,UAEPb,EAAU,IAAIc,WAAWD,UACxBjB,KAAKM,cAAc,CAAEF,QAAAA,EAASD,MAAAA,QAKzCA,EAAMgB,UAAUP,GAEZT,EAAMiB,OAASjB,EAAMiB,MAAM,IAC3BR,EAAgBS,MAAK,IAAMlB,EAAMiB,MAAM,GAAGE,aAAY,SAiBtEhB,eAAcF,QAAEA,EAAFD,MAAWA,UASff,EAAM,IAAImC,IAAInB,EAAQhB,IAAKK,SAASF,UACrCH,EAAIoC,SAASC,WAAW,qBAMvBC,EAAatC,EAAII,SAAWC,SAASD,QACrCmC,OAAEA,EAAFC,MAAUA,GAAU5B,KAAK6B,kBAAkB,CAC7C1B,MAAAA,EACAC,QAAAA,EACAsB,WAAAA,EACAtC,IAAAA,QAEAT,EAAUiD,GAASA,EAAMjD,cAgBvBI,EAASqB,EAAQrB,WAClBJ,GAAWqB,KAAKD,EAAmB+B,IAAI/C,KAKxCJ,EAAUqB,KAAKD,EAAmBgC,IAAIhD,KAErCJ,aAwBD0B,MAEAA,EAAkB1B,EAAQC,OAAO,CAAEQ,IAAAA,EAAKgB,QAAAA,EAASD,MAAAA,EAAOwB,OAAAA,IAE5D,MAAOK,GACH3B,EAAkBQ,QAAQoB,OAAOD,SAG/B/C,EAAe2C,GAASA,EAAM3C,oBAChCoB,aAA2BQ,UAAYb,KAAKkC,GAAiBjD,KAC7DoB,EAAkBA,EAAgB8B,OAAMC,MAAAA,OAEhCnD,mBAWiBA,EAAaL,OAAO,CAAEQ,IAAAA,EAAKgB,QAAAA,EAASD,MAAAA,EAAOwB,OAAAA,IAE5D,MAAOU,GACHL,EAAMK,KAGVrC,KAAKkC,SAUElC,KAAKkC,EAActD,OAAO,CAAEQ,IAAAA,EAAKgB,QAAAA,EAASD,MAAAA,UAE/C6B,MAGP3B,EAiBXwB,mBAAkBzC,IAAEA,EAAFsC,WAAOA,EAAPtB,QAAmBA,EAAnBD,MAA4BA,UACpCmC,EAAStC,KAAKH,EAAQkC,IAAI3B,EAAQrB,SAAW,OAC9C,MAAM6C,KAASU,EAAQ,KACpBX,QACEY,EAAcX,EAAM9C,MAAM,CAAEM,IAAAA,EAAKsC,WAAAA,EAAYtB,QAAAA,EAASD,MAAAA,OACxDoC,SAWAZ,EAASY,GACLC,MAAMC,QAAQF,IAAuC,IAAvBA,EAAYtE,QAIpCsE,EAAYjE,cAAgBoE,QACE,IAApCA,OAAOC,KAAKJ,GAAatE,QAIG,kBAAhBsE,KAPZZ,OAASiB,GAcN,CAAEhB,MAAAA,EAAOD,OAAAA,SAIjB,GAgBXkB,kBAAkBlE,EAASI,EJlSF,YImShBgB,EAAmB+C,IAAI/D,EAAQL,EAAiBC,IASzDK,gBAAgBL,QACPuD,EAAgBxD,EAAiBC,GAO1CoE,cAAcnB,GAiCL5B,KAAKH,EAAQiC,IAAIF,EAAM7C,cACnBc,EAAQiD,IAAIlB,EAAM7C,OAAQ,SAI9Bc,EAAQkC,IAAIH,EAAM7C,QAAQiE,KAAKpB,GAOxCqB,gBAAgBrB,OACP5B,KAAKH,EAAQiC,IAAIF,EAAM7C,cAClB,IAAIX,EAAa,6CAA8C,CACjEW,OAAQ6C,EAAM7C,eAGhBmE,EAAalD,KAAKH,EAAQkC,IAAIH,EAAM7C,QAAQoE,QAAQvB,QACtDsB,GAAc,SAIR,IAAI9E,EAAa,8CAHlByB,EAAQkC,IAAIH,EAAM7C,QAAQqE,OAAOF,EAAY,IChX9D,IAAIG,EAQG,MAAMC,EAA2B,KAC/BD,IACDA,EAAgB,IAAIzD,EAEpByD,EAAcpD,mBACdoD,EAAc7C,oBAEX6C,GCQX,SAASN,EAAcQ,EAAS5E,EAASI,OACjC6C,KACmB,iBAAZ2B,EAAsB,OACvBC,EAAa,IAAIjC,IAAIgC,EAAS9D,SAASF,MAiC7CqC,EAAQ,IAAI/C,GAZU,EAAGO,IAAAA,KASdA,EAAIG,OAASiE,EAAWjE,MAGFZ,EAASI,QAEzC,GAAIwE,aAAmBE,OAExB7B,EAAQ,IAAI1C,EAAYqE,EAAS5E,EAASI,QAEzC,GAAuB,mBAAZwE,EAEZ3B,EAAQ,IAAI/C,EAAM0E,EAAS5E,EAASI,OAEnC,CAAA,KAAIwE,aAAmB1E,SAIlB,IAAIT,EAAa,yBAA0B,CAC7CsF,WAAY,kBACZC,SAAU,gBACVC,UAAW,YANfhC,EAAQ2B,SASUD,IACRP,cAAcnB,GACrBA,ECxFX,IACIlE,KAAK,6BAA+BC,IAExC,MAAOC,ICGA,MAAMiG,EAAyB,CAWlCC,gBAAiB1B,OAAS2B,SAAAA,KACE,MAApBA,EAASC,QAAsC,IAApBD,EAASC,OAC7BD,EAEJ,MCfTE,EAAoB,CACtBC,gBAAiB,kBACjBC,SAAU,cACVC,OAAQ,UACRC,QAAS,UACTC,OAAgC,oBAAjBC,aAA+BA,aAAaC,MAAQ,IAEjEC,EAAoBC,GACf,CAACT,EAAkBG,OAAQM,EAAWT,EAAkBK,QAC1DK,QAAQC,GAAUA,GAASA,EAAM3G,OAAS,IAC1C4G,KAAK,KAODC,EAWSC,GACPA,GAAiBN,EAAiBR,EAAkBE,UAZtDW,EAiBQC,GACNA,GAAiBN,EAAiBR,EAAkBI,wNCpCnE,SAASW,EAAYC,EAASC,SACpBC,EAAc,IAAI5D,IAAI0D,OACvB,MAAMG,KAASF,EAChBC,EAAYE,aAAaC,OAAOF,UAE7BD,EAAY5F,KCIvB,MAAMgG,EAIFjH,mBACSkH,QAAU,IAAI3E,SAAQ,CAAC4E,EAASxD,UAC5BwD,QAAUA,OACVxD,OAASA,MCd1B,MAAMyD,EAAsB,IAAIC,ICOhC,SAASC,EAAUC,SACU,iBAAVA,EAAsB,IAAI3E,QAAQ2E,GAASA,EAW9D,MAAMC,EAkBFxH,YAAYyH,EAAUC,QACbC,EAAa,GA8ClBvD,OAAOwD,OAAOlG,KAAMgG,QACf7F,MAAQ6F,EAAQ7F,WAChBgG,EAAYJ,OACZK,EAAmB,IAAIb,OACvBc,EAA0B,QAG1BC,EAAW,IAAIP,EAASQ,cACxBC,EAAkB,IAAI1G,QACtB,MAAM2G,KAAUzG,KAAKsG,OACjBE,EAAgB1D,IAAI2D,EAAQ,SAEhCtG,MAAMgB,UAAUnB,KAAKoG,EAAiBZ,qBAenCK,SACF1F,MAAEA,GAAUH,SACdI,EAAUwF,EAAUC,MACH,aAAjBzF,EAAQsG,MACRvG,aAAiBwG,YACjBxG,EAAMyG,gBAAiB,OACjBC,QAAgC1G,EAAMyG,mBACxCC,SAKOA,QAMTC,EAAkB9G,KAAK+G,YAAY,gBACrC3G,EAAQ4G,QAAU,aAEb,MAAMC,KAAMjH,KAAKkH,iBAAiB,oBACnC9G,QAAgB6G,EAAG,CAAE7G,QAASA,EAAQ4G,QAAS7G,MAAAA,IAGvD,MAAO6B,SACG,IAAI5D,EAAa,kCAAmC,CACtD+I,YAAanF,UAMfoF,EAAwBhH,EAAQ4G,gBAE9BK,EAEJA,QAAsBC,MAAMlH,EAA0B,aAAjBA,EAAQsG,UACzC9D,EAAY5C,KAAKmG,EAAUoB,kBAM1B,MAAMC,KAAYxH,KAAKkH,iBAAiB,mBACzCG,QAAsBG,EAAS,CAC3BrH,MAAAA,EACAC,QAASgH,EACTrD,SAAUsD,WAGXA,EAEX,MAAOI,SAOCX,SACM9G,KAAK0H,aAAa,eAAgB,CACpCD,MAAAA,EACAtH,MAAAA,EACA2G,gBAAiBA,EAAgBE,QACjC5G,QAASgH,EAAsBJ,UAGjCS,0BAaS5B,SACb9B,QAAiB/D,KAAKsH,MAAMzB,GAC5B8B,EAAgB5D,EAASiD,oBAC1B7F,UAAUnB,KAAK4H,SAAS/B,EAAO8B,IAC7B5D,mBAcM8D,SACPzH,EAAUwF,EAAUiC,OACtBC,QACEpD,UAAEA,EAAFqD,aAAaA,GAAiB/H,KAAKmG,EACnC6B,QAAyBhI,KAAKiI,YAAY7H,EAAS,QACnD8H,OAAyBH,EAAiB,CAAErD,UAAAA,IAClDoD,QAAuBK,OAAOrJ,MAAMkJ,EAAkBE,OASjD,MAAMV,KAAYxH,KAAKkH,iBAAiB,4BACzCY,QAAwBN,EAAS,CAC7B9C,UAAAA,EACAqD,aAAAA,EACAD,eAAAA,EACA1H,QAAS4H,EACT7H,MAAOH,KAAKG,cACTyC,SAEJkF,iBAiBID,EAAK9D,SACV3D,EAAUwF,EAAUiC,GCtP3B,IAAiBO,QAAAA,EDyPF,ECxPX,IAAIvH,SAAS4E,GAAY4C,WAAW5C,EAAS2C,YDyP1CJ,QAAyBhI,KAAKiI,YAAY7H,EAAS,aASpD2D,QAKK,IAAI3F,EAAa,6BAA8B,CACjDgB,KEhRQA,EFgRY4I,EAAiB5I,IE/QlC,IAAImC,IAAI+G,OAAOlJ,GAAMK,SAASF,MAG/BA,KAAKgJ,QAAQ,IAAI9E,OAAQ,IAAGhE,SAASD,UAAW,OAJ1CJ,IAAAA,QFmRVoJ,QAAwBxI,KAAKyI,EAA2B1E,OACzDyE,SAKM,QAEL9D,UAAEA,EAAFqD,aAAaA,GAAiB/H,KAAKmG,EACnCuC,QAAchL,KAAKyK,OAAOQ,KAAKjE,GAC/BkE,EAAyB5I,KAAK+G,YAAY,kBAC1C8B,EAAcD,QH5Q5BxG,eAAsCsG,EAAOtI,EAAS8E,EAAc6C,SAC1De,EAAqB9D,EAAY5E,EAAQhB,IAAK8F,MAEhD9E,EAAQhB,MAAQ0J,SACTJ,EAAM5J,MAAMsB,EAAS2H,SAG1BgB,OAAmBhB,GAAciB,cAAc,IAC/CC,QAAkBP,EAAM/F,KAAKvC,EAAS2I,OACvC,MAAMG,KAAYD,KAEfH,IADwB9D,EAAYkE,EAAS9J,IAAK8F,UAE3CwD,EAAM5J,MAAMoK,EAAUnB,GGgQkBoB,CAInDT,EAAOV,EAAiBhB,QAAS,CAAC,mBAAoBe,GAClD,eAMMW,EAAMU,IAAIpB,EAAkBY,EAC9BJ,EAAgBxB,QAAUwB,GAElC,MAAOf,QAEgB,uBAAfA,EAAMhJ,YGrStB2D,qBAKS,MAAMoF,KAAY9B,QACb8B,IHgSQ6B,GAEJ5B,MAEL,MAAMD,KAAYxH,KAAKkH,iBAAiB,wBACnCM,EAAS,CACX9C,UAAAA,EACAmE,YAAAA,EACAS,YAAad,EAAgBxB,QAC7B5G,QAAS4H,EACT7H,MAAOH,KAAKG,eAGb,oBAaOC,EAASsG,OAClB1G,KAAKiG,EAAWS,GAAO,KACpBsB,EAAmB5H,MAClB,MAAMoH,KAAYxH,KAAKkH,iBAAiB,sBACzCc,EAAmBpC,QAAgB4B,EAAS,CACxCd,KAAAA,EACAtG,QAAS4H,EACT7H,MAAOH,KAAKG,MACZwB,OAAQ3B,KAAK2B,eAGhBsE,EAAWS,GAAQsB,SAErBhI,KAAKiG,EAAWS,GAS3BK,YAAYtI,OACH,MAAMgI,KAAUzG,KAAKmG,EAAUI,WAC5B9H,KAAQgI,SACD,SAGR,qBAkBQhI,EAAM2G,OAChB,MAAMoC,KAAYxH,KAAKkH,iBAAiBzI,SAGnC+I,EAASpC,qBAYL3G,OACT,MAAMgI,KAAUzG,KAAKmG,EAAUI,WACJ,mBAAjBE,EAAOhI,GAAsB,OAC9B8K,EAAQvJ,KAAKwG,EAAgBzE,IAAI0E,GACjC+C,EAAoBpE,UAChBqE,OAAqBrE,GAAOmE,MAAAA,WAG3B9C,EAAOhI,GAAMgL,UAElBD,GAiBlBrI,UAAUqE,eACDa,EAAwBrD,KAAKwC,GAC3BA,0BAaHA,OACGA,EAAUxF,KAAKqG,EAAwBqD,eACpClE,EAOdmE,eACSvD,EAAiBX,kBAYO1B,OACzByE,EAAkBzE,EAClB6F,GAAc,MACb,MAAMpC,KAAYxH,KAAKkH,iBAAiB,sBACzCsB,QAAyBhB,EAAS,CAC9BpH,QAASJ,KAAKI,QACd2D,SAAUyE,EACVrI,MAAOH,KAAKG,cACTyC,EACPgH,GAAc,GACTpB,eAIJoB,GACGpB,GAA8C,MAA3BA,EAAgBxE,SACnCwE,OAAkB5F,GAmBnB4F,GIhef,MAAMqB,EAuBFvL,YAAY0H,EAAU,SAQbtB,UAAYI,EAA0BkB,EAAQtB,gBAQ9C6B,QAAUP,EAAQO,SAAW,QAQ7BgB,aAAevB,EAAQuB,kBAQvBQ,aAAe/B,EAAQ+B,aAqBhCnJ,OAAOoH,SACI8D,GAAgB9J,KAAK+J,UAAU/D,UAC/B8D,EAwBXC,UAAU/D,GAEFA,aAAmBW,aACnBX,EAAU,CACN7F,MAAO6F,EACP5F,QAAS4F,EAAQ5F,gBAGnBD,EAAQ6F,EAAQ7F,MAChBC,EAAqC,iBAApB4F,EAAQ5F,QAC3B,IAAIc,QAAQ8E,EAAQ5F,SACpB4F,EAAQ5F,QACNuB,EAAS,WAAYqE,EAAUA,EAAQrE,YAASiB,EAChDjE,EAAU,IAAImH,EAAgB9F,KAAM,CAAEG,MAAAA,EAAOC,QAAAA,EAASuB,OAAAA,IACtDmI,EAAe9J,KAAKgK,EAAarL,EAASyB,EAASD,SAGlD,CAAC2J,EAFY9J,KAAKiK,EAAeH,EAAcnL,EAASyB,EAASD,YAIzDxB,EAASyB,EAASD,OAE7B4D,QADEpF,EAAQ+I,aAAa,mBAAoB,CAAEvH,MAAAA,EAAOC,QAAAA,WAGpD2D,QAAiB/D,KAAKkK,EAAQ9J,EAASzB,IAIlCoF,GAA8B,UAAlBA,EAASrD,WAChB,IAAItC,EAAa,cAAe,CAAEgB,IAAKgB,EAAQhB,MAG7D,MAAOqI,OACE,MAAMD,KAAY7I,EAAQuI,iBAAiB,sBAC5CnD,QAAiByD,EAAS,CAAEC,MAAAA,EAAOtH,MAAAA,EAAOC,QAAAA,IACtC2D,YAIHA,QACK0D,MAQT,MAAMD,KAAY7I,EAAQuI,iBAAiB,sBAC5CnD,QAAiByD,EAAS,CAAErH,MAAAA,EAAOC,QAAAA,EAAS2D,SAAAA,WAEzCA,UAEU+F,EAAcnL,EAASyB,EAASD,OAC7C4D,EACA0D,MAEA1D,QAAiB+F,EAErB,MAAOrC,cAMG9I,EAAQ+I,aAAa,oBAAqB,CAC5CvH,MAAAA,EACAC,QAAAA,EACA2D,SAAAA,UAEEpF,EAAQwL,cAElB,MAAOC,GACH3C,EAAQ2C,WAENzL,EAAQ+I,aAAa,qBAAsB,CAC7CvH,MAAAA,EACAC,QAAAA,EACA2D,SAAAA,EACA0D,MAAAA,IAEJ9I,EAAQgL,UACJlC,QACMA,GC9LX,SAAS4C,EAAY7E,GAExBA,EAAQnE,MAAK,SCCV,MAAMiJ,EAUThM,YAAYG,EAAM8L,GAASC,gBAAEA,EAAFC,gBAAmBA,GAAqB,SAC1DC,EAAM,UACNC,EAAQlM,OACRmM,EAAWL,OACXM,EAAmBL,OACnBM,EAAmBL,QAA0BzK,KAAK+K,yBAShD/K,KAAK0K,mBAUR1K,KAAK0K,cAEJA,QAAY,IAAI7J,SAAQ,CAAC4E,EAASxD,SAM/B+I,GAAsB,EAC1B3C,YAAW,KACP2C,GAAsB,EACtB/I,EAAO,IAAI5D,MAAM,iDAClB2B,KAAKiL,oBACFC,EAAcC,UAAUxC,KAAK3I,KAAK2K,EAAO3K,KAAK4K,GACpDM,EAAYE,QAAU,IAAMnJ,EAAOiJ,EAAYzD,OAC/CyD,EAAYV,gBAAmBa,IACvBL,GACAE,EAAYI,YAAYC,QACxBL,EAAY7L,OAAO0L,SAEmB,mBAA1B/K,KAAK6K,QACZA,EAAiBQ,IAG9BH,EAAYM,UAAY,WACdC,EAAKP,EAAY7L,OACnB2L,EACAS,EAAGV,SAGHU,EAAGhB,gBAAkBzK,KAAK8K,EAAiBY,KAAK1L,MAChDyF,EAAQgG,QAIbzL,kBAWE2L,EAAWC,gBACN5L,KAAK6L,WAAWF,EAAWC,EAAO,IAAI,gBAY3CD,EAAWC,EAAOE,gBACd9L,KAAK+L,eAAeJ,EAAW,CAAEC,MAAAA,EAAOE,MAAAA,qBAYxCH,EAAWC,EAAOE,gBACT9L,KAAK+L,eAAeJ,EAAW,CAAEC,MAAAA,EAAOE,MAAAA,EAAOE,aAAa,KACnEhL,KAAKC,GAAUA,EAAM4G,2BAmBnB8D,GAAWjM,MAAEA,EAAFkM,MAASA,EAAQ,KAAjBK,UAChCA,EAAY,OADoBH,MACZA,EADYE,YACLA,GAAc,GAAW,iBACnChM,KAAKsL,YAAY,CAACK,GAAY,YAAY,CAACO,EAAKC,WACnDC,EAAQF,EAAIG,YAAYV,GACxBW,EAAS5M,EAAQ0M,EAAM1M,MAAMA,GAAS0M,EACtCG,EAAU,GACVnM,EAAUkM,EAAOE,WAAWZ,EAAOK,GACzC7L,EAAQoL,UAAY,WACViB,EAASrM,EAAQf,OACnBoN,GACAF,EAAQvJ,KAAKgJ,EAAcS,EAASA,EAAO7H,OACvCkH,GAASS,EAAQtO,QAAU6N,EAC3BK,EAAKI,GAGLE,EAAOC,YAIXP,EAAKI,yBAsBHI,EAAYjM,EAAM8G,gBAC1BxH,KAAK2I,aACE,IAAI9H,SAAQ,CAAC4E,EAASxD,WACzBiK,EAAMlM,KAAK0K,EAAIY,YAAYqB,EAAYjM,GAC7CwL,EAAIU,QAAU,IAAM3K,EAAOiK,EAAIzE,OAC/ByE,EAAIW,WAAa,IAAMpH,IACvB+B,EAAS0E,GAAMtH,GAAUa,EAAQb,gBAa7B7F,EAAQ4M,EAAWjL,KAAS3C,gBAQvBiC,KAAKsL,YAAY,CAACK,GAAYjL,GAP1B,CAACwL,EAAKC,WACbW,EAAWZ,EAAIG,YAAYV,GAG3BvL,EAAU0M,EAAS/N,GAAQgO,MAAMD,EAAU/O,GACjDqC,EAAQoL,UAAY,IAAMW,EAAK/L,EAAQf,WAiB/C0L,QACQ/K,KAAK0K,SACAA,EAAIK,aACJL,EAAM,OAMvBJ,EAAU0C,UAAU/B,aAAe,IAEnC,MAAMgC,EAAgB,CAClBC,SAAU,CAAC,MAAO,QAAS,SAAU,SAAU,cAC/CC,UAAW,CAAC,MAAO,MAAO,QAAS,WAEvC,IAAK,MAAOzG,EAAM0G,KAAY1K,OAAO2K,QAAQJ,OACpC,MAAMlO,KAAUqO,EACbrO,KAAUuO,eAAeN,YAEzB1C,EAAU0C,UAAUjO,GAChBqD,eAAgBuJ,KAAc5N,gBACbiC,KAAKuN,EAAMxO,EAAQ4M,EAAWjF,KAAS3I,KCpPxE,IACIL,KAAK,6BAA+BC,IAExC,MAAOC,ICKP,MACM4P,EAAoB,gBACpBC,EAAgBC,UACZtO,EAAM,IAAImC,IAAImM,EAAiBjO,SAASF,aAC9CH,EAAIuO,KAAO,GACJvO,EAAIG,MAOf,MAAMqO,EAOFtP,YAAYoG,QACHmJ,EAAanJ,OACbgG,EAAM,IAAIJ,EArBP,qBAqB0B,EAAG,CACjCE,gBAAkBrK,GAAUH,KAAK8N,EAAe3N,KAUxD2N,EAAe3N,SAML2M,EALK3M,EAAMmM,OAAOjN,OAKJ0O,kBAAkBP,EAAmB,CAAEQ,QAAS,OAIpElB,EAASmB,YAAY,YAAa,YAAa,CAAEC,QAAQ,IACzDpB,EAASmB,YAAY,YAAa,YAAa,CAAEC,QAAQ,ICpCnC9L,OAAAA,UACpB,IAAIvB,SAAQ,CAAC4E,EAASxD,WAClB7B,EAAU+K,UAAUgD,eAAe1P,GACzC2B,EAAQgL,QAAU,KACdnJ,EAAO7B,EAAQqH,QAEnBrH,EAAQgO,UAAY,KAChBnM,EAAO,IAAI5D,MAAM,oBAErB+B,EAAQoL,UAAY,KAChB/F,SD6BJ0I,CAAenO,KAAK6N,sBAQLzO,EAAKiP,SAEdpN,EAAQ,CACV7B,IAFJA,EAAMqO,EAAarO,GAGfiP,UAAAA,EACA3J,UAAW1E,KAAK6N,EAIhBS,GAAItO,KAAKuO,EAAOnP,UAEdY,KAAK0K,EAAItB,IAAIoE,EAAmBvM,sBAUvB7B,gBACKY,KAAK0K,EAAI3I,IAAIyL,EAAmBxN,KAAKuO,EAAOnP,KACnDiP,8BAaGG,EAAcC,SACxBC,QAAwB1O,KAAK0K,EAAIY,YAAYkC,EAAmB,aAAa,CAACtB,EAAKC,WAE/E/L,EADQ8L,EAAIG,YAAYmB,GACR9N,MAAM,aAAa8M,WAAW,KAAM,QACpDkC,EAAkB,OACpBC,EAAyB,EAC7BvO,EAAQoL,UAAY,WACViB,EAASrM,EAAQf,UACnBoN,EAAQ,OACFpN,EAASoN,EAAO7H,MAGlBvF,EAAOqF,YAAc1E,KAAK6N,IAGrBW,GAAgBnP,EAAOgP,UAAYG,GACnCC,GAAYE,GAA0BF,EASvCC,EAAgB1L,KAAKyJ,EAAO7H,OAG5B+J,KAGRlC,EAAOC,gBAGPP,EAAKuC,OAQXE,EAAc,OACf,MAAM3N,KAASyN,QACV1O,KAAK0K,EAAIpF,OAAOkI,EAAmBvM,EAAMqN,IAC/CM,EAAY5L,KAAK/B,EAAM7B,YAEpBwP,EAUXL,EAAOnP,UAIIY,KAAK6N,EAAa,IAAMJ,EAAarO,IE7IpD,MAAMyP,EAcFvQ,YAAYoG,EAAWoK,EAAS,SACvBC,GAAa,OACbC,GAAkB,OAgClBC,EAAcH,EAAOI,gBACrBC,EAAiBL,EAAOM,mBACxBC,EAAgBP,EAAO/G,kBACvB8F,EAAanJ,OACb4K,EAAkB,IAAI1B,EAAqBlJ,4BAM5C1E,KAAK+O,mBACAC,GAAkB,QAGtBD,GAAa,QACZP,EAAexO,KAAKmP,EACtBI,KAAKC,MAA+B,IAAtBxP,KAAKmP,EAAyB,EAC1CM,QAAoBzP,KAAKsP,EAAgBI,cAAclB,EAAcxO,KAAKiP,GAE1EvG,QAAchL,KAAKyK,OAAOQ,KAAK3I,KAAK6N,OACrC,MAAMzO,KAAOqQ,QACR/G,EAAMpD,OAAOlG,EAAKY,KAAKqP,QAiB5BN,GAAa,EACd/O,KAAKgP,SACAA,GAAkB,EACvB3E,EAAYrK,KAAK0P,wCAUHtQ,SASZY,KAAKsP,EAAgBK,aAAavQ,EAAKmQ,KAAKC,0BAanCpQ,MACVY,KAAKmP,EASL,cACuBnP,KAAKsP,EAAgBM,aAAaxQ,GAClCmQ,KAAKC,MAA+B,IAAtBxP,KAAKmP,SAJpC,sBAeNH,GAAkB,QACjBhP,KAAKsP,EAAgBI,cAAcG,EAAAA,ICrJjD,SAAS1O,EAAUhB,EAAO2P,SAChBC,EAAgBD,WACtB3P,EAAMgB,UAAU4O,GACTA,ECjBX,IACIrS,KAAK,6BAA+BC,IAExC,MAAOC,ICeA,SAASoS,EAAe/O,OACtBA,QACK,IAAI7C,EAAa,oCAAqC,CAAE6C,MAAAA,OAI7C,iBAAVA,EAAoB,OACrBgP,EAAY,IAAI1O,IAAIN,EAAOxB,SAASF,YACnC,CACH2J,SAAU+G,EAAU1Q,KACpBH,IAAK6Q,EAAU1Q,YAGjB2Q,SAAEA,EAAF9Q,IAAYA,GAAQ6B,MACrB7B,QACK,IAAIhB,EAAa,oCAAqC,CAAE6C,MAAAA,QAI7DiP,EAAU,OACLD,EAAY,IAAI1O,IAAInC,EAAKK,SAASF,YACjC,CACH2J,SAAU+G,EAAU1Q,KACpBH,IAAK6Q,EAAU1Q,YAKjB4Q,EAAc,IAAI5O,IAAInC,EAAKK,SAASF,MACpC6Q,EAAc,IAAI7O,IAAInC,EAAKK,SAASF,aAC1C4Q,EAAY9K,aAAavC,IAxCC,kBAwC0BoN,GAC7C,CACHhH,SAAUiH,EAAY5Q,KACtBH,IAAKgR,EAAY7Q,MCvCzB,MAAM8Q,EACF/R,mBACSgS,YAAc,QACdC,eAAiB,QACjBC,iBAAmBpO,OAAShC,QAAAA,EAASmJ,MAAAA,MAElCA,IACAA,EAAMzC,gBAAkB1G,SAG3BqQ,yBAA2BrO,OAASjC,MAAAA,EAAOoJ,MAAAA,EAAOzB,eAAAA,SAChC,YAAf3H,EAAMO,KAAoB,OAEpBtB,EAAMmK,EAAMzC,gBAAgB1H,IAC9B0I,OACKyI,eAAevN,KAAK5D,QAGpBkR,YAAYtN,KAAK5D,UAGvB0I,ICrBnB,MAAM4I,EACFpS,aAAYqS,mBAAEA,SACLC,mBAAqBxO,OAAShC,QAAAA,EAASuB,OAAAA,YAClCuH,EAAWvH,GAAUA,EAAOuH,UAC9BlJ,KAAK6Q,EAAoBC,kBAAkB1Q,EAAQhB,YAChD8J,EAAW,IAAIhI,QAAQgI,GAAY9I,QAEzCyQ,EAAsBF,GCbnC,IAAII,ECCAJ,ECoBJvO,eAAe4O,EAAajN,EAAUkN,OAC9BzR,EAAS,QAETuE,EAAS3E,IAAK,CAEdI,EADoB,IAAI+B,IAAIwC,EAAS3E,KAChBI,UAErBA,IAAW9B,KAAK+B,SAASD,aACnB,IAAIpB,EAAa,6BAA8B,CAAEoB,OAAAA,UAErD0R,EAAiBnN,EAASiD,QAE1BmK,EAAe,CACjBC,QAAS,IAAIC,QAAQH,EAAeE,SACpCpN,OAAQkN,EAAelN,OACvBsN,WAAYJ,EAAeI,YAGzBC,EAAuBN,EAAWA,EAASE,GAAgBA,EAI3DK,EFjCV,mBAC0B5O,IAAlBmO,EAA6B,OACvBU,EAAe,IAAIC,SAAS,OAC9B,SAAUD,UAEFC,SAASD,EAAaD,MAC1BT,GAAgB,EAEpB,MAAOtJ,GACHsJ,GAAgB,EAGxBA,GAAgB,SAEbA,EEmBMY,GACTT,EAAeM,WAAaN,EAAeU,cACxC,IAAIF,SAASF,EAAMD,GC3B9B,MAAMM,UAAyBhI,EAkB3BvL,YAAY0H,EAAU,IAClBA,EAAQtB,UAAYI,EAA2BkB,EAAQtB,iBACjDsB,QACD8L,GAAmD,IAA9B9L,EAAQ+L,uBAK7BxL,QAAQvD,KAAK6O,EAAiBG,gDASzB5R,EAASzB,SACboF,QAAiBpF,EAAQsT,WAAW7R,UACrC2D,IAIGpF,EAAQwB,OAAgC,YAAvBxB,EAAQwB,MAAMO,WAClBV,KAAKkS,EAAe9R,EAASzB,SAEjCqB,KAAKmS,EAAa/R,EAASzB,YAI7ByB,EAASzB,OACpBoF,MAGA/D,KAAK8R,QAWC,IAAI1T,EAAa,yBAA0B,CAC7CsG,UAAW1E,KAAK0E,UAChBtF,IAAKgB,EAAQhB,aAPjB2E,QAAiBpF,EAAQ2I,MAAMlH,GA0B5B2D,UAEU3D,EAASzB,QACrByT,UACCrO,QAAiBpF,EAAQ2I,MAAMlH,aAGbzB,EAAQiJ,SAASxH,EAAS2D,EAASiD,eAIjD,IAAI5I,EAAa,0BAA2B,CAC9CgB,IAAKgB,EAAQhB,IACb4E,OAAQD,EAASC,gBAGlBD,EA6BXqO,QACQC,EAAqB,KACrBC,EAA6B,MAC5B,MAAO5S,EAAO+G,KAAWzG,KAAKuG,QAAQ8G,UAEnC5G,IAAWoL,EAAiBG,yCAI5BvL,IAAWoL,EAAiBU,oCAC5BF,EAAqB3S,GAErB+G,EAAO3C,iBACPwO,KAG2B,IAA/BA,OACK/L,QAAQvD,KAAK6O,EAAiBU,mCAE9BD,EAA6B,GAA4B,OAAvBD,QAElC9L,QAAQnD,OAAOiP,EAAoB,IAKpDR,EAAiBU,kCAAoC,iBACjD,OAAsBxO,SAAEA,MACfA,GAAYA,EAASC,QAAU,IACzB,KAEJD,GAGf8N,EAAiBG,uCAAyC,iBACtD,OAAsBjO,SAAEA,KACbA,EAASyO,iBAAmBxB,EAAajN,GAAYA,GCvKpE,MAAM0O,EAWFnU,aAAYoG,UAAEA,EAAF6B,QAAaA,EAAU,GAAvBwL,kBAA2BA,GAAoB,GAAS,SAC3DW,EAAmB,IAAI5S,SACvB6S,EAAoB,IAAI7S,SACxB8S,EAA0B,IAAI9S,SAC9BqG,EAAY,IAAI0L,EAAiB,CAClCnN,UAAWI,EAA2BJ,GACtC6B,QAAS,IACFA,EACH,IAAImK,EAAuB,CAAEC,mBAAoB3Q,QAErD+R,kBAAAA,SAGCc,QAAU7S,KAAK6S,QAAQnH,KAAK1L,WAC5B8S,SAAW9S,KAAK8S,SAASpH,KAAK1L,4BAO5BA,KAAKmG,EAYhBhC,SAASkJ,QACA0F,eAAe1F,GACfrN,KAAKgT,IACNtV,KAAKwC,iBAAiB,UAAWF,KAAK6S,SACtCnV,KAAKwC,iBAAiB,WAAYF,KAAK8S,eAClCE,GAAkC,GAU/CD,eAAe1F,SASL4F,EAAkB,OACnB,MAAMhS,KAASoM,EAAS,CAEJ,iBAAVpM,EACPgS,EAAgBjQ,KAAK/B,GAEhBA,QAA4B2B,IAAnB3B,EAAMiP,UACpB+C,EAAgBjQ,KAAK/B,EAAM7B,WAEzB8J,SAAEA,EAAF9J,IAAYA,GAAQ4Q,EAAe/O,GACnCiS,EAA8B,iBAAVjS,GAAsBA,EAAMiP,SAClD,SAAW,aACXlQ,KAAK0S,EAAiB5Q,IAAI1C,IAC1BY,KAAK0S,EAAiB3Q,IAAI3C,KAAS8J,QAC7B,IAAI9K,EAAa,wCAAyC,CAC5D+U,WAAYnT,KAAK0S,EAAiB3Q,IAAI3C,GACtCgU,YAAalK,OAGA,iBAAVjI,GAAsBA,EAAMoS,UAAW,IAC1CrT,KAAK4S,EAAwB9Q,IAAIoH,IACjClJ,KAAK4S,EAAwB7Q,IAAImH,KAAcjI,EAAMoS,gBAC/C,IAAIjV,EAAa,4CAA6C,CAChEgB,IAAAA,SAGHwT,EAAwB9P,IAAIoG,EAAUjI,EAAMoS,mBAEhDX,EAAiB5P,IAAI1D,EAAK8J,QAC1ByJ,EAAkB7P,IAAI1D,EAAK8T,GAC5BD,EAAgBhV,OAAS,EAAG,OACtBqV,EACD,qDAAQL,EAAgBpO,KAAK,8EAK9B0O,QAAQC,KAAKF,KAkB7BT,QAAQ1S,UACGgB,EAAUhB,GAAOiC,gBACdqR,EAAsB,IAAIpD,OAC3BtK,SAASQ,QAAQvD,KAAKyQ,OAGtB,MAAOrU,EAAK8J,KAAalJ,KAAK0S,EAAkB,OAC3CW,EAAYrT,KAAK4S,EAAwB7Q,IAAImH,GAC7CgK,EAAYlT,KAAK2S,EAAkB5Q,IAAI3C,GACvCgB,EAAU,IAAIc,QAAQ9B,EAAK,CAC7BiU,UAAAA,EACA3K,MAAOwK,EACPQ,YAAa,sBAEX7S,QAAQC,IAAId,KAAK+F,SAASgE,UAAU,CACtCpI,OAAQ,CAAEuH,SAAAA,GACV9I,QAAAA,EACAD,MAAAA,WAGFmQ,YAAEA,EAAFC,eAAeA,GAAmBkD,QAIjC,CAAEnD,YAAAA,EAAaC,eAAAA,MAa9BuC,SAAS3S,UACEgB,EAAUhB,GAAOiC,gBACdsG,QAAchL,KAAKyK,OAAOQ,KAAK3I,KAAK+F,SAASrB,WAC7CiP,QAAgCjL,EAAM/F,OACtCiR,EAAoB,IAAIjO,IAAI3F,KAAK0S,EAAiBmB,UAClDC,EAAc,OACf,MAAM1T,KAAWuT,EACbC,EAAkB9R,IAAI1B,EAAQhB,aACzBsJ,EAAMpD,OAAOlF,GACnB0T,EAAY9Q,KAAK5C,EAAQhB,YAM1B,CAAE0U,YAAAA,MASjBC,4BACW/T,KAAK0S,EAQhBsB,sBACW,IAAIhU,KAAK0S,EAAiB/P,QAWrCmO,kBAAkB1R,SACR6Q,EAAY,IAAI1O,IAAInC,EAAKK,SAASF,aACjCS,KAAK0S,EAAiB3Q,IAAIkO,EAAU1Q,0BAoB3Ba,SACVhB,EAAMgB,aAAmBc,QAAUd,EAAQhB,IAAMgB,EACjD8I,EAAWlJ,KAAK8Q,kBAAkB1R,MACpC8J,EAAU,cACUxL,KAAKyK,OAAOQ,KAAK3I,KAAK+F,SAASrB,YACtC5F,MAAMoK,IAY3B+K,wBAAwB7U,SACd8J,EAAWlJ,KAAK8Q,kBAAkB1R,OACnC8J,QACK,IAAI9K,EAAa,oBAAqB,CAAEgB,IAAAA,WAE1C4G,IACJA,EAAQ5F,QAAU,IAAIc,QAAQ9B,GAC9B4G,EAAQrE,UAAWuH,SAAAA,GAAalD,EAAQrE,QACjC3B,KAAK+F,SAASnH,OAAOoH,KHtQjC,MAAMkO,EAAgC,KACpCvD,IACDA,EAAqB,IAAI8B,GAEtB9B,GIGX,MAAMwD,UAAsBtV,EAiBxBP,YAAYqS,EAAoB3K,UACd,EAAG5F,QAAAA,YACPgU,EAAkBzD,EAAmBoD,yBACtC,MAAMM,KCtBhB,UAAgCjV,GAAKkV,4BAAEA,EAA8B,CAAC,QAAS,YAA1CC,eAAuDA,EAAiB,aAAxEC,UAAsFA,GAAY,EAAlGC,gBAAwGA,GAAqB,UAC/JxE,EAAY,IAAI1O,IAAInC,EAAKK,SAASF,MACxC0Q,EAAUtC,KAAO,SACXsC,EAAU1Q,WACVmV,ECHH,SAAmCzE,EAAWqE,EAA8B,QAG1E,MAAM1Q,IAAa,IAAIqM,EAAU5K,aAAa1C,QAC3C2R,EAA4BK,MAAMxV,GAAWA,EAAOyV,KAAKhR,MACzDqM,EAAU5K,aAAaC,OAAO1B,UAG/BqM,EDLyB4E,CAA0B5E,EAAWqE,YAC/DI,EAAwBnV,KAC1BgV,GAAkBG,EAAwBI,SAASC,SAAS,KAAM,OAC5DC,EAAe,IAAIzT,IAAImT,EAAwBnV,MACrDyV,EAAaF,UAAYP,QACnBS,EAAazV,QAEnBiV,EAAW,OACLS,EAAW,IAAI1T,IAAImT,EAAwBnV,MACjD0V,EAASH,UAAY,cACfG,EAAS1V,QAEfkV,EAAiB,OACXS,EAAiBT,EAAgB,CAAErV,IAAK6Q,QACzC,MAAMkF,KAAgBD,QACjBC,EAAa5V,MDGO6V,CAAsBhV,EAAQhB,IAAK4G,GAAU,OAC7DkD,EAAWkL,EAAgBrS,IAAIsS,MACjCnL,QACO,CAAEA,SAAAA,MASRyH,EAAmB5K,wBG1BxC,cAAyB8D,UAQPzJ,EAASzB,OAWf8I,EADA1D,QAAiBpF,EAAQsT,WAAW7R,OAEnC2D,MAMGA,QAAiBpF,EAAQ0W,iBAAiBjV,GAE9C,MAAO4B,GACHyF,EAAQzF,MAwBX+B,QACK,IAAI3F,EAAa,cAAe,CAAEgB,IAAKgB,EAAQhB,IAAKqI,MAAAA,WAEvD1D,uBC5Cf,MAYIzF,YAAYwQ,EAAS,ICjCzB,IAAoCtH,ODmDvBiJ,yBAA2BrO,OAASjC,MAAAA,EAAOC,QAAAA,EAASsE,UAAAA,EAAWoD,eAAAA,UAC3DA,SACM,WAELwN,EAAUtV,KAAKuV,EAAqBzN,GAGpC0N,EAAkBxV,KAAKyV,EAAoB/Q,GACjD2F,EAAYmL,EAAgB9F,uBAGtBgG,EAAsBF,EAAgBG,gBAAgBvV,EAAQhB,QAChEe,MAEIA,EAAMgB,UAAUuU,GAEpB,MAAOjO,WAWJ6N,EAAUxN,EAAiB,WAYjC8N,eAAiBxT,OAASsC,UAAAA,EAAWtE,QAAAA,YAehCoV,EAAkBxV,KAAKyV,EAAoB/Q,SAC3C8Q,EAAgBG,gBAAgBvV,EAAQhB,WACxCoW,EAAgB9F,sBA2BrBmG,GAAU/G,OACVK,EAAiBL,EAAOM,mBACxB0G,GAAoB,IAAIhW,IACzBgP,EAAOiH,oBCzIiBvO,ED0IG,IAAMxH,KAAKgW,yBClI9CtQ,EAAoBuQ,IAAIzO,ID8IxBiO,EAAoB/Q,MACZA,IAAcI,UACR,IAAI1G,EAAa,iCAEvBoX,EAAkBxV,KAAK8V,GAAkB/T,IAAI2C,UAC5C8Q,IACDA,EAAkB,IAAI3G,EAAgBnK,EAAW1E,KAAK6V,SACjDC,GAAkBhT,IAAI4B,EAAW8Q,IAEnCA,EAQXD,EAAqBzN,OACZ9H,KAAKmP,SAEC,QAKL+G,EAAsBlW,KAAKmW,GAAwBrO,MAC7B,OAAxBoO,SAEO,SAKJA,GADK3G,KAAKC,MAC0C,IAAtBxP,KAAKmP,EAW9CgH,GAAwBrO,OACfA,EAAesJ,QAAQtP,IAAI,eACrB,WAELsU,EAAatO,EAAesJ,QAAQrP,IAAI,QAExCsU,EADa,IAAI9G,KAAK6G,GACEE,iBAG1BC,MAAMF,GACC,KAEJA,qCAqBF,MAAO3R,EAAW8Q,KAAoBxV,KAAK8V,SACtCpY,KAAKyK,OAAO7C,OAAOZ,SACnB8Q,EAAgBlQ,cAGrBwQ,GAAoB,IAAIhW,qBE5NrC,cAA2B+J,EAoBvBvL,YAAY0H,EAAU,UACZA,GAGDhG,KAAKuG,QAAQoO,MAAM6B,GAAM,oBAAqBA,UAC1CjQ,QAAQkQ,QAAQ5S,QAEpB6S,GAAyB1Q,EAAQ2Q,uBAAyB,UAmBrDvW,EAASzB,SACbiY,EAAO,GASPC,EAAW,OACbC,KACA9W,KAAK0W,GAAwB,OACvBpI,GAAEA,EAAF9I,QAAMA,GAAYxF,KAAK+W,GAAmB,CAAE3W,QAAAA,EAASwW,KAAAA,EAAMjY,QAAAA,IACjEmY,EAAYxI,EACZuI,EAAS7T,KAAKwC,SAEZwR,EAAiBhX,KAAKiX,GAAmB,CAAEH,UAAAA,EAAW1W,QAAAA,EAASwW,KAAAA,EAAMjY,QAAAA,IAC3EkY,EAAS7T,KAAKgU,SACRjT,QAAiBpF,EAAQwC,UAAU,gBAExBxC,EAAQwC,UAAUN,QAAQqW,KAAKL,WAMlCG,EAR2B,QAkBpCjT,QACK,IAAI3F,EAAa,cAAe,CAAEgB,IAAKgB,EAAQhB,aAElD2E,EAWXgT,IAAmB3W,QAAEA,EAAFwW,KAAWA,EAAXjY,QAAiBA,QAC5BmY,QAWG,CACHtR,QAXmB,IAAI3E,SAAS4E,IAQhCqR,EAAYzO,YAPajG,UAKrBqD,QAAc9G,EAAQsT,WAAW7R,MAEkC,IAA9BJ,KAAK0W,OAI9CpI,GAAIwI,aAaaA,UAAEA,EAAF1W,QAAaA,EAAbwW,KAAsBA,EAAtBjY,QAA4BA,QAC7C8I,EACA1D,MAEAA,QAAiBpF,EAAQ0W,iBAAiBjV,GAE9C,MAAO+W,GACH1P,EAAQ0P,SAERL,GACAM,aAAaN,IAWbrP,GAAU1D,IACVA,QAAiBpF,EAAQsT,WAAW7R,IAWjC2D,2BCxJf,cAAmC8F,EAc/BvL,YAAY0H,SACFA,GAGDhG,KAAKuG,QAAQoO,MAAM6B,GAAM,oBAAqBA,UAC1CjQ,QAAQkQ,QAAQ5S,WAUfzD,EAASzB,SAUb0Y,EAAuB1Y,EACxB0W,iBAAiBjV,GACjB+B,OAAM,aAKPsF,EADA1D,QAAiBpF,EAAQsT,WAAW7R,MAEpC2D,YAcIA,QAAiBsT,EAErB,MAAOrV,GACHyF,EAAQzF,MAWX+B,QACK,IAAI3F,EAAa,cAAe,CAAEgB,IAAKgB,EAAQhB,IAAKqI,MAAAA,WAEvD1D,4BChGf,WAEIrG,KAAKwC,iBAAiB,YAAcC,UAC1BuE,EAAYI,IAClB3E,EAAMgB,UCMeiB,OAAOkV,EAAqBC,EAnB/B,sBAqBhBC,SADmB9Z,KAAKyK,OAAOxF,QACCgC,QAAQD,GACnCA,EAAU+S,SAASF,IACtB7S,EAAU+S,SAAS/Z,KAAK6G,aAAaC,QACrCE,IAAc4S,iBAEhBzW,QAAQC,IAAI0W,EAAmBxW,KAAK0D,GAAchH,KAAKyK,OAAO7C,OAAOZ,MACpE8S,GDdaE,CAAqBhT,GAAWrD,MAAMsW,4BEP9D,WACIja,KAAKwC,iBAAiB,YAAY,IAAMxC,KAAKka,QAAQC,8BCSzD,SAA0BxK,EAASrH,ICInC,SAAkBqH,GACa6G,IACR/P,SAASkJ,GDL5BlJ,CAASkJ,GEAb,SAAkBrH,SACR2K,EAAqBuD,IAE3BnR,EADsB,IAAIoR,EAAcxD,EAAoB3K,IFD5D8R,CAAS9R"} \ No newline at end of file diff --git a/public/worker-sTsqr_RdML8Zn1Mtf4L93.js b/public/worker-6L8AMbRb0NKpPgic9tDJq.js similarity index 100% rename from public/worker-sTsqr_RdML8Zn1Mtf4L93.js rename to public/worker-6L8AMbRb0NKpPgic9tDJq.js diff --git a/state/clipboard.ts b/state/clipboard.ts index db3c2ed29..56d083a39 100644 --- a/state/clipboard.ts +++ b/state/clipboard.ts @@ -1,6 +1,6 @@ -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from './shape-utils' import { Data, Shape } from 'types' -import { getCommonBounds, getSelectedIds, getSelectedShapes } from 'utils/utils' +import { getCommonBounds, getSelectedShapes } from 'utils/utils' import state from './state' class Clipboard { @@ -99,10 +99,9 @@ class Clipboard { } static copyStringToClipboard(string: string) { - let textarea: HTMLTextAreaElement let result: boolean | null - textarea = document.createElement('textarea') + const textarea = document.createElement('textarea') textarea.setAttribute('position', 'fixed') textarea.setAttribute('top', '0') textarea.setAttribute('readonly', 'true') diff --git a/lib/code/circle.ts b/state/code/circle.ts similarity index 76% rename from lib/code/circle.ts rename to state/code/circle.ts index 6cac527cc..fc87768ec 100644 --- a/lib/code/circle.ts +++ b/state/code/circle.ts @@ -1,12 +1,12 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { CircleShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import Utils from './utils' +import { defaultStyle } from 'state/shape-styles' export default class Circle extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) + props.point = Utils.vectorToPoint(props.point) super({ id: uniqueId(), @@ -27,15 +27,15 @@ export default class Circle extends CodeShape { }) } - export() { + export(): CircleShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) + shape.point = Utils.vectorToPoint(shape.point) return shape } - get radius() { + get radius(): number { return this.shape.radius } } diff --git a/lib/code/control.ts b/state/code/control.ts similarity index 98% rename from lib/code/control.ts rename to state/code/control.ts index 02d796ef6..0ef35e472 100644 --- a/lib/code/control.ts +++ b/state/code/control.ts @@ -25,7 +25,7 @@ export class Control { } } - destroy() { + destroy(): void { codeControls.delete(this.control) delete controls[this.control.label] } diff --git a/lib/code/dot.ts b/state/code/dot.ts similarity index 78% rename from lib/code/dot.ts rename to state/code/dot.ts index 98e465f6e..de9eba1aa 100644 --- a/lib/code/dot.ts +++ b/state/code/dot.ts @@ -1,12 +1,12 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { DotShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import Utils from './utils' export default class Dot extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) + props.point = Utils.vectorToPoint(props.point) super({ id: uniqueId(), @@ -30,10 +30,10 @@ export default class Dot extends CodeShape { }) } - export() { + export(): DotShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) + shape.point = Utils.vectorToPoint(shape.point) return shape } diff --git a/lib/code/ellipse.ts b/state/code/ellipse.ts similarity index 75% rename from lib/code/ellipse.ts rename to state/code/ellipse.ts index a3b58a864..39987e6f0 100644 --- a/lib/code/ellipse.ts +++ b/state/code/ellipse.ts @@ -1,12 +1,12 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { EllipseShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import Utils from './utils' +import { defaultStyle } from 'state/shape-styles' export default class Ellipse extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) + props.point = Utils.vectorToPoint(props.point) super({ id: uniqueId(), @@ -28,19 +28,19 @@ export default class Ellipse extends CodeShape { }) } - export() { + export(): EllipseShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) + shape.point = Utils.vectorToPoint(shape.point) return shape } - get radiusX() { + get radiusX(): number { return this.shape.radiusX } - get radiusY() { + get radiusY(): number { return this.shape.radiusY } } diff --git a/lib/code/generate.ts b/state/code/generate.ts similarity index 85% rename from lib/code/generate.ts rename to state/code/generate.ts index e094a9338..7bd9f2408 100644 --- a/lib/code/generate.ts +++ b/state/code/generate.ts @@ -9,7 +9,7 @@ import Vector from './vector' import Utils from './utils' import { NumberControl, VectorControl, codeControls, controls } from './control' import { codeShapes } from './index' -import { CodeControl, Data } from 'types' +import { CodeControl, Data, Shape } from 'types' const baseScope = { Dot, @@ -30,7 +30,13 @@ const baseScope = { * collected shapes as an array. * @param code */ -export function generateFromCode(data: Data, code: string) { +export function generateFromCode( + data: Data, + code: string +): { + shapes: Shape[] + controls: CodeControl[] +} { codeControls.clear() codeShapes.clear() ;(window as any).isUpdatingCode = false @@ -55,7 +61,12 @@ export function generateFromCode(data: Data, code: string) { * collected shapes as an array. * @param code */ -export function updateFromCode(data: Data, code: string) { +export function updateFromCode( + data: Data, + code: string +): { + shapes: Shape[] +} { codeShapes.clear() ;(window as any).isUpdatingCode = true ;(window as any).currentPageId = data.currentPageId @@ -66,7 +77,7 @@ export function updateFromCode(data: Data, code: string) { ...baseScope, currentPageId, controls: Object.fromEntries( - Object.entries(controls).map(([id, control]) => [ + Object.entries(controls).map(([_, control]) => [ control.label, control.value, ]) diff --git a/lib/code/index.ts b/state/code/index.ts similarity index 60% rename from lib/code/index.ts rename to state/code/index.ts index c286e87f6..6621c6b6d 100644 --- a/lib/code/index.ts +++ b/state/code/index.ts @@ -1,12 +1,8 @@ -import { Mutable, Shape } from 'types' -import shapeUtilityMap, { - createShape, - getShapeUtils, - ShapeUtility, -} from 'lib/shape-utils' +import { Mutable, Shape, ShapeUtility } from 'types' +import { createShape, getShapeUtils } from 'state/shape-utils' import vec from 'utils/vec' import Vector from './vector' -import { vectorToPoint } from 'utils/utils' +import Utils from './utils' export const codeShapes = new Set>([]) @@ -24,48 +20,48 @@ export default class CodeShape { codeShapes.add(this) } - destroy() { + destroy(): void { codeShapes.delete(this) } - moveTo(point: Vector) { - this.utils.setProperty(this._shape, 'point', vectorToPoint(point)) + moveTo(point: Vector): CodeShape { + this.utils.setProperty(this._shape, 'point', Utils.vectorToPoint(point)) return this } - translate(delta: Vector) { + translate(delta: Vector): CodeShape { this.utils.setProperty( this._shape, 'point', - vec.add(this._shape.point, vectorToPoint(delta)) + vec.add(this._shape.point, Utils.vectorToPoint(delta)) ) return this } - rotate(rotation: number) { + rotate(rotation: number): CodeShape { this.utils.setProperty(this._shape, 'rotation', rotation) return this } - getBounds() { + getBounds(): CodeShape { this.utils.getBounds(this.shape) return this } - hitTest(point: Vector) { - this.utils.hitTest(this.shape, vectorToPoint(point)) + hitTest(point: Vector): CodeShape { + this.utils.hitTest(this.shape, Utils.vectorToPoint(point)) return this } - get shape() { + get shape(): T { return this._shape } - get point() { + get point(): number[] { return [...this.shape.point] } - get rotation() { + get rotation(): number { return this.shape.rotation } } diff --git a/lib/code/line.ts b/state/code/line.ts similarity index 69% rename from lib/code/line.ts rename to state/code/line.ts index b59b82f0b..eef8fdae2 100644 --- a/lib/code/line.ts +++ b/state/code/line.ts @@ -1,13 +1,13 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { LineShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import Utils from './utils' export default class Line extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) - props.direction = vectorToPoint(props.direction) + props.point = Utils.vectorToPoint(props.point) + props.direction = Utils.vectorToPoint(props.direction) super({ id: uniqueId(), @@ -32,16 +32,16 @@ export default class Line extends CodeShape { }) } - export() { + export(): LineShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) - shape.direction = vectorToPoint(shape.direction) + shape.point = Utils.vectorToPoint(shape.point) + shape.direction = Utils.vectorToPoint(shape.direction) return shape } - get direction() { + get direction(): number[] { return this.shape.direction } } diff --git a/lib/code/polyline.ts b/state/code/polyline.ts similarity index 67% rename from lib/code/polyline.ts rename to state/code/polyline.ts index b6a621479..ccb1f9456 100644 --- a/lib/code/polyline.ts +++ b/state/code/polyline.ts @@ -1,13 +1,13 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { PolylineShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import Utils from './utils' export default class Polyline extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) - props.points = props.points.map(vectorToPoint) + props.point = Utils.vectorToPoint(props.point) + props.points = props.points.map(Utils.vectorToPoint) super({ id: uniqueId(), @@ -28,16 +28,16 @@ export default class Polyline extends CodeShape { }) } - export() { + export(): PolylineShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) - shape.points = shape.points.map(vectorToPoint) + shape.point = Utils.vectorToPoint(shape.point) + shape.points = shape.points.map(Utils.vectorToPoint) return shape } - get points() { + get points(): number[][] { return this.shape.points } } diff --git a/lib/code/ray.ts b/state/code/ray.ts similarity index 68% rename from lib/code/ray.ts rename to state/code/ray.ts index f74a6b4ba..e7de4ac00 100644 --- a/lib/code/ray.ts +++ b/state/code/ray.ts @@ -1,13 +1,13 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { RayShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import Utils from './utils' export default class Ray extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) - props.direction = vectorToPoint(props.direction) + props.point = Utils.vectorToPoint(props.point) + props.direction = Utils.vectorToPoint(props.direction) super({ id: uniqueId(), @@ -32,16 +32,16 @@ export default class Ray extends CodeShape { }) } - export() { + export(): RayShape { const shape = { ...this.shape } - shape.point = vectorToPoint(shape.point) - shape.direction = vectorToPoint(shape.direction) + shape.point = Utils.vectorToPoint(shape.point) + shape.direction = Utils.vectorToPoint(shape.direction) return shape } - get direction() { + get direction(): number[] { return this.shape.direction } } diff --git a/lib/code/rectangle.ts b/state/code/rectangle.ts similarity index 78% rename from lib/code/rectangle.ts rename to state/code/rectangle.ts index 8d5e38d51..42f103efa 100644 --- a/lib/code/rectangle.ts +++ b/state/code/rectangle.ts @@ -1,13 +1,13 @@ import CodeShape from './index' import { uniqueId } from 'utils/utils' import { RectangleShape, ShapeType } from 'types' -import { vectorToPoint } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import Utils from './utils' +import { defaultStyle } from 'state/shape-styles' export default class Rectangle extends CodeShape { constructor(props = {} as Partial) { - props.point = vectorToPoint(props.point) - props.size = vectorToPoint(props.size) + props.point = Utils.vectorToPoint(props.point) + props.size = Utils.vectorToPoint(props.size) super({ id: uniqueId(), @@ -29,7 +29,7 @@ export default class Rectangle extends CodeShape { }) } - get size() { + get size(): number[] { return this.shape.size } } diff --git a/lib/code/utils.ts b/state/code/utils.ts similarity index 85% rename from lib/code/utils.ts rename to state/code/utils.ts index 267e1934c..386e0c31c 100644 --- a/lib/code/utils.ts +++ b/state/code/utils.ts @@ -2,7 +2,23 @@ import { Bounds } from 'types' import Vector, { Point } from './vector' export default class Utils { - static getRayRayIntersection(p0: Vector, n0: Vector, p1: Vector, n1: Vector) { + static vectorToPoint(point: number[] | Vector | undefined): number[] { + if (typeof point === 'undefined') { + return [0, 0] + } + + if (point instanceof Vector) { + return [point.x, point.y] + } + return point + } + + static getRayRayIntersection( + p0: Vector, + n0: Vector, + p1: Vector, + n1: Vector + ): Vector { const p0e = Vector.add(p0, n0), p1e = Vector.add(p1, n1), m0 = (p0e.y - p0.y) / (p0e.x - p0.x), @@ -20,7 +36,7 @@ export default class Utils { r0: number, P: Point | Vector, side: number - ) { + ): Vector { const v0 = Vector.cast(A) const v1 = Vector.cast(P) const B = Vector.lrp(v0, v1, 0.5), @@ -41,17 +57,17 @@ export default class Utils { return side === 0 ? p.add(k) : p.sub(k) } - static shortAngleDist(a: number, b: number) { + static shortAngleDist(a: number, b: number): number { const max = Math.PI * 2 const da = (b - a) % max return ((2 * da) % max) - da } - static getSweep(C: Vector, A: Vector, B: Vector) { + static getSweep(C: Vector, A: Vector, B: Vector): number { return Utils.shortAngleDist(Vector.ang(C, A), Vector.ang(C, B)) } - static bez1d(a: number, b: number, c: number, d: number, t: number) { + static bez1d(a: number, b: number, c: number, d: number, t: number): number { return ( a * (1 - t) * (1 - t) * (1 - t) + 3 * b * t * (1 - t) * (1 - t) + @@ -126,7 +142,7 @@ export default class Utils { } } - static getExpandedBounds(a: Bounds, b: Bounds) { + static getExpandedBounds(a: Bounds, b: Bounds): Bounds { const minX = Math.min(a.minX, b.minX), minY = Math.min(a.minY, b.minY), maxX = Math.max(a.maxX, b.maxX), @@ -137,7 +153,7 @@ export default class Utils { return { minX, minY, maxX, maxY, width, height } } - static getCommonBounds(...b: Bounds[]) { + static getCommonBounds(...b: Bounds[]): Bounds { if (b.length < 2) return b[0] let bounds = b[0] diff --git a/lib/code/vector.ts b/state/code/vector.ts similarity index 69% rename from lib/code/vector.ts rename to state/code/vector.ts index 26ba0fc12..c0f90641c 100644 --- a/lib/code/vector.ts +++ b/state/code/vector.ts @@ -26,43 +26,44 @@ export default class Vector { } } - set(v: Vector | Point) { + set(v: Vector | Point): Vector { this.x = v.x this.y = v.y + return this } - copy() { + copy(): Vector { return new Vector(this) } - clone() { + clone(): Vector { return this.copy() } - toArray() { + toArray(): number[] { return [this.x, this.y] } - add(b: Vector) { + add(b: Vector): Vector { this.x += b.x this.y += b.y return this } - static add(a: Vector, b: Vector) { + static add(a: Vector, b: Vector): Vector { const n = new Vector(a) n.x += b.x n.y += b.y return n } - sub(b: Vector) { + sub(b: Vector): Vector { this.x -= b.x this.y -= b.y return this } - static sub(a: Vector, b: Vector) { + static sub(a: Vector, b: Vector): Vector { const n = new Vector(a) n.x -= b.x n.y -= b.y @@ -71,7 +72,7 @@ export default class Vector { mul(b: number): Vector mul(b: Vector): Vector - mul(b: Vector | number) { + mul(b: Vector | number): Vector { if (b instanceof Vector) { this.x *= b.x this.y *= b.y @@ -82,17 +83,17 @@ export default class Vector { return this } - mulScalar(b: number) { + mulScalar(b: number): Vector { return this.mul(b) } - static mulScalar(a: Vector, b: number) { + static mulScalar(a: Vector, b: number): Vector { return Vector.mul(a, b) } static mul(a: Vector, b: number): Vector static mul(a: Vector, b: Vector): Vector - static mul(a: Vector, b: Vector | number) { + static mul(a: Vector, b: Vector | number): Vector { const n = new Vector(a) if (b instanceof Vector) { n.x *= b.x @@ -106,7 +107,7 @@ export default class Vector { div(b: number): Vector div(b: Vector): Vector - div(b: Vector | number) { + div(b: Vector | number): Vector { if (b instanceof Vector) { if (b.x) { this.x /= b.x @@ -125,7 +126,7 @@ export default class Vector { static div(a: Vector, b: number): Vector static div(a: Vector, b: Vector): Vector - static div(a: Vector, b: Vector | number) { + static div(a: Vector, b: Vector | number): Vector { const n = new Vector(a) if (b instanceof Vector) { if (b.x) n.x /= b.x @@ -139,112 +140,112 @@ export default class Vector { return n } - divScalar(b: number) { + divScalar(b: number): Vector { return this.div(b) } - static divScalar(a: Vector, b: number) { + static divScalar(a: Vector, b: number): Vector { return Vector.div(a, b) } - vec(b: Vector) { + vec(b: Vector): Vector { const { x, y } = this this.x = b.x - x this.y = b.y - y return this } - static vec(a: Vector, b: Vector) { + static vec(a: Vector, b: Vector): Vector { const n = new Vector(a) n.x = b.x - a.x n.y = b.y - a.y return n } - pry(b: Vector) { + pry(b: Vector): number { return this.dpr(b) / b.len() } - static pry(a: Vector, b: Vector) { + static pry(a: Vector, b: Vector): number { return a.dpr(b) / b.len() } - dpr(b: Vector) { + dpr(b: Vector): number { return this.x * b.x + this.y * b.y } - static dpr(a: Vector, b: Vector) { + static dpr(a: Vector, b: Vector): number { return a.x & (b.x + a.y * b.y) } - cpr(b: Vector) { + cpr(b: Vector): number { return this.x * b.y - b.y * this.y } - static cpr(a: Vector, b: Vector) { + static cpr(a: Vector, b: Vector): number { return a.x * b.y - b.y * a.y } - tangent(b: Vector) { + tangent(b: Vector): Vector { return this.sub(b).uni() } - static tangent(a: Vector, b: Vector) { + static tangent(a: Vector, b: Vector): Vector { const n = new Vector(a) return n.sub(b).uni() } - dist2(b: Vector) { + dist2(b: Vector): number { return this.sub(b).len2() } - static dist2(a: Vector, b: Vector) { + static dist2(a: Vector, b: Vector): number { const n = new Vector(a) return n.sub(b).len2() } - dist(b: Vector) { + dist(b: Vector): number { return Math.hypot(b.y - this.y, b.x - this.x) } - static dist(a: Vector, b: Vector) { + static dist(a: Vector, b: Vector): number { const n = new Vector(a) return Math.hypot(b.y - n.y, b.x - n.x) } - ang(b: Vector) { + ang(b: Vector): number { return Math.atan2(b.y - this.y, b.x - this.x) } - static ang(a: Vector, b: Vector) { + static ang(a: Vector, b: Vector): number { const n = new Vector(a) return Math.atan2(b.y - n.y, b.x - n.x) } - med(b: Vector) { + med(b: Vector): Vector { return this.add(b).mul(0.5) } - static med(a: Vector, b: Vector) { + static med(a: Vector, b: Vector): Vector { const n = new Vector(a) return n.add(b).mul(0.5) } - rot(r: number) { + rot(r: number): Vector { const { x, y } = this this.x = x * Math.cos(r) - y * Math.sin(r) this.y = x * Math.sin(r) + y * Math.cos(r) return this } - static rot(a: Vector, r: number) { + static rot(a: Vector, r: number): Vector { const n = new Vector(a) n.x = a.x * Math.cos(r) - a.y * Math.sin(r) n.y = a.x * Math.sin(r) + a.y * Math.cos(r) return n } - rotAround(b: Vector, r: number) { + rotAround(b: Vector, r: number): Vector { const { x, y } = this const s = Math.sin(r) const c = Math.cos(r) @@ -258,7 +259,7 @@ export default class Vector { return this } - static rotAround(a: Vector, b: Vector, r: number) { + static rotAround(a: Vector, b: Vector, r: number): Vector { const n = new Vector(a) const s = Math.sin(r) const c = Math.cos(r) @@ -272,173 +273,185 @@ export default class Vector { return n } - lrp(b: Vector, t: number) { + lrp(b: Vector, t: number): Vector { const n = new Vector(this) this.vec(b).mul(t).add(n) + return this } - static lrp(a: Vector, b: Vector, t: number) { + static lrp(a: Vector, b: Vector, t: number): Vector { const n = new Vector(a) n.vec(b).mul(t).add(a) return n } - nudge(b: Vector, d: number) { + nudge(b: Vector, d: number): Vector { this.add(b.mul(d)) + return this } - static nudge(a: Vector, b: Vector, d: number) { + static nudge(a: Vector, b: Vector, d: number): Vector { const n = new Vector(a) return n.add(b.mul(d)) } - nudgeToward(b: Vector, d: number) { + nudgeToward(b: Vector, d: number): Vector { return this.nudge(Vector.vec(this, b).uni(), d) } - static nudgeToward(a: Vector, b: Vector, d: number) { + static nudgeToward(a: Vector, b: Vector, d: number): Vector { return Vector.nudge(a, Vector.vec(a, b).uni(), d) } - int(b: Vector, from: number, to: number, s: number) { + int(b: Vector, from: number, to: number, s: number): Vector { const t = (Math.max(from, to) - from) / (to - from) this.add(Vector.mul(this, 1 - t).add(Vector.mul(b, s))) return this } - static int(a: Vector, b: Vector, from: number, to: number, s: number) { + static int( + a: Vector, + b: Vector, + from: number, + to: number, + s: number + ): Vector { const n = new Vector(a) const t = (Math.max(from, to) - from) / (to - from) n.add(Vector.mul(a, 1 - t).add(Vector.mul(b, s))) return n } - equals(b: Vector) { + equals(b: Vector): boolean { return this.x === b.x && this.y === b.y } - static equals(a: Vector, b: Vector) { + static equals(a: Vector, b: Vector): boolean { return a.x === b.x && a.y === b.y } - abs() { + abs(): Vector { this.x = Math.abs(this.x) this.y = Math.abs(this.y) return this } - static abs(a: Vector) { + static abs(a: Vector): Vector { const n = new Vector(a) n.x = Math.abs(n.x) n.y = Math.abs(n.y) return n } - len() { + len(): number { return Math.hypot(this.x, this.y) } - static len(a: Vector) { + static len(a: Vector): number { return Math.hypot(a.x, a.y) } - len2() { + len2(): number { return this.x * this.x + this.y * this.y } - static len2(a: Vector) { + static len2(a: Vector): number { return a.x * a.x + a.y * a.y } - per() { + per(): Vector { const t = this.x this.x = this.y this.y = -t return this } - static per(a: Vector) { + static per(a: Vector): Vector { const n = new Vector(a) n.x = n.y n.y = -a.x return n } - neg() { + neg(): Vector { this.x *= -1 this.y *= -1 return this } - static neg(v: Vector) { + static neg(v: Vector): Vector { const n = new Vector(v) n.x *= -1 n.y *= -1 return n } - uni() { + uni(): Vector { return this.div(this.len()) } - static uni(v: Vector) { + static uni(v: Vector): Vector { const n = new Vector(v) return n.div(n.len()) } - normalize() { + normalize(): Vector { return this.uni() } - static normalize(v: Vector) { + static normalize(v: Vector): Vector { return Vector.uni(v) } - isLeft(center: Vector, b: Vector) { + isLeft(center: Vector, b: Vector): number { return ( (center.x - this.x) * (b.y - this.y) - (b.x - this.x) * (center.y - b.y) ) } - static isLeft(center: Vector, a: Vector, b: Vector) { + static isLeft(center: Vector, a: Vector, b: Vector): number { return (center.x - a.x) * (b.y - a.y) - (b.x - a.x) * (center.y - b.y) } - static ang3(center: Vector, a: Vector, b: Vector) { + static ang3(center: Vector, a: Vector, b: Vector): number { const v1 = Vector.vec(center, a) const v2 = Vector.vec(center, b) return Vector.ang(v1, v2) } - static clockwise(center: Vector, a: Vector, b: Vector) { + static clockwise(center: Vector, a: Vector, b: Vector): boolean { return Vector.isLeft(center, a, b) > 0 } - static cast(v: Point | Vector) { + static cast(v: Point | Vector): Vector { return 'cast' in v ? v : new Vector(v) } - static from(v: Vector) { + static from(v: Vector): Vector { return new Vector(v) } - nearestPointOnLineThroughPoint(b: Vector, u: Vector) { + nearestPointOnLineThroughPoint(b: Vector, u: Vector): Vector { return this.clone().add(u.clone().mul(Vector.sub(this, b).pry(u))) } - static nearestPointOnLineThroughPoint(a: Vector, b: Vector, u: Vector) { + static nearestPointOnLineThroughPoint( + a: Vector, + b: Vector, + u: Vector + ): Vector { return a.clone().add(u.clone().mul(Vector.sub(a, b).pry(u))) } - distanceToLineThroughPoint(b: Vector, u: Vector) { + distanceToLineThroughPoint(b: Vector, u: Vector): number { return this.dist(Vector.nearestPointOnLineThroughPoint(b, u, this)) } - static distanceToLineThroughPoint(a: Vector, b: Vector, u: Vector) { + static distanceToLineThroughPoint(a: Vector, b: Vector, u: Vector): number { return a.dist(Vector.nearestPointOnLineThroughPoint(b, u, a)) } - nearestPointOnLineSegment(p0: Vector, p1: Vector, clamp = true) { + nearestPointOnLineSegment(p0: Vector, p1: Vector, clamp = true): Vector { return Vector.nearestPointOnLineSegment(this, p0, p1, clamp) } @@ -447,7 +460,7 @@ export default class Vector { p0: Vector, p1: Vector, clamp = true - ) { + ): Vector { const delta = Vector.sub(p1, p0) const length = delta.len() const u = Vector.div(delta, length) @@ -465,7 +478,7 @@ export default class Vector { return pt } - distanceToLineSegment(p0: Vector, p1: Vector, clamp = true) { + distanceToLineSegment(p0: Vector, p1: Vector, clamp = true): number { return Vector.distanceToLineSegment(this, p0, p1, clamp) } @@ -474,7 +487,7 @@ export default class Vector { p0: Vector, p1: Vector, clamp = true - ) { + ): number { return Vector.dist(a, Vector.nearestPointOnLineSegment(a, p0, p1, clamp)) } } diff --git a/state/commands/align.ts b/state/commands/align.ts index ba7417d1f..2a7897d87 100644 --- a/state/commands/align.ts +++ b/state/commands/align.ts @@ -2,9 +2,9 @@ import Command from './command' import history from '../history' import { AlignType, Data } from 'types' import { getCommonBounds, getPage, getSelectedShapes } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function alignCommand(data: Data, type: AlignType) { +export default function alignCommand(data: Data, type: AlignType): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(data) const entries = selectedShapes.map( @@ -25,7 +25,7 @@ export default function alignCommand(data: Data, type: AlignType) { switch (type) { case AlignType.Top: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ shape.point[0], @@ -35,7 +35,7 @@ export default function alignCommand(data: Data, type: AlignType) { break } case AlignType.CenterVertical: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ shape.point[0], @@ -45,7 +45,7 @@ export default function alignCommand(data: Data, type: AlignType) { break } case AlignType.Bottom: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ shape.point[0], @@ -55,7 +55,7 @@ export default function alignCommand(data: Data, type: AlignType) { break } case AlignType.Left: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ commonBounds.minX, @@ -65,7 +65,7 @@ export default function alignCommand(data: Data, type: AlignType) { break } case AlignType.CenterHorizontal: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ midX - boundsForShapes[id].width / 2, @@ -75,7 +75,7 @@ export default function alignCommand(data: Data, type: AlignType) { break } case AlignType.Right: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] getShapeUtils(shape).translateTo(shape, [ commonBounds.maxX - boundsForShapes[id].width, @@ -88,7 +88,7 @@ export default function alignCommand(data: Data, type: AlignType) { }, undo(data) { const { shapes } = getPage(data, currentPageId) - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] const initialBounds = boundsForShapes[id] getShapeUtils(shape).translateTo(shape, [ diff --git a/state/commands/arrow.ts b/state/commands/arrow.ts index 8742bdc7d..dbaee2b3e 100644 --- a/state/commands/arrow.ts +++ b/state/commands/arrow.ts @@ -8,7 +8,7 @@ export default function arrowCommand( data: Data, before: ArrowSnapshot, after: ArrowSnapshot -) { +): void { history.execute( data, new Command({ diff --git a/state/commands/change-page.ts b/state/commands/change-page.ts index 8495b615b..98d7bcbd9 100644 --- a/state/commands/change-page.ts +++ b/state/commands/change-page.ts @@ -3,7 +3,7 @@ import history from '../history' import { Data } from 'types' import storage from 'state/storage' -export default function changePage(data: Data, toPageId: string) { +export default function changePage(data: Data, toPageId: string): void { const { currentPageId: fromPageId } = data history.execute( diff --git a/state/commands/command.ts b/state/commands/command.ts index 04ba802bb..a68dece95 100644 --- a/state/commands/command.ts +++ b/state/commands/command.ts @@ -40,7 +40,7 @@ export class BaseCommand { } } - undo = (data: T) => { + undo = (data: T): void => { if (this.manualSelection) { this.undoFn(data) return @@ -52,7 +52,7 @@ export class BaseCommand { this.restoreBeforeSelectionState(data) } - redo = (data: T, initial = false) => { + redo = (data: T, initial = false): void => { if (this.manualSelection) { this.doFn(data, initial) @@ -82,7 +82,7 @@ export class BaseCommand { * the app. */ export default class Command extends BaseCommand { - saveSelectionState = (data: Data) => { + saveSelectionState = (data: Data): ((next: Data) => void) => { const { currentPageId } = data const selectedIds = setToArray(getSelectedIds(data)) return (next: Data) => { diff --git a/state/commands/create-page.ts b/state/commands/create-page.ts index 8998f57d1..12cd4bbcb 100644 --- a/state/commands/create-page.ts +++ b/state/commands/create-page.ts @@ -5,7 +5,7 @@ import { uniqueId } from 'utils/utils' import { current } from 'immer' import storage from 'state/storage' -export default function createPage(data: Data, goToPage = true) { +export default function createPage(data: Data, goToPage = true): void { const snapshot = getSnapshot(data) history.execute( diff --git a/state/commands/delete-page.ts b/state/commands/delete-page.ts index dcf07a7ae..7e3a135b0 100644 --- a/state/commands/delete-page.ts +++ b/state/commands/delete-page.ts @@ -2,10 +2,9 @@ import Command from './command' import history from '../history' import { Data } from 'types' import { current } from 'immer' -import vec from 'utils/vec' import storage from 'state/storage' -export default function deletePage(data: Data, pageId: string) { +export default function deletePage(data: Data, pageId: string): void { const snapshot = getSnapshot(data, pageId) history.execute( diff --git a/state/commands/delete-selected.ts b/state/commands/delete-selected.ts index 129d1b368..2f2c860ad 100644 --- a/state/commands/delete-selected.ts +++ b/state/commands/delete-selected.ts @@ -1,21 +1,16 @@ import Command from './command' import history from '../history' -import { TranslateSnapshot } from 'state/sessions/translate-session' -import { Data, ShapeType } from 'types' +import { Data } from 'types' import { getDocumentBranch, getPage, - getPageState, - getSelectedIds, getSelectedShapes, setSelectedIds, - setToArray, - updateParents, } from 'utils/utils' import { current } from 'immer' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function deleteSelected(data: Data) { +export default function deleteSelected(data: Data): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(data) @@ -43,7 +38,7 @@ export default function deleteSelected(data: Data) { do(data) { const page = getPage(data, currentPageId) - for (let id of selectedIdsArr) { + for (const id of selectedIdsArr) { const shape = page.shapes[id] if (!shape) { console.error('no shape ' + id) @@ -65,7 +60,7 @@ export default function deleteSelected(data: Data) { } } - for (let shape of childrenToDelete) { + for (const shape of childrenToDelete) { delete page.shapes[shape.id] } @@ -74,11 +69,11 @@ export default function deleteSelected(data: Data) { undo(data) { const page = getPage(data, currentPageId) - for (let shape of childrenToDelete) { + for (const shape of childrenToDelete) { page.shapes[shape.id] = shape } - for (let shape of childrenToDelete) { + for (const shape of childrenToDelete) { if (shape.parentId !== data.currentPageId) { const parent = page.shapes[shape.parentId] getShapeUtils(parent) diff --git a/state/commands/direct.ts b/state/commands/direct.ts index bb6cd4c3e..3f56b02fe 100644 --- a/state/commands/direct.ts +++ b/state/commands/direct.ts @@ -1,23 +1,23 @@ -import Command from "./command" -import history from "../history" -import { DirectionSnapshot } from "state/sessions/direction-session" -import { Data, LineShape, RayShape } from "types" -import { getPage } from "utils/utils" +import Command from './command' +import history from '../history' +import { DirectionSnapshot } from 'state/sessions/direction-session' +import { Data, LineShape, RayShape } from 'types' +import { getPage } from 'utils/utils' export default function directCommand( data: Data, before: DirectionSnapshot, after: DirectionSnapshot -) { +): void { history.execute( data, new Command({ - name: "set_direction", - category: "canvas", + name: 'set_direction', + category: 'canvas', do(data) { const { shapes } = getPage(data) - for (let { id, direction } of after.shapes) { + for (const { id, direction } of after.shapes) { const shape = shapes[id] as RayShape | LineShape shape.direction = direction @@ -26,7 +26,7 @@ export default function directCommand( undo(data) { const { shapes } = getPage(data, before.currentPageId) - for (let { id, direction } of after.shapes) { + for (const { id, direction } of after.shapes) { const shape = shapes[id] as RayShape | LineShape shape.direction = direction diff --git a/state/commands/distribute.ts b/state/commands/distribute.ts index 39f68c14f..1b699a2b1 100644 --- a/state/commands/distribute.ts +++ b/state/commands/distribute.ts @@ -7,9 +7,12 @@ import { getPage, getSelectedShapes, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function distributeCommand(data: Data, type: DistributeType) { +export default function distributeCommand( + data: Data, + type: DistributeType +): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(data).filter( @@ -130,7 +133,7 @@ export default function distributeCommand(data: Data, type: DistributeType) { }, undo(data) { const { shapes } = getPage(data, currentPageId) - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] const initialBounds = boundsForShapes[id] getShapeUtils(shape).translateTo(shape, [ diff --git a/state/commands/draw.ts b/state/commands/draw.ts index 0063624f7..bb4f84273 100644 --- a/state/commands/draw.ts +++ b/state/commands/draw.ts @@ -4,7 +4,7 @@ import { Data, DrawShape } from 'types' import { getPage, setSelectedIds } from 'utils/utils' import { current } from 'immer' -export default function drawCommand(data: Data, id: string) { +export default function drawCommand(data: Data, id: string): void { const restoreShape = getPage(current(data)).shapes[id] as DrawShape history.execute( diff --git a/state/commands/duplicate.ts b/state/commands/duplicate.ts index e8af09698..ee72f0a84 100644 --- a/state/commands/duplicate.ts +++ b/state/commands/duplicate.ts @@ -4,7 +4,6 @@ import { Data } from 'types' import { getCurrentCamera, getPage, - getSelectedIds, getSelectedShapes, setSelectedIds, } from 'utils/utils' @@ -12,7 +11,7 @@ import { uniqueId } from 'utils/utils' import { current } from 'immer' import vec from 'utils/vec' -export default function duplicateCommand(data: Data) { +export default function duplicateCommand(data: Data): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(current(data)) const duplicates = selectedShapes.map((shape) => ({ diff --git a/state/commands/edit.ts b/state/commands/edit.ts index 7f5c8e00b..592327bd4 100644 --- a/state/commands/edit.ts +++ b/state/commands/edit.ts @@ -3,13 +3,13 @@ import history from '../history' import { Data } from 'types' import { getPage } from 'utils/utils' import { EditSnapshot } from 'state/sessions/edit-session' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default function editCommand( data: Data, before: EditSnapshot, after: EditSnapshot -) { +): void { history.execute( data, new Command({ diff --git a/state/commands/generate.ts b/state/commands/generate.ts index 11b14c628..db3e6fd52 100644 --- a/state/commands/generate.ts +++ b/state/commands/generate.ts @@ -1,14 +1,14 @@ import Command from './command' import history from '../history' -import { CodeControl, Data, Shape } from 'types' +import { Data, Shape } from 'types' import { current } from 'immer' -import { getPage, getSelectedIds, setSelectedIds } from 'utils/utils' +import { getPage, setSelectedIds } from 'utils/utils' export default function generateCommand( data: Data, currentPageId: string, generatedShapes: Shape[] -) { +): void { const cData = current(data) const page = getPage(cData) @@ -19,14 +19,14 @@ export default function generateCommand( ) // Remove previous generated shapes - for (let id in currentShapes) { + for (const id in currentShapes) { if (currentShapes[id].isGenerated) { delete currentShapes[id] } } // Add new ones - for (let shape of generatedShapes) { + for (const shape of generatedShapes) { currentShapes[shape.id] = shape } @@ -41,14 +41,14 @@ export default function generateCommand( setSelectedIds(data, []) // Remove previous generated shapes - for (let id in shapes) { + for (const id in shapes) { if (shapes[id].isGenerated) { delete shapes[id] } } // Add new generated shapes - for (let shape of generatedShapes) { + for (const shape of generatedShapes) { shapes[shape.id] = shape } }, @@ -56,14 +56,14 @@ export default function generateCommand( const { shapes } = getPage(data) // Remove generated shapes - for (let id in shapes) { + for (const id in shapes) { if (shapes[id].isGenerated) { delete shapes[id] } } // Restore previous generated shapes - for (let shape of prevGeneratedShapes) { + for (const shape of prevGeneratedShapes) { shapes[shape.id] = shape } }, diff --git a/state/commands/group.ts b/state/commands/group.ts index 1df5db282..59d285af9 100644 --- a/state/commands/group.ts +++ b/state/commands/group.ts @@ -1,6 +1,6 @@ import Command from './command' import history from '../history' -import { Data, GroupShape, Shape, ShapeType } from 'types' +import { Data, GroupShape, ShapeType } from 'types' import { getCommonBounds, getPage, @@ -10,10 +10,10 @@ import { setSelectedIds, } from 'utils/utils' import { current } from 'immer' -import { createShape, getShapeUtils } from 'lib/shape-utils' +import { createShape, getShapeUtils } from 'state/shape-utils' import commands from '.' -export default function groupCommand(data: Data) { +export default function groupCommand(data: Data): void { const cData = current(data) const { currentPageId } = cData @@ -28,15 +28,9 @@ export default function groupCommand(data: Data) { ) let newGroupParentId: string - let newGroupShape: GroupShape - let newGroupChildIndex: number const initialShapeIds = initialShapes.map((s) => s.id) - const parentIds = Array.from( - new Set(initialShapes.map((s) => s.parentId)).values() - ) - const commonBounds = getCommonBounds( ...initialShapes.map((shape) => getShapeUtils(shape).getRotatedBounds(shape) @@ -64,7 +58,7 @@ export default function groupCommand(data: Data) { // Find the least-deep parent among the shapes and add the group as a child let minDepth = Infinity - for (let parentId of initialShapes.map((shape) => shape.parentId)) { + for (const parentId of initialShapes.map((shape) => shape.parentId)) { const depth = getShapeDepth(data, parentId) if (depth < minDepth) { minDepth = depth @@ -73,7 +67,7 @@ export default function groupCommand(data: Data) { } } - newGroupShape = createShape(ShapeType.Group, { + const newGroupShape = createShape(ShapeType.Group, { parentId: newGroupParentId, point: [commonBounds.minX, commonBounds.minY], size: [commonBounds.width, commonBounds.height], diff --git a/state/commands/handle.ts b/state/commands/handle.ts index 07f80304e..4465e56cb 100644 --- a/state/commands/handle.ts +++ b/state/commands/handle.ts @@ -3,22 +3,19 @@ import history from '../history' import { Data } from 'types' import { getPage } from 'utils/utils' import { HandleSnapshot } from 'state/sessions/handle-session' -import { getShapeUtils } from 'lib/shape-utils' -import vec from 'utils/vec' +import { getShapeUtils } from 'state/shape-utils' export default function handleCommand( data: Data, before: HandleSnapshot, after: HandleSnapshot -) { +): void { history.execute( data, new Command({ name: 'moved_handle', category: 'canvas', - do(data, isInitial) { - // if (isInitial) return - + do(data) { const { initialShape, currentPageId } = after const page = getPage(data, currentPageId) @@ -27,18 +24,6 @@ export default function handleCommand( getShapeUtils(shape) .onHandleChange(shape, initialShape.handles) .onSessionComplete(shape) - - // const bounds = getShapeUtils(shape).getBounds(shape) - - // const offset = vec.sub([bounds.minX, bounds.minY], shape.point) - - // getShapeUtils(shape).translateTo(shape, vec.add(shape.point, offset)) - - // const { start, end, bend } = page.shapes[initialShape.id].handles - - // start.point = vec.sub(start.point, offset) - // end.point = vec.sub(end.point, offset) - // bend.point = vec.sub(bend.point, offset) }, undo(data) { const { initialShape, currentPageId } = before diff --git a/state/commands/move-to-page.ts b/state/commands/move-to-page.ts index df51ae34d..e2a2a8526 100644 --- a/state/commands/move-to-page.ts +++ b/state/commands/move-to-page.ts @@ -6,16 +6,13 @@ import { getPage, getPageState, getSelectedIds, - getSelectedShapes, - getTopParentId, setToArray, uniqueArray, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' -import vec from 'utils/vec' +import { getShapeUtils } from 'state/shape-utils' import storage from 'state/storage' -export default function moveToPageCommand(data: Data, newPageId: string) { +export default function moveToPageCommand(data: Data, newPageId: string): void { const { currentPageId: oldPageId } = data const oldPage = getPage(data) const selectedIds = setToArray(getSelectedIds(data)) diff --git a/state/commands/move.ts b/state/commands/move.ts index 965613d70..b7f550010 100644 --- a/state/commands/move.ts +++ b/state/commands/move.ts @@ -8,9 +8,9 @@ import { getSelectedIds, setToArray, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function moveCommand(data: Data, type: MoveType) { +export default function moveCommand(data: Data, type: MoveType): void { const { currentPageId } = data const page = getPage(data) @@ -45,19 +45,19 @@ export default function moveCommand(data: Data, type: MoveType) { switch (type) { case MoveType.ToFront: { - for (let id in shapesByParentId) { + for (const id in shapesByParentId) { moveToFront(shapesByParentId[id], getChildren(data, id)) } break } case MoveType.ToBack: { - for (let id in shapesByParentId) { + for (const id in shapesByParentId) { moveToBack(shapesByParentId[id], getChildren(data, id)) } break } case MoveType.Forward: { - for (let id in shapesByParentId) { + for (const id in shapesByParentId) { const visited = new Set() const siblings = getChildren(data, id) shapesByParentId[id] @@ -67,7 +67,7 @@ export default function moveCommand(data: Data, type: MoveType) { break } case MoveType.Backward: { - for (let id in shapesByParentId) { + for (const id in shapesByParentId) { const visited = new Set() const siblings = getChildren(data, id) shapesByParentId[id] @@ -81,7 +81,7 @@ export default function moveCommand(data: Data, type: MoveType) { undo(data) { const page = getPage(data) - for (let id of selectedIds) { + for (const id of selectedIds) { const shape = page.shapes[id] getShapeUtils(shape).setProperty( shape, @@ -166,7 +166,7 @@ function moveBackward(shape: Shape, siblings: Shape[], visited: Set) { if (nextSibling && !visited.has(nextSibling.id)) { const nextNextSibling = siblings[index - 2] - let nextIndex = nextNextSibling + const nextIndex = nextNextSibling ? (nextSibling.childIndex + nextNextSibling.childIndex) / 2 : nextSibling.childIndex / 2 diff --git a/state/commands/mutate.ts b/state/commands/mutate.ts index 958d1d3d7..fd784b2ab 100644 --- a/state/commands/mutate.ts +++ b/state/commands/mutate.ts @@ -1,7 +1,7 @@ import Command from './command' import history from '../history' import { Data, Shape } from 'types' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { getPage, updateParents } from 'utils/utils' // Used when changing the properties of one or more shapes, @@ -12,7 +12,7 @@ export default function mutateShapesCommand( before: Shape[], after: Shape[], name = 'mutate_shapes' -) { +): void { history.execute( data, new Command({ diff --git a/state/commands/nudge.ts b/state/commands/nudge.ts index e4405cc20..e93226f07 100644 --- a/state/commands/nudge.ts +++ b/state/commands/nudge.ts @@ -2,10 +2,10 @@ import Command from './command' import history from '../history' import { Data } from 'types' import { getPage, getSelectedShapes } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import vec from 'utils/vec' -export default function nudgeCommand(data: Data, delta: number[]) { +export default function nudgeCommand(data: Data, delta: number[]): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(data) const shapeBounds = Object.fromEntries( @@ -22,7 +22,7 @@ export default function nudgeCommand(data: Data, delta: number[]) { do(data) { const { shapes } = getPage(data, currentPageId) - for (let id in shapeBounds) { + for (const id in shapeBounds) { const shape = shapes[id] getShapeUtils(shape).setProperty( shape, @@ -34,7 +34,7 @@ export default function nudgeCommand(data: Data, delta: number[]) { undo(data) { const { shapes } = getPage(data, currentPageId) - for (let id in shapeBounds) { + for (const id in shapeBounds) { const shape = shapes[id] getShapeUtils(shape).setProperty( shape, diff --git a/state/commands/paste.ts b/state/commands/paste.ts index eafe5e113..6e5806061 100644 --- a/state/commands/paste.ts +++ b/state/commands/paste.ts @@ -2,24 +2,19 @@ import Command from './command' import history from '../history' import { Data, Shape } from 'types' import { - getChildIndexAbove, getCommonBounds, - getCurrentCamera, getPage, getSelectedIds, - getSelectedShapes, - getViewport, screenToWorld, setSelectedIds, setToArray, } from 'utils/utils' import { uniqueId } from 'utils/utils' -import { current } from 'immer' import vec from 'utils/vec' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import state from 'state/state' -export default function pasteCommand(data: Data, initialShapes: Shape[]) { +export default function pasteCommand(data: Data, initialShapes: Shape[]): void { const { currentPageId } = data const center = screenToWorld( diff --git a/state/commands/reset-bounds.ts b/state/commands/reset-bounds.ts index 814c083e3..b228cc7cd 100644 --- a/state/commands/reset-bounds.ts +++ b/state/commands/reset-bounds.ts @@ -3,9 +3,9 @@ import history from '../history' import { Data } from 'types' import { getPage, getSelectedShapes, updateParents } from 'utils/utils' import { current } from 'immer' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function resetBoundsCommand(data: Data) { +export default function resetBoundsCommand(data: Data): void { const initialShapes = Object.fromEntries( getSelectedShapes(current(data)).map((shape) => [shape.id, shape]) ) diff --git a/state/commands/rotate-ccw.ts b/state/commands/rotate-ccw.ts index 51ed49d27..45d38ea20 100644 --- a/state/commands/rotate-ccw.ts +++ b/state/commands/rotate-ccw.ts @@ -8,11 +8,11 @@ import { getSelectedShapes, } from 'utils/utils' import vec from 'utils/vec' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' const PI2 = Math.PI * 2 -export default function rotateCcwCommand(data: Data) { +export default function rotateCcwCommand(data: Data): void { const { currentPageId, boundsRotation } = data const page = getPage(data) @@ -65,7 +65,7 @@ export default function rotateCcwCommand(data: Data) { do(data) { const { shapes } = getPage(data, currentPageId) - for (let id in nextShapes) { + for (const id in nextShapes) { const shape = shapes[id] if (shape.isLocked) continue @@ -79,7 +79,7 @@ export default function rotateCcwCommand(data: Data) { undo(data) { const { shapes } = getPage(data, currentPageId) - for (let id in initialShapes) { + for (const id in initialShapes) { const { point, rotation } = initialShapes[id] const shape = shapes[id] diff --git a/state/commands/rotate.ts b/state/commands/rotate.ts index cf3886f46..2c5aa354b 100644 --- a/state/commands/rotate.ts +++ b/state/commands/rotate.ts @@ -3,13 +3,13 @@ import history from '../history' import { Data } from 'types' import { RotateSnapshot } from 'state/sessions/rotate-session' import { getPage } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default function rotateCommand( data: Data, before: RotateSnapshot, after: RotateSnapshot -) { +): void { history.execute( data, new Command({ @@ -18,7 +18,7 @@ export default function rotateCommand( do(data) { const { shapes } = getPage(data) - for (let { id, point, rotation } of after.initialShapes) { + for (const { id, point, rotation } of after.initialShapes) { const shape = shapes[id] getShapeUtils(shape) .rotateBy(shape, rotation - shape.rotation) @@ -31,7 +31,7 @@ export default function rotateCommand( undo(data) { const { shapes } = getPage(data, before.currentPageId) - for (let { id, point, rotation } of before.initialShapes) { + for (const { id, point, rotation } of before.initialShapes) { const shape = shapes[id] getShapeUtils(shape) .rotateBy(shape, rotation - shape.rotation) diff --git a/state/commands/stretch.ts b/state/commands/stretch.ts index e340e3fec..6890963fe 100644 --- a/state/commands/stretch.ts +++ b/state/commands/stretch.ts @@ -1,11 +1,11 @@ import Command from './command' import history from '../history' -import { StretchType, Data, Edge, Corner } from 'types' +import { StretchType, Data, Corner } from 'types' import { getCommonBounds, getPage, getSelectedShapes } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { current } from 'immer' -export default function stretchCommand(data: Data, type: StretchType) { +export default function stretchCommand(data: Data, type: StretchType): void { const { currentPageId } = data const initialShapes = getSelectedShapes(current(data)) const entries = initialShapes.map( @@ -24,7 +24,7 @@ export default function stretchCommand(data: Data, type: StretchType) { switch (type) { case StretchType.Horizontal: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const initialShape = initialShapes[id] const shape = shapes[id] const oldBounds = boundsForShapes[id] @@ -44,7 +44,7 @@ export default function stretchCommand(data: Data, type: StretchType) { break } case StretchType.Vertical: { - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const initialShape = initialShapes[id] const shape = shapes[id] const oldBounds = boundsForShapes[id] @@ -66,7 +66,7 @@ export default function stretchCommand(data: Data, type: StretchType) { }, undo(data) { const { shapes } = getPage(data, currentPageId) - for (let id in boundsForShapes) { + for (const id in boundsForShapes) { const shape = shapes[id] const initialShape = initialShapes[id] const initialBounds = boundsForShapes[id] diff --git a/state/commands/style.ts b/state/commands/style.ts index 4deb561ae..8db264a45 100644 --- a/state/commands/style.ts +++ b/state/commands/style.ts @@ -7,10 +7,13 @@ import { getSelectedIds, setToArray, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { current } from 'immer' -export default function styleCommand(data: Data, styles: Partial) { +export default function styleCommand( + data: Data, + styles: Partial +): void { const cData = current(data) const page = getPage(cData) const { currentPageId } = cData diff --git a/state/commands/toggle.ts b/state/commands/toggle.ts index 9a8ff6950..a0b5b84f7 100644 --- a/state/commands/toggle.ts +++ b/state/commands/toggle.ts @@ -2,13 +2,13 @@ import Command from './command' import history from '../history' import { Data, Shape } from 'types' import { getPage, getSelectedShapes } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { PropsOfType } from 'types' export default function toggleCommand( data: Data, - prop: PropsOfType -) { + prop: PropsOfType +): void { const { currentPageId } = data const selectedShapes = getSelectedShapes(data) const isAllToggled = selectedShapes.every((shape) => shape[prop]) diff --git a/state/commands/transform-single.ts b/state/commands/transform-single.ts index 2bd4cf9b2..282d8df77 100644 --- a/state/commands/transform-single.ts +++ b/state/commands/transform-single.ts @@ -10,7 +10,7 @@ export default function transformSingleCommand( before: TransformSingleSnapshot, after: TransformSingleSnapshot, isCreating: boolean -) { +): void { const shape = current(getPage(data, after.currentPageId).shapes[after.id]) history.execute( diff --git a/state/commands/transform.ts b/state/commands/transform.ts index c1fefd3ca..55f93b07a 100644 --- a/state/commands/transform.ts +++ b/state/commands/transform.ts @@ -2,16 +2,13 @@ import Command from './command' import history from '../history' import { Data } from 'types' import { TransformSnapshot } from 'state/sessions/transform-session' -import { getShapeUtils } from 'lib/shape-utils' import { getPage, updateParents } from 'utils/utils' export default function transformCommand( data: Data, before: TransformSnapshot, - after: TransformSnapshot, - scaleX: number, - scaleY: number -) { + after: TransformSnapshot +): void { history.execute( data, new Command({ @@ -22,7 +19,7 @@ export default function transformCommand( const { shapes } = getPage(data) - for (let id in shapeBounds) { + for (const id in shapeBounds) { shapes[id] = shapeBounds[id].initialShape } @@ -32,7 +29,7 @@ export default function transformCommand( const { shapeBounds } = before const { shapes } = getPage(data) - for (let id in shapeBounds) { + for (const id in shapeBounds) { shapes[id] = shapeBounds[id].initialShape } diff --git a/state/commands/translate.ts b/state/commands/translate.ts index a90b38f59..40e2b45bb 100644 --- a/state/commands/translate.ts +++ b/state/commands/translate.ts @@ -1,21 +1,21 @@ import Command from './command' import history from '../history' import { TranslateSnapshot } from 'state/sessions/translate-session' -import { Data, ShapeType } from 'types' +import { Data } from 'types' import { getDocumentBranch, getPage, setSelectedIds, updateParents, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default function translateCommand( data: Data, before: TranslateSnapshot, after: TranslateSnapshot, isCloning: boolean -) { +): void { history.execute( data, new Command({ @@ -39,8 +39,8 @@ export default function translateCommand( clone.id, ]) - if (clone.type === ShapeType.Group) { - } + // if (clone.type === ShapeType.Group) { + // } } } } diff --git a/state/commands/ungroup.ts b/state/commands/ungroup.ts index fc2200066..515085075 100644 --- a/state/commands/ungroup.ts +++ b/state/commands/ungroup.ts @@ -1,16 +1,11 @@ import Command from './command' import history from '../history' import { Data, ShapeType } from 'types' -import { - getPage, - getSelectedShapes, - getShape, - setSelectedIds, -} from 'utils/utils' +import { getPage, getSelectedShapes, setSelectedIds } from 'utils/utils' import { current } from 'immer' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export default function ungroupCommand(data: Data) { +export default function ungroupCommand(data: Data): void { const cData = current(data) const { currentPageId } = cData @@ -94,10 +89,10 @@ export default function ungroupCommand(data: Data) { ) } -function getShapeDepth(data: Data, id: string, depth = 0) { - if (id === data.currentPageId) { - return depth - } +// function getShapeDepth(data: Data, id: string, depth = 0) { +// if (id === data.currentPageId) { +// return depth +// } - return getShapeDepth(data, getShape(data, id).parentId, depth + 1) -} +// return getShapeDepth(data, getShape(data, id).parentId, depth + 1) +// } diff --git a/state/cursor.ts b/state/cursor.ts index 1bfffb99b..7c5a7adff 100644 --- a/state/cursor.ts +++ b/state/cursor.ts @@ -5,7 +5,7 @@ const cursorSvgs = { } class Cursor { - setCursor(cursor: keyof typeof cursorSvgs, rotation = 0) { + setCursor(cursor: keyof typeof cursorSvgs) { document.body.style.setProperty('cursor', `url(${cursorSvgs[cursor]}.svg)`) } diff --git a/state/data.ts b/state/data.ts index 8bb3d9ad4..b5f487106 100644 --- a/state/data.ts +++ b/state/data.ts @@ -1,5 +1,4 @@ -import { Data, FontSize, ShapeType } from 'types' -import shapeUtils from 'lib/shape-utils' +import { Data } from 'types' export const defaultDocument: Data['document'] = { id: '0001', diff --git a/state/hacks.ts b/state/hacks.ts index 145076ab2..c4aca86d4 100644 --- a/state/hacks.ts +++ b/state/hacks.ts @@ -5,7 +5,6 @@ import { getSelectedIds, screenToWorld, setToArray, - setZoomCSS, } from 'utils/utils' import { freeze } from 'immer' import session from './session' @@ -19,7 +18,7 @@ import vec from 'utils/vec' * directly to the state using `forceData`. * @param info */ -export function fastDrawUpdate(info: PointerInfo) { +export function fastDrawUpdate(info: PointerInfo): void { const data = { ...state.data } session.current.update( @@ -38,7 +37,7 @@ export function fastDrawUpdate(info: PointerInfo) { state.forceData(freeze(data)) } -export function fastPanUpdate(delta: number[]) { +export function fastPanUpdate(delta: number[]): void { const data = { ...state.data } const camera = getCurrentCamera(data) camera.point = vec.sub(camera.point, vec.div(delta, camera.zoom)) @@ -48,7 +47,7 @@ export function fastPanUpdate(delta: number[]) { state.forceData(freeze(data)) } -export function fastZoomUpdate(point: number[], delta: number) { +export function fastZoomUpdate(point: number[], delta: number): void { const data = { ...state.data } const camera = getCurrentCamera(data) @@ -67,9 +66,8 @@ export function fastZoomUpdate(point: number[], delta: number) { export function fastPinchCamera( point: number[], delta: number[], - distanceDelta: number, - angleDelta: number -) { + distanceDelta: number +): void { const data = { ...state.data } const camera = getCurrentCamera(data) @@ -90,7 +88,7 @@ export function fastPinchCamera( state.forceData(freeze(data)) } -export function fastBrushSelect(point: number[]) { +export function fastBrushSelect(point: number[]): void { const data = { ...state.data } session.current.update(data, screenToWorld(point, data)) @@ -98,7 +96,7 @@ export function fastBrushSelect(point: number[]) { state.forceData(freeze(data)) } -export function fastTranslate(info: PointerInfo) { +export function fastTranslate(info: PointerInfo): void { const data = { ...state.data } session.current.update( @@ -111,7 +109,7 @@ export function fastTranslate(info: PointerInfo) { state.forceData(freeze(data)) } -export function fastTransform(info: PointerInfo) { +export function fastTransform(info: PointerInfo): void { const data = { ...state.data } session.current.update( diff --git a/state/sessions/arrow-session.ts b/state/sessions/arrow-session.ts index a10cf6985..d2998e8cf 100644 --- a/state/sessions/arrow-session.ts +++ b/state/sessions/arrow-session.ts @@ -1,4 +1,4 @@ -import { ArrowShape, Data, LineShape, RayShape } from 'types' +import { ArrowShape, Data } from 'types' import vec from 'utils/vec' import BaseSession from './base-session' import commands from 'state/commands' @@ -10,7 +10,7 @@ import { setToArray, updateParents, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default class ArrowSession extends BaseSession { points: number[][] @@ -21,12 +21,13 @@ export default class ArrowSession extends BaseSession { constructor(data: Data, id: string, point: number[], isLocked: boolean) { super(data) + isLocked this.origin = point this.points = [[0, 0]] this.snapshot = getArrowSnapshot(data, id) } - update(data: Data, point: number[], isLocked = false) { + update(data: Data, point: number[], isLocked = false): void { const { id } = this.snapshot const delta = vec.vec(this.origin, point) @@ -67,7 +68,7 @@ export default class ArrowSession extends BaseSession { updateParents(data, [shape.id]) } - cancel(data: Data) { + cancel(data: Data): void { const { id, initialShape } = this.snapshot const shape = getPage(data).shapes[id] as ArrowShape @@ -79,7 +80,7 @@ export default class ArrowSession extends BaseSession { updateParents(data, [shape.id]) } - complete(data: Data) { + complete(data: Data): void { const { id } = this.snapshot const shape = getPage(data).shapes[id] as ArrowShape @@ -100,10 +101,6 @@ export default class ArrowSession extends BaseSession { } getShapeUtils(shape) - .setProperty(shape, 'points', [ - nextHandles.start.point, - nextHandles.end.point, - ]) .setProperty(shape, 'handles', nextHandles) .setProperty(shape, 'point', newPoint) .onHandleChange(shape, nextHandles) @@ -116,6 +113,7 @@ export default class ArrowSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getArrowSnapshot(data: Data, id: string) { const initialShape = getPage(current(data)).shapes[id] as ArrowShape diff --git a/state/sessions/base-session.ts b/state/sessions/base-session.ts index 582d69703..01fa5dadb 100644 --- a/state/sessions/base-session.ts +++ b/state/sessions/base-session.ts @@ -1,17 +1,20 @@ -import { Data } from "types" +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { Data } from 'types' export default class BaseSession { - constructor(data: Data) {} + constructor(data: Data) { + null + } - update(data: Data, ...args: unknown[]) { + update(data: Data, ...args: unknown[]): void { // Update the state } - complete(data: Data, ...args: unknown[]) { + complete(data: Data, ...args: unknown[]): void { // Create a command } - cancel(data: Data) { + cancel(data: Data): void { // Clean up the change } } diff --git a/state/sessions/brush-session.ts b/state/sessions/brush-session.ts index ee0660539..ce07ad895 100644 --- a/state/sessions/brush-session.ts +++ b/state/sessions/brush-session.ts @@ -1,10 +1,9 @@ import { current } from 'immer' import { Bounds, Data, ShapeType } from 'types' import BaseSession from './base-session' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { getBoundsFromPoints, - getPage, getPageState, getShapes, getTopParentId, @@ -12,7 +11,6 @@ import { setToArray, } from 'utils/utils' import vec from 'utils/vec' -import state from 'state/state' export default class BrushSession extends BaseSession { origin: number[] @@ -26,7 +24,7 @@ export default class BrushSession extends BaseSession { this.snapshot = getBrushSnapshot(data) } - update = (data: Data, point: number[]) => { + update = (data: Data, point: number[]): void => { const { origin, snapshot } = this const brushBounds = getBoundsFromPoints([origin, point]) @@ -35,7 +33,7 @@ export default class BrushSession extends BaseSession { const selectedIds = new Set(snapshot.selectedIds) - for (let id in snapshot.shapeHitTests) { + for (const id in snapshot.shapeHitTests) { if (selectedIds.has(id)) continue const { test, selectId } = snapshot.shapeHitTests[id] @@ -58,12 +56,12 @@ export default class BrushSession extends BaseSession { data.brush = brushBounds } - cancel = (data: Data) => { + cancel = (data: Data): void => { data.brush = undefined setSelectedIds(data, this.snapshot.selectedIds) } - complete = (data: Data) => { + complete = (data: Data): void => { data.brush = undefined } } @@ -73,6 +71,7 @@ export default class BrushSession extends BaseSession { * not already selected, the shape's id and a test to see whether the * brush will intersect that shape. For tests, start broad -> fine. */ +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getBrushSnapshot(data: Data) { const cData = current(data) const { selectedIds } = getPageState(cData) diff --git a/state/sessions/direction-session.ts b/state/sessions/direction-session.ts index 99d5468e2..6821fdd0e 100644 --- a/state/sessions/direction-session.ts +++ b/state/sessions/direction-session.ts @@ -16,36 +16,37 @@ export default class DirectionSession extends BaseSession { this.snapshot = getDirectionSnapshot(data) } - update(data: Data, point: number[]) { + update(data: Data, point: number[]): void { const { shapes } = this.snapshot const page = getPage(data) - for (let { id } of shapes) { + for (const { id } of shapes) { const shape = page.shapes[id] as RayShape | LineShape shape.direction = vec.uni(vec.vec(shape.point, point)) } } - cancel(data: Data) { + cancel(data: Data): void { const page = getPage(data, this.snapshot.currentPageId) - for (let { id, direction } of this.snapshot.shapes) { + for (const { id, direction } of this.snapshot.shapes) { const shape = page.shapes[id] as RayShape | LineShape shape.direction = direction } } - complete(data: Data) { + complete(data: Data): void { commands.direct(data, this.snapshot, getDirectionSnapshot(data)) } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getDirectionSnapshot(data: Data) { const { shapes } = getPage(current(data)) - let snapshapes: { id: string; direction: number[] }[] = [] + const snapshapes: { id: string; direction: number[] }[] = [] getSelectedIds(data).forEach((id) => { const shape = shapes[id] diff --git a/state/sessions/draw-session.ts b/state/sessions/draw-session.ts index 3bbf9a7b1..1eb0566dc 100644 --- a/state/sessions/draw-session.ts +++ b/state/sessions/draw-session.ts @@ -1,8 +1,8 @@ import { current } from 'immer' import { Data, DrawShape } from 'types' import BaseSession from './base-session' -import { getShapeUtils } from 'lib/shape-utils' -import { getPage, getShape, isMobile, updateParents } from 'utils/utils' +import { getShapeUtils } from 'state/shape-utils' +import { getPage, getShape, updateParents } from 'utils/utils' import vec from 'utils/vec' import commands from 'state/commands' export default class BrushSession extends BaseSession { @@ -20,6 +20,7 @@ export default class BrushSession extends BaseSession { this.previous = point this.last = point this.snapshot = getDrawSnapshot(data, id) + isLocked // Add a first point but don't update the shape yet. We'll update // when the draw session ends; if the user hasn't added additional @@ -38,7 +39,7 @@ export default class BrushSession extends BaseSession { point: number[], pressure: number, isLocked = false - ) => { + ): void => { const { snapshot } = this const delta = vec.vec(this.origin, point) @@ -119,7 +120,7 @@ export default class BrushSession extends BaseSession { updateParents(data, [shape.id]) } - cancel = (data: Data) => { + cancel = (data: Data): void => { const { snapshot } = this const shape = getShape(data, snapshot.id) as DrawShape getShapeUtils(shape).translateTo(shape, snapshot.point) @@ -127,7 +128,7 @@ export default class BrushSession extends BaseSession { updateParents(data, [shape.id]) } - complete = (data: Data) => { + complete = (data: Data): void => { const { snapshot } = this const page = getPage(data) const shape = page.shapes[snapshot.id] as DrawShape @@ -144,6 +145,7 @@ export default class BrushSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getDrawSnapshot(data: Data, shapeId: string) { const page = getPage(current(data)) const { points, point } = page.shapes[shapeId] as DrawShape diff --git a/state/sessions/edit-session.ts b/state/sessions/edit-session.ts index a6f239d29..893195fbc 100644 --- a/state/sessions/edit-session.ts +++ b/state/sessions/edit-session.ts @@ -1,16 +1,9 @@ -import { Data, LineShape, RayShape, Shape } from 'types' -import vec from 'utils/vec' +import { Data, Shape } from 'types' import BaseSession from './base-session' import commands from 'state/commands' import { current } from 'immer' -import { - getPage, - getPageState, - getSelectedIds, - getSelectedShapes, - getShape, -} from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getPage, getSelectedShapes, getShape } from 'utils/utils' +import { getShapeUtils } from 'state/shape-utils' export default class EditSession extends BaseSession { snapshot: EditSnapshot @@ -20,7 +13,7 @@ export default class EditSession extends BaseSession { this.snapshot = getEditSnapshot(data) } - update(data: Data, change: Partial) { + update(data: Data, change: Partial): void { const initialShape = this.snapshot.initialShape const shape = getShape(data, initialShape.id) const utils = getShapeUtils(shape) @@ -29,17 +22,18 @@ export default class EditSession extends BaseSession { }) } - cancel(data: Data) { + cancel(data: Data): void { const initialShape = this.snapshot.initialShape const page = getPage(data) page.shapes[initialShape.id] = initialShape } - complete(data: Data) { + complete(data: Data): void { commands.edit(data, this.snapshot, getEditSnapshot(data)) } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getEditSnapshot(data: Data) { const initialShape = getSelectedShapes(current(data))[0] diff --git a/state/sessions/handle-session.ts b/state/sessions/handle-session.ts index a3eb82fd4..0a5aff1b7 100644 --- a/state/sessions/handle-session.ts +++ b/state/sessions/handle-session.ts @@ -4,7 +4,7 @@ import BaseSession from './base-session' import commands from 'state/commands' import { current } from 'immer' import { getPage } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default class HandleSession extends BaseSession { delta = [0, 0] @@ -17,7 +17,7 @@ export default class HandleSession extends BaseSession { this.snapshot = getHandleSnapshot(data, shapeId, handleId) } - update(data: Data, point: number[], isAligned: boolean) { + update(data: Data, point: number[], isAligned: boolean): void { const { currentPageId, handleId, initialShape } = this.snapshot const shape = getPage(data, currentPageId).shapes[initialShape.id] @@ -45,12 +45,12 @@ export default class HandleSession extends BaseSession { }) } - cancel(data: Data) { - const { currentPageId, handleId, initialShape } = this.snapshot + cancel(data: Data): void { + const { currentPageId, initialShape } = this.snapshot getPage(data, currentPageId).shapes[initialShape.id] = initialShape } - complete(data: Data) { + complete(data: Data): void { commands.handle( data, this.snapshot, @@ -63,6 +63,7 @@ export default class HandleSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getHandleSnapshot( data: Data, shapeId: string, diff --git a/state/sessions/rotate-session.ts b/state/sessions/rotate-session.ts index 4f50b6ae7..76446e9c5 100644 --- a/state/sessions/rotate-session.ts +++ b/state/sessions/rotate-session.ts @@ -8,7 +8,6 @@ import { getBoundsCenter, getCommonBounds, getPage, - getSelectedShapes, getRotatedBounds, getShapeBounds, updateParents, @@ -16,7 +15,7 @@ import { setToArray, getSelectedIds, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' const PI2 = Math.PI * 2 @@ -32,7 +31,7 @@ export default class RotateSession extends BaseSession { this.snapshot = getRotateSnapshot(data) } - update(data: Data, point: number[], isLocked: boolean) { + update(data: Data, point: number[], isLocked: boolean): void { const { commonBoundsCenter, initialShapes } = this.snapshot const page = getPage(data) @@ -50,7 +49,7 @@ export default class RotateSession extends BaseSession { data.boundsRotation = (PI2 + (this.snapshot.boundsRotation + rot)) % PI2 - for (let { id, center, offset, rotation } of initialShapes) { + for (const { id, center, offset, rotation } of initialShapes) { const shape = page.shapes[id] const nextRotation = @@ -76,11 +75,11 @@ export default class RotateSession extends BaseSession { ) } - cancel(data: Data) { + cancel(data: Data): void { const { currentPageId, initialShapes } = this.snapshot const page = getPage(data, currentPageId) - for (let { id, point, rotation } of initialShapes) { + for (const { id, point, rotation } of initialShapes) { const shape = page.shapes[id] getShapeUtils(shape) .rotateTo(shape, rotation, rotation - shape.rotation) @@ -93,12 +92,13 @@ export default class RotateSession extends BaseSession { ) } - complete(data: Data) { + complete(data: Data): void { if (!this.snapshot.hasUnlockedShapes) return commands.rotate(data, this.snapshot, getRotateSnapshot(data)) } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getRotateSnapshot(data: Data) { const cData = current(data) const page = getPage(cData) diff --git a/state/sessions/transform-session.ts b/state/sessions/transform-session.ts index 9fa358477..b486f6ca6 100644 --- a/state/sessions/transform-session.ts +++ b/state/sessions/transform-session.ts @@ -1,9 +1,8 @@ -import { Data, Edge, Corner, Bounds } from 'types' +import { Data, Edge, Corner } from 'types' import vec from 'utils/vec' import BaseSession from './base-session' import commands from 'state/commands' -import { current, freeze } from 'immer' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { deepClone, getBoundsCenter, @@ -32,7 +31,7 @@ export default class TransformSession extends BaseSession { this.snapshot = getTransformSnapshot(data, transformType) } - update(data: Data, point: number[], isAspectRatioLocked = false) { + update(data: Data, point: number[], isAspectRatioLocked = false): void { const { transformType } = this const { shapeBounds, initialBounds, isAllAspectRatioLocked } = this.snapshot @@ -52,7 +51,7 @@ export default class TransformSession extends BaseSession { // Now work backward to calculate a new bounding box for each of the shapes. - for (let id in shapeBounds) { + for (const id in shapeBounds) { const { initialShape, initialShapeBounds, transformOrigin } = shapeBounds[id] @@ -80,12 +79,12 @@ export default class TransformSession extends BaseSession { updateParents(data, Object.keys(shapeBounds)) } - cancel(data: Data) { + cancel(data: Data): void { const { currentPageId, shapeBounds } = this.snapshot const { shapes } = getPage(data, currentPageId) - for (let id in shapeBounds) { + for (const id in shapeBounds) { const shape = shapes[id] const { initialShape, initialShapeBounds, transformOrigin } = @@ -103,7 +102,7 @@ export default class TransformSession extends BaseSession { } } - complete(data: Data) { + complete(data: Data): void { const { initialShapes, hasUnlockedShapes } = this.snapshot if (!hasUnlockedShapes) return @@ -118,6 +117,7 @@ export default class TransformSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getTransformSnapshot(data: Data, transformType: Edge | Corner) { const { currentPageId } = data const page = getPage(data) @@ -161,8 +161,8 @@ export function getTransformSnapshot(data: Data, transformType: Edge | Corner) { const initialShapeBounds = shapesBounds[shape.id] const ic = getBoundsCenter(initialShapeBounds) - let ix = (ic[0] - initialInnerBounds.minX) / initialInnerBounds.width - let iy = (ic[1] - initialInnerBounds.minY) / initialInnerBounds.height + const ix = (ic[0] - initialInnerBounds.minX) / initialInnerBounds.width + const iy = (ic[1] - initialInnerBounds.minY) / initialInnerBounds.height return [ shape.id, diff --git a/state/sessions/transform-single-session.ts b/state/sessions/transform-single-session.ts index 927ec3688..a84530f0d 100644 --- a/state/sessions/transform-single-session.ts +++ b/state/sessions/transform-single-session.ts @@ -3,7 +3,7 @@ import vec from 'utils/vec' import BaseSession from './base-session' import commands from 'state/commands' import { current } from 'immer' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' import { getTransformedBoundingBox, getPage, @@ -33,7 +33,7 @@ export default class TransformSingleSession extends BaseSession { this.isCreating = isCreating } - update(data: Data, point: number[], isAspectRatioLocked = false) { + update(data: Data, point: number[], isAspectRatioLocked = false): void { const { transformType } = this const { initialShapeBounds, currentPageId, initialShape, id } = @@ -65,7 +65,7 @@ export default class TransformSingleSession extends BaseSession { updateParents(data, [id]) } - cancel(data: Data) { + cancel(data: Data): void { const { id, initialShape } = this.snapshot const page = getPage(data) @@ -74,7 +74,7 @@ export default class TransformSingleSession extends BaseSession { updateParents(data, [id]) } - complete(data: Data) { + complete(data: Data): void { if (!this.snapshot.hasUnlockedShape) return commands.transformSingle( @@ -86,6 +86,7 @@ export default class TransformSingleSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getTransformSingleSnapshot( data: Data, transformType: Edge | Corner diff --git a/state/sessions/translate-session.ts b/state/sessions/translate-session.ts index fd592b7cc..f05153ea2 100644 --- a/state/sessions/translate-session.ts +++ b/state/sessions/translate-session.ts @@ -1,4 +1,4 @@ -import { Data, GroupShape, Shape, ShapeType } from 'types' +import { Data, GroupShape, ShapeType } from 'types' import vec from 'utils/vec' import BaseSession from './base-session' import commands from 'state/commands' @@ -8,13 +8,11 @@ import { getChildIndexAbove, getDocumentBranch, getPage, - getPageState, getSelectedShapes, setSelectedIds, - setToArray, updateParents, } from 'utils/utils' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' export default class TranslateSession extends BaseSession { delta = [0, 0] @@ -29,7 +27,12 @@ export default class TranslateSession extends BaseSession { this.snapshot = getTranslateSnapshot(data) } - update(data: Data, point: number[], isAligned: boolean, isCloning: boolean) { + update( + data: Data, + point: number[], + isAligned: boolean, + isCloning: boolean + ): void { const { currentPageId, clones, initialShapes, initialParents } = this.snapshot const { shapes } = getPage(data, currentPageId) @@ -139,7 +142,7 @@ export default class TranslateSession extends BaseSession { } } - cancel(data: Data) { + cancel(data: Data): void { const { initialShapes, initialParents, clones, currentPageId } = this.snapshot const { shapes } = getPage(data, currentPageId) @@ -166,7 +169,7 @@ export default class TranslateSession extends BaseSession { ) } - complete(data: Data) { + complete(data: Data): void { if (!this.snapshot.hasUnlockedShapes) return commands.translate( @@ -178,6 +181,7 @@ export default class TranslateSession extends BaseSession { } } +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function getTranslateSnapshot(data: Data) { const cData = current(data) @@ -228,23 +232,23 @@ export function getTranslateSnapshot(data: Data) { export type TranslateSnapshot = ReturnType -function cloneGroup(data: Data, clone: Shape): Shape[] { - if (clone.type !== ShapeType.Group) { - return [clone] - } +// function cloneGroup(data: Data, clone: Shape): Shape[] { +// if (clone.type !== ShapeType.Group) { +// return [clone] +// } - const page = getPage(data) - const childClones = clone.children.flatMap((id) => { - const newId = uniqueId() - const source = page.shapes[id] - const next = { ...source, id: newId, parentId: clone.id } +// const page = getPage(data) +// const childClones = clone.children.flatMap((id) => { +// const newId = uniqueId() +// const source = page.shapes[id] +// const next = { ...source, id: newId, parentId: clone.id } - if (next.type === ShapeType.Group) { - return [next, ...cloneGroup(data, next)] - } +// if (next.type === ShapeType.Group) { +// return [next, ...cloneGroup(data, next)] +// } - return [next] - }) +// return [next] +// }) - return [clone, ...childClones] -} +// return [clone, ...childClones] +// } diff --git a/lib/shape-styles.ts b/state/shape-styles.ts similarity index 87% rename from lib/shape-styles.ts rename to state/shape-styles.ts index 5629fe246..b1037ed03 100644 --- a/lib/shape-styles.ts +++ b/state/shape-styles.ts @@ -1,5 +1,5 @@ import { SVGProps } from 'react' -import { ColorStyle, DashStyle, FontSize, ShapeStyles, SizeStyle } from 'types' +import { ColorStyle, DashStyle, ShapeStyles, SizeStyle } from 'types' export const strokes: Record = { [ColorStyle.White]: 'rgba(248, 249, 250, 1.000)', @@ -50,19 +50,22 @@ const fontSizes = { auto: 'auto', } -export function getStrokeWidth(size: SizeStyle) { +export function getStrokeWidth(size: SizeStyle): number { return strokeWidths[size] } -export function getStrokeDashArray(dash: DashStyle, strokeWidth: number) { +export function getStrokeDashArray( + dash: DashStyle, + strokeWidth: number +): number[] { return dashArrays[dash](strokeWidth) } -export function getFontSize(size: SizeStyle) { +export function getFontSize(size: SizeStyle): number { return fontSizes[size] } -export function getFontStyle(scale: number, style: ShapeStyles) { +export function getFontStyle(scale: number, style: ShapeStyles): string { const fontSize = getFontSize(style.size) return `${fontSize * scale}px/1.4 Verveine Regular` diff --git a/lib/shape-utils/arrow.tsx b/state/shape-utils/arrow.tsx similarity index 96% rename from lib/shape-utils/arrow.tsx rename to state/shape-utils/arrow.tsx index 0f626e37e..c88dc0aa0 100644 --- a/lib/shape-utils/arrow.tsx +++ b/state/shape-utils/arrow.tsx @@ -1,4 +1,4 @@ -import { getArcLength, lerp, uniqueId } from 'utils/utils' +import { getArcLength, uniqueId } from 'utils/utils' import vec from 'utils/vec' import { getSvgPathFromStroke, @@ -7,22 +7,18 @@ import { translateBounds, pointsBetween, } from 'utils/utils' -import { ArrowShape, Bounds, DashStyle, ShapeHandle, ShapeType } from 'types' -import { registerShapeUtils } from './index' +import { ArrowShape, DashStyle, ShapeHandle, ShapeType } from 'types' import { circleFromThreePoints, isAngleBetween } from 'utils/utils' -import { pointInBounds } from 'utils/bounds' +import { pointInBounds } from 'utils/hitTests' import { intersectArcBounds, intersectLineSegmentBounds, } from 'utils/intersections' import { pointInCircle } from 'utils/hitTests' -import { - defaultStyle, - getShapeStyle, - getStrokeDashArray, -} from 'lib/shape-styles' +import { defaultStyle, getShapeStyle } from 'state/shape-styles' import getStroke from 'perfect-freehand' import React from 'react' +import { registerShapeUtils } from './register' const pathCache = new WeakMap([]) @@ -309,8 +305,8 @@ const arrow = registerShapeUtils({ handles.forEach((handle) => { const [x, y] = initialShape.handles[handle].point - let nw = x / initialShapeBounds.width - let nh = y / initialShapeBounds.height + const nw = x / initialShapeBounds.width + const nh = y / initialShapeBounds.height shape.handles[handle].point = [ bounds.width * (scaleX < 0 ? 1 - nw : nw), @@ -339,7 +335,7 @@ const arrow = registerShapeUtils({ // const oldBounds = this.getRotatedBounds(shape) // const prevCenter = getBoundsCenter(oldBounds) - for (let id in handles) { + for (const id in handles) { const handle = handles[id] shape.handles[handle.id] = handle @@ -446,8 +442,6 @@ function renderPath(shape: ArrowShape, endAngle = 0) { const strokeWidth = +getShapeStyle(style).strokeWidth * 2 - const styles = getShapeStyle(shape.style) - const sw = strokeWidth // Start diff --git a/lib/shape-utils/circle.tsx b/state/shape-utils/circle.tsx similarity index 92% rename from lib/shape-utils/circle.tsx rename to state/shape-utils/circle.tsx index ba525a45c..be32bd4fa 100644 --- a/lib/shape-utils/circle.tsx +++ b/state/shape-utils/circle.tsx @@ -1,12 +1,12 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' -import { CircleShape, ColorStyle, DashStyle, ShapeType, SizeStyle } from 'types' -import { registerShapeUtils } from './index' +import { CircleShape, ShapeType } from 'types' import { boundsContained } from 'utils/bounds' import { intersectCircleBounds } from 'utils/intersections' import { pointInCircle } from 'utils/hitTests' import { translateBounds } from 'utils/utils' -import { defaultStyle, getShapeStyle } from 'lib/shape-styles' +import { defaultStyle, getShapeStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const circle = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -108,7 +108,7 @@ const circle = registerShapeUtils({ return this }, - transformSingle(shape, bounds, info) { + transformSingle(shape, bounds) { shape.radius = Math.min(bounds.width, bounds.height) / 2 shape.point = [bounds.minX, bounds.minY] return this diff --git a/lib/shape-utils/dot.tsx b/state/shape-utils/dot.tsx similarity index 92% rename from lib/shape-utils/dot.tsx rename to state/shape-utils/dot.tsx index ed7782119..04873a738 100644 --- a/lib/shape-utils/dot.tsx +++ b/state/shape-utils/dot.tsx @@ -1,11 +1,10 @@ import { uniqueId } from 'utils/utils' -import vec from 'utils/vec' import { DotShape, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { boundsContained } from 'utils/bounds' import { intersectCircleBounds } from 'utils/intersections' import { translateBounds } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const dot = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -62,7 +61,7 @@ const dot = registerShapeUtils({ return shape.point }, - hitTest(shape, test) { + hitTest() { return true }, diff --git a/lib/shape-utils/draw.tsx b/state/shape-utils/draw.tsx similarity index 97% rename from lib/shape-utils/draw.tsx rename to state/shape-utils/draw.tsx index 56ce457e0..7697db964 100644 --- a/lib/shape-utils/draw.tsx +++ b/state/shape-utils/draw.tsx @@ -1,7 +1,6 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { DashStyle, DrawShape, ShapeStyles, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { intersectPolylineBounds } from 'utils/intersections' import { boundsContain } from 'utils/bounds' import getStroke, { getStrokePoints } from 'perfect-freehand' @@ -11,7 +10,8 @@ import { getSvgPathFromStroke, translateBounds, } from 'utils/utils' -import { defaultStyle, getShapeStyle, strokes } from 'lib/shape-styles' +import { defaultStyle, getShapeStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const rotatedCache = new WeakMap([]) const pathCache = new WeakMap([]) @@ -102,7 +102,7 @@ const draw = registerShapeUtils({ }, hitTest(shape, point) { - let pt = vec.sub(point, shape.point) + const pt = vec.sub(point, shape.point) const min = +getShapeStyle(shape.style).strokeWidth return shape.points.some( (curr, i) => diff --git a/lib/shape-utils/ellipse.tsx b/state/shape-utils/ellipse.tsx similarity index 97% rename from lib/shape-utils/ellipse.tsx rename to state/shape-utils/ellipse.tsx index f81df65f9..823103b47 100644 --- a/lib/shape-utils/ellipse.tsx +++ b/state/shape-utils/ellipse.tsx @@ -1,13 +1,14 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { EllipseShape, ShapeType } from 'types' -import { getShapeUtils, registerShapeUtils } from './index' +import { getShapeUtils } from './index' import { boundsContained, getRotatedEllipseBounds } from 'utils/bounds' import { intersectEllipseBounds } from 'utils/intersections' import { pointInEllipse } from 'utils/hitTests' import { ease, getSvgPathFromStroke, rng, translateBounds } from 'utils/utils' -import { defaultStyle, getShapeStyle } from 'lib/shape-styles' +import { defaultStyle, getShapeStyle } from 'state/shape-styles' import getStroke from 'perfect-freehand' +import { registerShapeUtils } from './register' const pathCache = new WeakMap([]) diff --git a/lib/shape-utils/group.tsx b/state/shape-utils/group.tsx similarity index 91% rename from lib/shape-utils/group.tsx rename to state/shape-utils/group.tsx index 04e1b4652..162c07af9 100644 --- a/lib/shape-utils/group.tsx +++ b/state/shape-utils/group.tsx @@ -1,24 +1,11 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' -import { - GroupShape, - RectangleShape, - ShapeType, - Bounds, - Corner, - Edge, -} from 'types' -import { getShapeUtils, registerShapeUtils } from './index' -import { - getBoundsCenter, - getCommonBounds, - getRotatedCorners, - rotateBounds, - translateBounds, -} from 'utils/utils' -import { defaultStyle, getShapeStyle } from 'lib/shape-styles' +import { GroupShape, ShapeType } from 'types' +import { getShapeUtils } from './index' +import { getCommonBounds, translateBounds } from 'utils/utils' +import { defaultStyle } from 'state/shape-styles' import styled from 'styles' -import { boundsContainPolygon } from 'utils/bounds' +import { registerShapeUtils } from './register' const group = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -82,7 +69,7 @@ const group = registerShapeUtils({ return false }, - hitTestBounds(shape, brushBounds) { + hitTestBounds() { return false }, diff --git a/state/shape-utils/index.tsx b/state/shape-utils/index.tsx new file mode 100644 index 000000000..a4ee9f722 --- /dev/null +++ b/state/shape-utils/index.tsx @@ -0,0 +1,45 @@ +import { Shape, ShapeType, ShapeByType, ShapeUtility } from 'types' +import circle from './circle' +import dot from './dot' +import polyline from './polyline' +import rectangle from './rectangle' +import ellipse from './ellipse' +import line from './line' +import ray from './ray' +import draw from './draw' +import arrow from './arrow' +import group from './group' +import text from './text' + +// A mapping of shape types to shape utilities. +const shapeUtilityMap: Record> = { + [ShapeType.Circle]: circle, + [ShapeType.Dot]: dot, + [ShapeType.Polyline]: polyline, + [ShapeType.Rectangle]: rectangle, + [ShapeType.Ellipse]: ellipse, + [ShapeType.Line]: line, + [ShapeType.Ray]: ray, + [ShapeType.Draw]: draw, + [ShapeType.Arrow]: arrow, + [ShapeType.Text]: text, + [ShapeType.Group]: group, +} + +/** + * A helper to retrieve a shape utility based on a shape object. + * @param shape + * @returns + */ +export function getShapeUtils(shape: T): ShapeUtility { + return shapeUtilityMap[shape?.type] as ShapeUtility +} + +export function createShape( + type: T, + props: Partial> +): ShapeByType { + return shapeUtilityMap[type].create(props) as ShapeByType +} + +export default shapeUtilityMap diff --git a/lib/shape-utils/line.tsx b/state/shape-utils/line.tsx similarity index 93% rename from lib/shape-utils/line.tsx rename to state/shape-utils/line.tsx index aa7011029..91958397b 100644 --- a/lib/shape-utils/line.tsx +++ b/state/shape-utils/line.tsx @@ -1,13 +1,12 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { LineShape, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { boundsContained } from 'utils/bounds' import { intersectCircleBounds } from 'utils/intersections' import { ThinLine } from 'components/canvas/misc' import { translateBounds } from 'utils/utils' -import styled from 'styles' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const line = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -73,7 +72,7 @@ const line = registerShapeUtils({ return shape.point }, - hitTest(shape, test) { + hitTest() { return true }, diff --git a/lib/shape-utils/notes.md b/state/shape-utils/notes.md similarity index 100% rename from lib/shape-utils/notes.md rename to state/shape-utils/notes.md diff --git a/lib/shape-utils/polyline.tsx b/state/shape-utils/polyline.tsx similarity index 94% rename from lib/shape-utils/polyline.tsx rename to state/shape-utils/polyline.tsx index 14d3a5949..c18a8390d 100644 --- a/lib/shape-utils/polyline.tsx +++ b/state/shape-utils/polyline.tsx @@ -1,11 +1,11 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { PolylineShape, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { intersectPolylineBounds } from 'utils/intersections' import { boundsContainPolygon } from 'utils/bounds' import { getBoundsFromPoints, translateBounds } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const polyline = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -52,11 +52,11 @@ const polyline = registerShapeUtils({ }, hitTest(shape, point) { - let pt = vec.sub(point, shape.point) + const pt = vec.sub(point, shape.point) let prev = shape.points[0] for (let i = 1; i < shape.points.length; i++) { - let curr = shape.points[i] + const curr = shape.points[i] if (vec.distanceToLineSegment(prev, curr, pt) < 4) { return true } diff --git a/lib/shape-utils/ray.tsx b/state/shape-utils/ray.tsx similarity index 94% rename from lib/shape-utils/ray.tsx rename to state/shape-utils/ray.tsx index 03d9a3524..5271d6aff 100644 --- a/lib/shape-utils/ray.tsx +++ b/state/shape-utils/ray.tsx @@ -1,12 +1,12 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { RayShape, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { boundsContained } from 'utils/bounds' import { intersectCircleBounds } from 'utils/intersections' import { ThinLine } from 'components/canvas/misc' import { translateBounds } from 'utils/utils' -import { defaultStyle } from 'lib/shape-styles' +import { defaultStyle } from 'state/shape-styles' +import { registerShapeUtils } from './register' const ray = registerShapeUtils({ boundsCache: new WeakMap([]), @@ -71,7 +71,7 @@ const ray = registerShapeUtils({ return shape.point }, - hitTest(shape, test) { + hitTest() { return true }, diff --git a/lib/shape-utils/rectangle.tsx b/state/shape-utils/rectangle.tsx similarity index 96% rename from lib/shape-utils/rectangle.tsx rename to state/shape-utils/rectangle.tsx index cf736455c..fbc44eb52 100644 --- a/lib/shape-utils/rectangle.tsx +++ b/state/shape-utils/rectangle.tsx @@ -1,7 +1,6 @@ import { uniqueId } from 'utils/utils' import vec from 'utils/vec' import { RectangleShape, ShapeType } from 'types' -import { registerShapeUtils } from './index' import { getSvgPathFromStroke, translateBounds, @@ -9,8 +8,9 @@ import { shuffleArr, pointsBetween, } from 'utils/utils' -import { defaultStyle, getShapeStyle } from 'lib/shape-styles' +import { defaultStyle, getShapeStyle } from 'state/shape-styles' import getStroke from 'perfect-freehand' +import { registerShapeUtils } from './register' const pathCache = new WeakMap([]) @@ -132,7 +132,7 @@ function renderPath(shape: RectangleShape) { const baseOffset = +styles.strokeWidth / 2 - const offsets = Array.from(Array(4)).map((_, i) => [ + const offsets = Array.from(Array(4)).map(() => [ getRandom() * baseOffset, getRandom() * baseOffset, ]) diff --git a/state/shape-utils/register.tsx b/state/shape-utils/register.tsx new file mode 100644 index 000000000..7c964a02d --- /dev/null +++ b/state/shape-utils/register.tsx @@ -0,0 +1,165 @@ +import { Shape, ShapeUtility } from 'types' +import vec from 'utils/vec' +import { + getBoundsCenter, + getBoundsFromPoints, + getRotatedCorners, +} from 'utils/utils' +import { boundsCollidePolygon, boundsContainPolygon } from 'utils/bounds' +import { uniqueId } from 'utils/utils' +import React from 'react' +import { pointInBounds } from 'utils/hitTests' + +function getDefaultShapeUtil(): ShapeUtility { + return { + boundsCache: new WeakMap(), + canTransform: true, + canChangeAspectRatio: true, + canStyleFill: true, + canEdit: false, + isShy: false, + isParent: false, + isForeignObject: false, + + create(props) { + return { + id: uniqueId(), + isGenerated: false, + point: [0, 0], + name: 'Shape', + parentId: 'page1', + childIndex: 0, + rotation: 0, + isAspectRatioLocked: false, + isLocked: false, + isHidden: false, + ...props, + } as T + }, + + render(shape) { + return + }, + + translateBy(shape, delta) { + shape.point = vec.round(vec.add(shape.point, delta)) + return this + }, + + translateTo(shape, point) { + shape.point = vec.round(point) + return this + }, + + rotateTo(shape, rotation) { + shape.rotation = rotation + return this + }, + + rotateBy(shape, rotation) { + shape.rotation += rotation + return this + }, + + transform(shape, bounds) { + shape.point = [bounds.minX, bounds.minY] + return this + }, + + transformSingle(shape, bounds, info) { + return this.transform(shape, bounds, info) + }, + + onChildrenChange() { + return this + }, + + onBindingChange() { + return this + }, + + onHandleChange() { + return this + }, + + onDoubleFocus() { + return this + }, + + onBoundsReset() { + return this + }, + + onSessionComplete() { + return this + }, + + getBounds(shape) { + const [x, y] = shape.point + return { + minX: x, + minY: y, + maxX: x + 1, + maxY: y + 1, + width: 1, + height: 1, + } + }, + + getRotatedBounds(shape) { + return getBoundsFromPoints( + getRotatedCorners(this.getBounds(shape), shape.rotation) + ) + }, + + getCenter(shape) { + return getBoundsCenter(this.getBounds(shape)) + }, + + hitTest(shape, point) { + return pointInBounds(point, this.getBounds(shape)) + }, + + hitTestBounds(shape, brushBounds) { + const rotatedCorners = getRotatedCorners( + this.getBounds(shape), + shape.rotation + ) + + return ( + boundsContainPolygon(brushBounds, rotatedCorners) || + boundsCollidePolygon(brushBounds, rotatedCorners) + ) + }, + + setProperty(shape, prop, value) { + shape[prop] = value + return this + }, + + applyStyles(shape, style) { + Object.assign(shape.style, style) + return this + }, + + shouldDelete() { + return false + }, + + invalidate(shape) { + this.boundsCache.delete(shape) + return this + }, + } +} + +/** + * A factory of shape utilities, with typing enforced. + * @param shape + * @returns + */ +export function registerShapeUtils( + shapeUtil: Partial> +): ShapeUtility { + return Object.freeze({ ...getDefaultShapeUtil(), ...shapeUtil }) +} diff --git a/lib/shape-utils/text.tsx b/state/shape-utils/text.tsx similarity index 89% rename from lib/shape-utils/text.tsx rename to state/shape-utils/text.tsx index 6e096e68a..7e8bc1573 100644 --- a/lib/shape-utils/text.tsx +++ b/state/shape-utils/text.tsx @@ -1,16 +1,15 @@ import { uniqueId, isMobile } from 'utils/utils' import vec from 'utils/vec' -import { TextShape, ShapeType, FontSize, SizeStyle } from 'types' -import { registerShapeUtils } from './index' +import { TextShape, ShapeType, FontSize } from 'types' import { defaultStyle, getFontSize, getFontStyle, getShapeStyle, -} from 'lib/shape-styles' +} from 'state/shape-styles' import styled from 'styles' import state from 'state' -import { useEffect, useRef } from 'react' +import { registerShapeUtils } from './register' // A div used for measurement @@ -120,7 +119,7 @@ const text = registerShapeUtils({ fontSize={fontSize} width={bounds.width} height={bounds.height} - dominant-baseline="hanging" + dominantBaseline="hanging" > {str} @@ -183,11 +182,11 @@ const text = registerShapeUtils({ return this.boundsCache.get(shape) }, - hitTest(shape, test) { + hitTest() { return true }, - transform(shape, bounds, { initialShape, transformOrigin, scaleX, scaleY }) { + transform(shape, bounds, { initialShape, scaleX, scaleY }) { if (shape.rotation === 0 && !shape.isAspectRatioLocked) { shape.point = [bounds.minX, bounds.minY] shape.scale = initialShape.scale * Math.abs(scaleX) @@ -247,23 +246,6 @@ const text = registerShapeUtils({ export default text -const StyledText = styled('div', { - width: '100%', - height: '100%', - border: 'none', - padding: '4px', - whiteSpace: 'pre', - minHeight: 1, - minWidth: 1, - outline: 0, - backgroundColor: 'transparent', - overflow: 'hidden', - pointerEvents: 'none', - userSelect: 'none', - WebkitUserSelect: 'none', - display: 'inline-block', -}) - const StyledTextArea = styled('textarea', { zIndex: 1, width: '100%', diff --git a/state/state.ts b/state/state.ts index 1fc1ed281..ec7a5d6c8 100644 --- a/state/state.ts +++ b/state/state.ts @@ -1,6 +1,6 @@ import { createSelectorHook, createState } from '@state-designer/react' -import { updateFromCode } from 'lib/code/generate' -import { createShape, getShapeUtils } from 'lib/shape-utils' +import { updateFromCode } from './code/generate' +import { createShape, getShapeUtils } from './shape-utils' import vec from 'utils/vec' import inputs from './inputs' import history from './history' @@ -26,8 +26,6 @@ import { getSelectedIds, setSelectedIds, getPageState, - getShapes, - setToArray, } from 'utils/utils' import { Data, @@ -45,10 +43,9 @@ import { DashStyle, SizeStyle, ColorStyle, - FontSize, } from 'types' import session from './session' -import { pointInBounds } from 'utils/bounds' +import { pointInBounds } from 'utils/hitTests' const initialData: Data = { isReadOnly: false, @@ -1172,7 +1169,7 @@ const state = createState({ }, // Direction - startDirectionSession(data, payload: PointerInfo) { + startDirectionSession(data) { session.current = new Sessions.DirectionSession( data, screenToWorld(inputs.pointer.origin, data) @@ -1257,7 +1254,7 @@ const state = createState({ const selectedIds = getSelectedIds(data) const page = getPage(data) selectedIds.clear() - for (let id in page.shapes) { + for (const id in page.shapes) { if (page.shapes[id].parentId === data.currentPageId) { selectedIds.add(id) } @@ -1556,7 +1553,7 @@ const state = createState({ redo(data) { history.redo(data) }, - resetHistory(data) { + resetHistory() { history.reset() }, @@ -1604,7 +1601,7 @@ const state = createState({ data.settings.fontSize-- }, updateControls(data, payload: { [key: string]: any }) { - for (let key in payload) { + for (const key in payload) { data.codeControls[key].value = payload[key] } @@ -1648,7 +1645,7 @@ const state = createState({ clipboard.copy(getSelectedShapes(data)) }, - pasteFromClipboard(data) { + pasteFromClipboard() { clipboard.paste() }, @@ -1727,7 +1724,7 @@ const state = createState({ const overrides = new Set([]) for (const shapeStyle of shapeStyles) { - for (let key in currentStyle) { + for (const key in currentStyle) { if (overrides.has(key)) continue if (commonStyle[key] === undefined) { commonStyle[key] = shapeStyle[key] @@ -1771,21 +1768,21 @@ function getDrilledPointedId(data: Data, id: string) { : getDrilledPointedId(data, shape.parentId) } -function hasPointedIdInChildren(data: Data, id: string, pointedId: string) { - const shape = getPage(data).shapes[id] +// function hasPointedIdInChildren(data: Data, id: string, pointedId: string) { +// const shape = getPage(data).shapes[id] - if (shape.type !== ShapeType.Group) { - return false - } +// if (shape.type !== ShapeType.Group) { +// return false +// } - if (shape.children.includes(pointedId)) { - return true - } +// if (shape.children.includes(pointedId)) { +// return true +// } - return shape.children.some((childId) => - hasPointedIdInChildren(data, childId, pointedId) - ) -} +// return shape.children.some((childId) => +// hasPointedIdInChildren(data, childId, pointedId) +// ) +// } function getSelectionBounds(data: Data) { const selectedIds = getSelectedIds(data) diff --git a/state/storage.ts b/state/storage.ts index f763c231c..86ce6bdc8 100644 --- a/state/storage.ts +++ b/state/storage.ts @@ -226,7 +226,7 @@ class Storage { ) // Save page state - let currentPageState = data.pageStates[pageId] + const currentPageState = data.pageStates[pageId] localStorage.setItem( storageId(fileId, 'pageState', pageId), diff --git a/styles/stitches.config.ts b/styles/stitches.config.ts index e8523d0ff..925a61b9b 100644 --- a/styles/stitches.config.ts +++ b/styles/stitches.config.ts @@ -58,16 +58,6 @@ const { styled, global, css, theme, getCssString } = createCss({ }, zStrokeWidth: () => (value: number | number[]) => { if (Array.isArray(value)) { - // const [val, min, max] = value - // return { - // strokeWidth: - // min !== undefined && max !== undefined - // ? `clamp(${min}px, (calc(${val}px / var(--camera-zoom))), ${max}px)` - // : min !== undefined - // ? `min(${min}px, calc(${val}px / var(--camera-zoom)))` - // : `calc(${val}px / var(--camera-zoom))`, - // } - return { strokeWidth: `calc(${value[0]}px / var(--camera-zoom))`, } diff --git a/test/__mocks__/fileMock.js b/test/__mocks__/fileMock.js new file mode 100644 index 000000000..0e56c5b5f --- /dev/null +++ b/test/__mocks__/fileMock.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub' diff --git a/test/pages/__snapshots__/index.test.tsx.snap b/test/pages/__snapshots__/index.test.tsx.snap new file mode 100644 index 000000000..b2ad8576a --- /dev/null +++ b/test/pages/__snapshots__/index.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Home page matches snapshot 1`] = ` + +
    + hey world Hello! +
    +
    +`; diff --git a/test/pages/index.test.tsx b/test/pages/index.test.tsx new file mode 100644 index 000000000..e8f82a286 --- /dev/null +++ b/test/pages/index.test.tsx @@ -0,0 +1,9 @@ +import React from 'react' +import { render } from '../testUtils' +import Home from '../../pages/index' + +describe('Home page', () => { + it('renders', () => { + render(, {}) + }) +}) diff --git a/test/testUtils.ts b/test/testUtils.ts new file mode 100644 index 000000000..960e76ba7 --- /dev/null +++ b/test/testUtils.ts @@ -0,0 +1,26 @@ +import { render } from '@testing-library/react' +import { ReactElement } from 'react' +// import { ThemeProvider } from "my-ui-lib" +// import { TranslationProvider } from "my-i18n-lib" +// import defaultStrings from "i18n/en-x-default" + +const Providers = ({ children }) => { + return children + // return ( + // + // + // {children} + // + // + // ) +} + +const customRender = (ui: ReactElement, options = {}): void => { + render(ui, { wrapper: Providers, ...options }) +} + +// re-export everything +export * from '@testing-library/react' + +// override render method +export { customRender as render } diff --git a/todo.md b/todo.md deleted file mode 100644 index bec864f69..000000000 --- a/todo.md +++ /dev/null @@ -1,56 +0,0 @@ -# Todo - -## Groups - -- fix drift when moving children of rotated group - -## Select - -- Restore select highlight, fix for children of rotated groups - -# Transforms - -- (merge transform-session and transform-single-session) -- Allow single-selected groups to transform their children correctly -- fix ellipse when scaleX < 0 or scaleY < 0 -- Transforming on rotated shapes - -## Arrows - -- shift dragging arrow handles should lock to directions -- fix undo/redo on rotated arrows -- fix shift-rotation - -## Pages - -- [x] Make selection part of page state -- [x] Allow only one page to be in the document at a time - -## Context Menu - -- [x] Create context Menu -- [x] Wire up events -- [x] Use nested context menus - -## Move to Page - -- [x] Move to Page Command -- [x] Picker for pages (provisional) - -## Local File System - -- [x] Save to local file -- [x] Load from local file -- [ ] Show current file name -- [ ] Create new file -- [ ] View recent files - -## Clipboard - -- [x] Copy -- [x] Paste shapes -- [ ] Paste as text - -## Copy to SVG - -- [ ] Copy to SVG diff --git a/tsconfig.json b/tsconfig.json index ca556582b..878a443fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,6 @@ "rootDir": ".", "baseUrl": "." }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "decs.d.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules", ".next", "out"], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"] } diff --git a/types.ts b/types.ts index 1bbbc862c..638a77bfd 100644 --- a/types.ts +++ b/types.ts @@ -416,8 +416,163 @@ export type CodeControl = | TextCodeControl | SelectCodeControl -export type PropsOfType = { +export type PropsOfType> = { [K in keyof T]: T[K] extends boolean ? K : never }[keyof T] export type Mutable = { -readonly [K in keyof T]: T[K] } + +export interface ShapeUtility { + // A cache for the computed bounds of this kind of shape. + boundsCache: WeakMap + + // Whether to show transform controls when this shape is selected. + canTransform: boolean + + // Whether the shape's aspect ratio can change. + canChangeAspectRatio: boolean + + // Whether the shape's style can be filled. + canStyleFill: boolean + + // Whether the shape may be edited in an editing mode + canEdit: boolean + + // Whether the shape is a foreign object. + isForeignObject: boolean + + // Whether the shape can contain other shapes. + isParent: boolean + + // Whether the shape is only shown when on hovered. + isShy: boolean + + // Create a new shape. + create(props: Partial): K + + // Update a shape's styles + applyStyles( + this: ShapeUtility, + shape: Mutable, + style: Partial + ): ShapeUtility + + translateBy( + this: ShapeUtility, + shape: Mutable, + point: number[] + ): ShapeUtility + + translateTo( + this: ShapeUtility, + shape: Mutable, + point: number[] + ): ShapeUtility + + rotateBy( + this: ShapeUtility, + shape: Mutable, + rotation: number + ): ShapeUtility + + rotateTo( + this: ShapeUtility, + shape: Mutable, + rotation: number, + delta: number + ): ShapeUtility + + // Transform to fit a new bounding box when more than one shape is selected. + transform( + this: ShapeUtility, + shape: Mutable, + bounds: Bounds, + info: { + type: Edge | Corner + initialShape: K + scaleX: number + scaleY: number + transformOrigin: number[] + } + ): ShapeUtility + + // Transform a single shape to fit a new bounding box. + transformSingle( + this: ShapeUtility, + shape: Mutable, + bounds: Bounds, + info: { + type: Edge | Corner + initialShape: K + scaleX: number + scaleY: number + transformOrigin: number[] + } + ): ShapeUtility + + setProperty

    ( + this: ShapeUtility, + shape: Mutable, + prop: P, + value: K[P] + ): ShapeUtility + + // Respond when any child of this shape changes. + onChildrenChange( + this: ShapeUtility, + shape: Mutable, + children: Shape[] + ): ShapeUtility + + // Respond when a user moves one of the shape's bound elements. + onBindingChange( + this: ShapeUtility, + shape: Mutable, + bindings: Record + ): ShapeUtility + + // Respond when a user moves one of the shape's handles. + onHandleChange( + this: ShapeUtility, + shape: Mutable, + handle: Partial + ): ShapeUtility + + // Respond when a user double clicks the shape's bounds. + onBoundsReset(this: ShapeUtility, shape: Mutable): ShapeUtility + + // Respond when a user double clicks the center of the shape. + onDoubleFocus(this: ShapeUtility, shape: Mutable): ShapeUtility + + // Clean up changes when a session ends. + onSessionComplete(this: ShapeUtility, shape: Mutable): ShapeUtility + + // Render a shape to JSX. + render( + this: ShapeUtility, + shape: K, + info: { + isEditing: boolean + ref?: React.MutableRefObject + } + ): JSX.Element + + invalidate(this: ShapeUtility, shape: K): ShapeUtility + + // Get the bounds of the a shape. + getBounds(this: ShapeUtility, shape: K): Bounds + + // Get the routated bounds of the a shape. + getRotatedBounds(this: ShapeUtility, shape: K): Bounds + + // Get the center of the shape + getCenter(this: ShapeUtility, shape: K): number[] + + // Test whether a point lies within a shape. + hitTest(this: ShapeUtility, shape: K, test: number[]): boolean + + // Test whether bounds collide with or contain a shape. + hitTestBounds(this: ShapeUtility, shape: K, bounds: Bounds): boolean + + shouldDelete(this: ShapeUtility, shape: K): boolean +} diff --git a/utils/bounds.ts b/utils/bounds.ts index b61ad503a..efffacd43 100644 --- a/utils/bounds.ts +++ b/utils/bounds.ts @@ -1,8 +1,6 @@ import { Bounds } from 'types' -import { - intersectPolygonBounds, - intersectPolylineBounds, -} from './intersections' +import { pointInBounds } from './hitTests' +import { intersectPolygonBounds } from './intersections' /** * Get whether two bounds collide. @@ -10,7 +8,7 @@ import { * @param b Bounds * @returns */ -export function boundsCollide(a: Bounds, b: Bounds) { +export function boundsCollide(a: Bounds, b: Bounds): boolean { return !( a.maxX < b.minX || a.minX > b.maxX || @@ -25,7 +23,7 @@ export function boundsCollide(a: Bounds, b: Bounds) { * @param b Bounds * @returns */ -export function boundsContain(a: Bounds, b: Bounds) { +export function boundsContain(a: Bounds, b: Bounds): boolean { return ( a.minX < b.minX && a.minY < b.minY && a.maxY > b.maxY && a.maxX > b.maxX ) @@ -37,7 +35,7 @@ export function boundsContain(a: Bounds, b: Bounds) { * @param b Bounds * @returns */ -export function boundsContained(a: Bounds, b: Bounds) { +export function boundsContained(a: Bounds, b: Bounds): boolean { return boundsContain(b, a) } @@ -45,7 +43,7 @@ export function boundsContained(a: Bounds, b: Bounds) { * Get whether a set of points are all contained by a bounding box. * @returns */ -export function boundsContainPolygon(a: Bounds, points: number[][]) { +export function boundsContainPolygon(a: Bounds, points: number[][]): boolean { return points.every((point) => pointInBounds(point, a)) } @@ -54,7 +52,7 @@ export function boundsContainPolygon(a: Bounds, points: number[][]) { * @param points * @param b */ -export function boundsCollidePolygon(a: Bounds, points: number[][]) { +export function boundsCollidePolygon(a: Bounds, points: number[][]): boolean { return intersectPolygonBounds(points, a).length > 0 } @@ -64,7 +62,7 @@ export function boundsCollidePolygon(a: Bounds, points: number[][]) { * @param b Bounds * @returns */ -export function boundsAreEqual(a: Bounds, b: Bounds) { +export function boundsAreEqual(a: Bounds, b: Bounds): boolean { return !( b.maxX !== a.maxX || b.minX !== a.minX || @@ -73,23 +71,13 @@ export function boundsAreEqual(a: Bounds, b: Bounds) { ) } -/** - * Get whether a point is inside of a bounds. - * @param A - * @param b - * @returns - */ -export function pointInBounds(A: number[], b: Bounds) { - return !(A[0] < b.minX || A[0] > b.maxX || A[1] < b.minY || A[1] > b.maxY) -} - export function getRotatedEllipseBounds( x: number, y: number, rx: number, ry: number, rotation: number -) { +): Bounds { const c = Math.cos(rotation) const s = Math.sin(rotation) const w = Math.hypot(rx * c, ry * s) diff --git a/utils/gtag.ts b/utils/gtag.ts index 04f42b8fb..0b71fa15e 100644 --- a/utils/gtag.ts +++ b/utils/gtag.ts @@ -7,16 +7,14 @@ type GTagEvent = { value: number } -export const pageview = (url: URL) => { - // @ts-ignore - window.gtag('config', GA_TRACKING_ID, { +export const pageview = (url: URL): void => { + ;(window as any).gtag('config', GA_TRACKING_ID, { page_path: url, }) } -export const event = ({ action, category, label, value }: GTagEvent) => { - // @ts-ignore - window.gtag('event', action, { +export const event = ({ action, category, label, value }: GTagEvent): void => { + ;(window as any).gtag('event', action, { event_category: category, event_label: label, value: value, diff --git a/utils/hitTests.ts b/utils/hitTests.ts index f2ca822b0..b17aa4241 100644 --- a/utils/hitTests.ts +++ b/utils/hitTests.ts @@ -7,7 +7,7 @@ import vec from './vec' * @param b * @returns */ -export function pointInBounds(A: number[], b: Bounds) { +export function pointInBounds(A: number[], b: Bounds): boolean { return !(A[0] < b.minX || A[0] > b.maxX || A[1] < b.minY || A[1] > b.maxY) } @@ -17,7 +17,7 @@ export function pointInBounds(A: number[], b: Bounds) { * @param b * @returns */ -export function pointInCircle(A: number[], C: number[], r: number) { +export function pointInCircle(A: number[], C: number[], r: number): boolean { return vec.dist(A, C) <= r } @@ -36,7 +36,7 @@ export function pointInEllipse( rx: number, ry: number, rotation = 0 -) { +): boolean { rotation = rotation || 0 const cos = Math.cos(rotation) const sin = Math.sin(rotation) diff --git a/utils/intersections.ts b/utils/intersections.ts index b87cbb081..9bf1238cf 100644 --- a/utils/intersections.ts +++ b/utils/intersections.ts @@ -17,7 +17,7 @@ export function intersectLineSegments( a2: number[], b1: number[], b2: number[] -) { +): Intersection { const AB = vec.sub(a1, b1) const BV = vec.sub(b2, b1) const AV = vec.sub(a2, a1) @@ -73,9 +73,9 @@ export function intersectCircleLineSegment( return getIntersection('tangent') } - var e = Math.sqrt(deter) - var u1 = (-b + e) / (2 * a) - var u2 = (-b - e) / (2 * a) + const e = Math.sqrt(deter) + const u1 = (-b + e) / (2 * a) + const u2 = (-b - e) / (2 * a) if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) { if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) { return getIntersection('outside') @@ -98,7 +98,7 @@ export function intersectEllipseLineSegment( a1: number[], a2: number[], rotation = 0 -) { +): Intersection { // If the ellipse or line segment are empty, return no tValues. if (rx === 0 || ry === 0 || vec.isEqual(a1, a2)) { return getIntersection('No intersection') @@ -115,15 +115,15 @@ export function intersectEllipseLineSegment( // Calculate the quadratic parameters. const diff = vec.sub(a2, a1) - var A = (diff[0] * diff[0]) / rx / rx + (diff[1] * diff[1]) / ry / ry - var B = (2 * a1[0] * diff[0]) / rx / rx + (2 * a1[1] * diff[1]) / ry / ry - var C = (a1[0] * a1[0]) / rx / rx + (a1[1] * a1[1]) / ry / ry - 1 + const A = (diff[0] * diff[0]) / rx / rx + (diff[1] * diff[1]) / ry / ry + const B = (2 * a1[0] * diff[0]) / rx / rx + (2 * a1[1] * diff[1]) / ry / ry + const C = (a1[0] * a1[0]) / rx / rx + (a1[1] * a1[1]) / ry / ry - 1 // Make a list of t values (normalized points on the line where intersections occur). - var tValues: number[] = [] + const tValues: number[] = [] // Calculate the discriminant. - var discriminant = B * B - 4 * A * C + const discriminant = B * B - 4 * A * C if (discriminant === 0) { // One real solution. @@ -152,7 +152,7 @@ export function intersectArcLineSegment( radius: number, A: number[], B: number[] -) { +): Intersection { const sa = vec.angle(center, start) const ea = vec.angle(center, end) const ellipseTest = intersectEllipseLineSegment(center, radius, radius, A, B) @@ -279,7 +279,7 @@ export function intersectRectangleLineSegment( size: number[], a1: number[], a2: number[] -) { +): Intersection[] { const tl = point const tr = vec.add(point, [size[0], 0]) const br = vec.add(point, size) @@ -318,7 +318,7 @@ export function intersectArcRectangle( radius: number, point: number[], size: number[] -) { +): Intersection[] { const tl = point const tr = vec.add(point, [size[0], 0]) const br = vec.add(point, size) @@ -413,12 +413,15 @@ export function intersectLineSegmentBounds( a1: number[], a2: number[], bounds: Bounds -) { +): Intersection[] { const { minX, minY, width, height } = bounds return intersectRectangleLineSegment([minX, minY], [width, height], a1, a2) } -export function intersectPolylineBounds(points: number[][], bounds: Bounds) { +export function intersectPolylineBounds( + points: number[][], + bounds: Bounds +): Intersection[] { const { minX, minY, width, height } = bounds const intersections: Intersection[] = [] @@ -436,7 +439,10 @@ export function intersectPolylineBounds(points: number[][], bounds: Bounds) { return intersections } -export function intersectPolygonBounds(points: number[][], bounds: Bounds) { +export function intersectPolygonBounds( + points: number[][], + bounds: Bounds +): Intersection[] { const { minX, minY, width, height } = bounds const intersections: Intersection[] = [] @@ -460,7 +466,7 @@ export function intersectArcBounds( center: number[], radius: number, bounds: Bounds -) { +): Intersection[] { const { minX, minY, width, height } = bounds return intersectArcRectangle( diff --git a/utils/svg.ts b/utils/svg.ts index 796c1c65d..c5f323e1b 100644 --- a/utils/svg.ts +++ b/utils/svg.ts @@ -1,63 +1,66 @@ // Some helpers for drawing SVGs. - -import vec from './vec' import { getSweep } from 'utils/utils' // General -export function ellipse(A: number[], r: number) { - return `M ${A[0] - r},${A[1]} +export default class Svg { + static ellipse = (A: number[], r: number): string => { + return `M ${A[0] - r},${A[1]} a ${r},${r} 0 1,0 ${r * 2},0 a ${r},${r} 0 1,0 -${r * 2},0 ` -} + } -export function moveTo(v: number[]) { - return `M ${v[0]},${v[1]} ` -} + static moveTo = (v: number[]): string => { + return `M ${v[0]},${v[1]} ` + } -export function lineTo(v: number[]) { - return `L ${v[0]},${v[1]} ` -} + static lineTo = (v: number[]): string => { + return `L ${v[0]},${v[1]} ` + } -export function line(a: number[], ...pts: number[][]) { - return moveTo(a) + pts.map((p) => lineTo(p)).join() -} + static line = (a: number[], ...pts: number[][]): string => { + return Svg.moveTo(a) + pts.map((p): string => Svg.lineTo(p)).join() + } -export function hLineTo(v: number[]) { - return `H ${v[0]},${v[1]} ` -} + static hLineTo = (v: number[]): string => { + return `H ${v[0]},${v[1]} ` + } -export function vLineTo(v: number[]) { - return `V ${v[0]},${v[1]} ` -} + static vLineTo = (v: number[]): string => { + return `V ${v[0]},${v[1]} ` + } -export function bezierTo(A: number[], B: number[], C: number[]) { - return `C ${A[0]},${A[1]} ${B[0]},${B[1]} ${C[0]},${C[1]} ` -} + static bezierTo = (A: number[], B: number[], C: number[]): string => { + return `C ${A[0]},${A[1]} ${B[0]},${B[1]} ${C[0]},${C[1]} ` + } -export function arcTo(C: number[], r: number, A: number[], B: number[]) { - return [ - moveTo(A), - 'A', - r, - r, - 0, - getSweep(C, A, B) > 0 ? '1' : '0', - 0, - B[0], - B[1], - ].join(' ') -} + static arcTo = (C: number[], r: number, A: number[], B: number[]): string => { + return [ + Svg.moveTo(A), + 'A', + r, + r, + 0, + getSweep(C, A, B) > 0 ? '1' : '0', + 0, + B[0], + B[1], + ].join(' ') + } -export function closePath() { - return 'Z' -} + static closePath = (): string => { + return 'Z' + } -export function rectTo(A: number[]) { - return ['R', A[0], A[1]].join(' ') -} + static rectTo = (A: number[]): string => { + return ['R', A[0], A[1]].join(' ') + } -export function getPointAtLength(path: SVGPathElement, length: number) { - const point = path.getPointAtLength(length) - return [point.x, point.y] + static getPointAtLength = ( + path: SVGPathElement, + length: number + ): number[] => { + const point = path.getPointAtLength(length) + return [point.x, point.y] + } } diff --git a/utils/utils.ts b/utils/utils.ts index d292c8aad..98dc1a8a9 100644 --- a/utils/utils.ts +++ b/utils/utils.ts @@ -1,16 +1,26 @@ -import Vector from 'lib/code/vector' import React from 'react' -import { Data, Bounds, Edge, Corner, Shape, GroupShape, ShapeType } from 'types' +import { + Data, + Bounds, + Edge, + Corner, + Shape, + GroupShape, + ShapeType, + CodeFile, + Page, + PageState, +} from 'types' import { v4 as uuid } from 'uuid' import vec from './vec' import _isMobile from 'ismobilejs' -import { getShapeUtils } from 'lib/shape-utils' +import { getShapeUtils } from 'state/shape-utils' -export function uniqueId() { +export function uniqueId(): string { return uuid() } -export function screenToWorld(point: number[], data: Data) { +export function screenToWorld(point: number[], data: Data): number[] { const camera = getCurrentCamera(data) return vec.sub(vec.div(point, camera.zoom), camera.point) } @@ -38,7 +48,7 @@ export function getViewport(data: Data): Bounds { * @param b Bounding box * @returns */ -export function getExpandedBounds(a: Bounds, b: Bounds) { +export function getExpandedBounds(a: Bounds, b: Bounds): Bounds { const minX = Math.min(a.minX, b.minX), minY = Math.min(a.minY, b.minY), maxX = Math.max(a.maxX, b.maxX), @@ -53,7 +63,7 @@ export function getExpandedBounds(a: Bounds, b: Bounds) { * Get the common bounds of a group of bounds. * @returns */ -export function getCommonBounds(...b: Bounds[]) { +export function getCommonBounds(...b: Bounds[]): Bounds { if (b.length < 2) return b[0] let bounds = b[0] @@ -65,29 +75,13 @@ export function getCommonBounds(...b: Bounds[]) { return bounds } -// export function getBoundsFromTwoPoints(a: number[], b: number[]) { -// const minX = Math.min(a[0], b[0]) -// const maxX = Math.max(a[0], b[0]) -// const minY = Math.min(a[1], b[1]) -// const maxY = Math.max(a[1], b[1]) - -// return { -// minX, -// maxX, -// minY, -// maxY, -// width: maxX - minX, -// height: maxY - minY, -// } -// } - // A helper for getting tangents. export function getCircleTangentToPoint( A: number[], r0: number, P: number[], side: number -) { +): number[] { const B = vec.lrp(A, P, 0.5), r1 = vec.dist(A, B), delta = vec.sub(B, A), @@ -106,7 +100,10 @@ export function getCircleTangentToPoint( return side === 0 ? vec.add(p, k) : vec.sub(p, k) } -export function circleCircleIntersections(a: number[], b: number[]) { +export function circleCircleIntersections( + a: number[], + b: number[] +): number[][] { const R = a[2], r = b[2] @@ -131,26 +128,40 @@ export function getClosestPointOnCircle( r: number, P: number[], padding = 0 -) { +): number[] { const v = vec.sub(C, P) return vec.sub(C, vec.mul(vec.div(v, vec.len(v)), r + padding)) } -export function projectPoint(p0: number[], a: number, d: number) { +export function projectPoint(p0: number[], a: number, d: number): number[] { return [Math.cos(a) * d + p0[0], Math.sin(a) * d + p0[1]] } -function shortAngleDist(a0: number, a1: number) { +export function shortAngleDist(a0: number, a1: number): number { const max = Math.PI * 2 const da = (a1 - a0) % max return ((2 * da) % max) - da } -export function lerpAngles(a0: number, a1: number, t: number) { +export function lerpAngles(a0: number, a1: number, t: number): number { return a0 + shortAngleDist(a0, a1) * t } -export function getBezierCurveSegments(points: number[][], tension = 0.4) { +interface BezierCurveSegment { + start: number[] + tangentStart: number[] + normalStart: number[] + pressureStart: number + end: number[] + tangentEnd: number[] + normalEnd: number[] + pressureEnd: number +} + +export function getBezierCurveSegments( + points: number[][], + tension = 0.4 +): BezierCurveSegment[] { const len = points.length, cpoints: number[][] = [...points] @@ -197,16 +208,7 @@ export function getBezierCurveSegments(points: number[][], tension = 0.4) { cpoints[len - 1][4] = (cpoints[len - 2][2] - points[len - 1][0]) / -d1 cpoints[len - 1][5] = (cpoints[len - 2][3] - points[len - 1][1]) / -d1 - const results: { - start: number[] - tangentStart: number[] - normalStart: number[] - pressureStart: number - end: number[] - tangentEnd: number[] - normalEnd: number[] - pressureEnd: number - }[] = [] + const results: BezierCurveSegment[] = [] for (let i = 1; i < cpoints.length; i++) { results.push({ @@ -230,7 +232,7 @@ export function cubicBezier( y1: number, x2: number, y2: number -) { +): number { // Inspired by Don Lancaster's two articles // http://www.tinaja.com/glib/cubemath.pdf // http://www.tinaja.com/text/bezmath.html @@ -275,7 +277,7 @@ export function cubicBezier( return Math.abs(E * t * t * t + F * t * t + G * t * H) } -export function copyToClipboard(string: string) { +export function copyToClipboard(string: string): boolean { let textarea: HTMLTextAreaElement let result: boolean @@ -321,7 +323,7 @@ export function copyToClipboard(string: string) { * @param k Tension * @returns An array of points as [cp1x, cp1y, cp2x, cp2y, px, py]. */ -export function getSpline(pts: number[][], k = 0.5) { +export function getSpline(pts: number[][], k = 0.5): number[][] { let p0: number[], [p1, p2, p3] = pts @@ -350,7 +352,7 @@ export function getCurvePoints( tension = 0.5, isClosed = false, numOfSegments = 3 -) { +): number[][] { const _pts = [...pts], len = pts.length, res: number[][] = [] // results @@ -415,7 +417,7 @@ export function getCurvePoints( return res } -export function angleDelta(a0: number, a1: number) { +export function angleDelta(a0: number, a1: number): number { return shortAngleDist(a0, a1) } @@ -427,7 +429,7 @@ export function angleDelta(a0: number, a1: number) { * @param cy The y-axis coordinate of the point to rotate round. * @param angle The distance (in radians) to rotate. */ -export function rotatePoint(A: number[], B: number[], angle: number) { +export function rotatePoint(A: number[], B: number[], angle: number): number[] { const s = Math.sin(angle) const c = Math.cos(angle) @@ -440,15 +442,20 @@ export function rotatePoint(A: number[], B: number[], angle: number) { return [nx + B[0], ny + B[1]] } -export function degreesToRadians(d: number) { +export function degreesToRadians(d: number): number { return (d * Math.PI) / 180 } -export function radiansToDegrees(r: number) { +export function radiansToDegrees(r: number): number { return (r * 180) / Math.PI } -export function getArcLength(C: number[], r: number, A: number[], B: number[]) { +export function getArcLength( + C: number[], + r: number, + A: number[], + B: number[] +): number { const sweep = getSweep(C, A, B) return r * (2 * Math.PI) * (sweep / (2 * Math.PI)) } @@ -459,28 +466,28 @@ export function getArcDashOffset( A: number[], B: number[], step: number -) { +): number { const del0 = getSweep(C, A, B) const len0 = getArcLength(C, r, A, B) const off0 = del0 < 0 ? len0 : 2 * Math.PI * C[2] - len0 return -off0 / 2 + step } -export function getEllipseDashOffset(A: number[], step: number) { +export function getEllipseDashOffset(A: number[], step: number): number { const c = 2 * Math.PI * A[2] return -c / 2 + -step } -export function getSweep(C: number[], A: number[], B: number[]) { +export function getSweep(C: number[], A: number[], B: number[]): number { return angleDelta(vec.angle(C, A), vec.angle(C, B)) } -export function deepCompareArrays(a: T[], b: T[]) { +export function deepCompareArrays(a: T[], b: T[]): boolean { if (a?.length !== b?.length) return false return deepCompare(a, b) } -export function deepCompare(a: T, b: T) { +export function deepCompare(a: T, b: T): boolean { return a === b || JSON.stringify(a) === JSON.stringify(b) } @@ -499,7 +506,7 @@ export function getOuterTangents( r0: number, C1: number[], r1: number -) { +): number[][] { const a0 = vec.angle(C0, C1) const d = vec.dist(C0, C1) @@ -528,49 +535,11 @@ export function arrsIntersect( a: T[], b: unknown[], fn?: (item: unknown) => T -) { +): boolean { return a.some((item) => b.includes(fn ? fn(item) : item)) } -// /** -// * Will mutate an array to remove items. -// * @param arr -// * @param item -// */ -// export function pull(arr: T[], ...items: T[]) { -// for (let item of items) { -// arr.splice(arr.indexOf(item), 1) -// } -// return arr -// } - -// /** -// * Will mutate an array to remove items, based on a function -// * @param arr -// * @param fn -// * @returns -// */ -// export function pullWith(arr: T[], fn: (item: T) => boolean) { -// pull(arr, ...arr.filter((item) => fn(item))) -// return arr -// } - -// export function rectContainsRect( -// x0: number, -// y0: number, -// x1: number, -// y1: number, -// box: { x: number; y: number; width: number; height: number } -// ) { -// return !( -// x0 > box.x || -// x1 < box.x + box.width || -// y0 > box.y || -// y1 < box.y + box.height -// ) -// } - -export function getTouchDisplay() { +export function getTouchDisplay(): boolean { return ( 'ontouchstart' in window || navigator.maxTouchPoints > 0 || @@ -580,7 +549,7 @@ export function getTouchDisplay() { const rounds = [1, 10, 100, 1000] -export function round(n: number, p = 2) { +export function round(n: number, p = 2): number { return Math.floor(n * rounds[p]) / rounds[p] } @@ -590,7 +559,7 @@ export function round(n: number, p = 2) { * @param y2 * @param mu */ -export function lerp(y1: number, y2: number, mu: number) { +export function lerp(y1: number, y2: number, mu: number): number { mu = clamp(mu, 0, 1) return y1 * (1 - mu) + y2 * mu } @@ -607,7 +576,7 @@ export function modulate( rangeA: number[], rangeB: number[], clamp = false -) { +): number { const [fromLow, fromHigh] = rangeA const [v0, v1] = rangeB const result = v0 + ((value - fromLow) / (fromHigh - fromLow)) * (v1 - v0) @@ -633,7 +602,7 @@ export function clamp(n: number, min: number, max?: number): number { // CURVES // Mostly adapted from https://github.com/Pomax/bezierjs -export function computePointOnCurve(t: number, points: number[][]) { +export function computePointOnCurve(t: number, points: number[][]): number[] { // shortcuts if (t === 0) { return points[0] @@ -699,7 +668,12 @@ function distance2(p: DOMPoint, point: number[]) { export function getClosestPointOnPath( pathNode: SVGPathElement, point: number[] -) { +): { + point: number[] + distance: number + length: number + t: number +} { const pathLen = pathNode.getTotalLength() let p = 8, @@ -754,7 +728,7 @@ export function getClosestPointOnPath( } } -export function det( +function det( a: number, b: number, c: number, @@ -764,7 +738,7 @@ export function det( g: number, h: number, i: number -) { +): number { return a * e * i + b * f * g + c * d * h - a * f * h - b * d * i - c * e * g } @@ -775,7 +749,11 @@ export function det( * @param center * @returns [x, y, r] */ -export function circleFromThreePoints(A: number[], B: number[], C: number[]) { +export function circleFromThreePoints( + A: number[], + B: number[], + C: number[] +): number[] { const a = det(A[0], A[1], 1, B[0], B[1], 1, C[0], C[1], 1) const bx = -det( @@ -819,35 +797,7 @@ export function circleFromThreePoints(A: number[], B: number[], C: number[]) { return [x, y, r] } -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function throttle

    any>( - fn: T, - wait: number, - preventDefault?: boolean -) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let inThrottle: boolean, lastFn: any, lastTime: number - return function (...args: P) { - if (preventDefault) args[0].preventDefault() - // eslint-disable-next-line @typescript-eslint/no-this-alias - const context = this - if (!inThrottle) { - fn.apply(context, args) - lastTime = Date.now() - inThrottle = true - } else { - clearTimeout(lastFn) - lastFn = setTimeout(function () { - if (Date.now() - lastTime >= wait) { - fn.apply(context, args) - lastTime = Date.now() - } - }, Math.max(wait - (Date.now() - lastTime), 0)) - } - } -} - -export function getCameraZoom(zoom: number) { +export function getCameraZoom(zoom: number): number { return clamp(zoom, 0.1, 5) } @@ -857,7 +807,7 @@ export function pointInRect( minY: number, maxX: number, maxY: number -) { +): boolean { return !( point[0] < minX || point[0] > maxX || @@ -879,7 +829,7 @@ export function getRayRayIntersection( n0: number[], p1: number[], n1: number[] -) { +): number[] { const p0e = vec.add(p0, n0), p1e = vec.add(p1, n1), m0 = (p0e[1] - p0[1]) / (p0e[0] - p0[0]), @@ -895,7 +845,7 @@ export function getRayRayIntersection( export async function postJsonToEndpoint( endpoint: string, data: { [key: string]: unknown } -) { +): Promise<{ [key: string]: any }> { const d = await fetch( `${process.env.NEXT_PUBLIC_BASE_API_URL}/api/${endpoint}`, { @@ -908,7 +858,13 @@ export async function postJsonToEndpoint( return await d.json() } -export function getKeyboardEventInfo(e: KeyboardEvent | React.KeyboardEvent) { +export function getKeyboardEventInfo(e: KeyboardEvent | React.KeyboardEvent): { + key: string + shiftKey: boolean + ctrlKey: boolean + metaKey: boolean + altKey: boolean +} { const { shiftKey, ctrlKey, metaKey, altKey } = e return { key: e.key, @@ -919,11 +875,11 @@ export function getKeyboardEventInfo(e: KeyboardEvent | React.KeyboardEvent) { } } -export function isDarwin() { +export function isDarwin(): boolean { return /Mac|iPod|iPhone|iPad/.test(window.navigator.platform) } -export function metaKey(e: KeyboardEvent | React.KeyboardEvent) { +export function metaKey(e: KeyboardEvent | React.KeyboardEvent): boolean { return isDarwin() ? e.metaKey : e.ctrlKey } @@ -931,7 +887,7 @@ export function getTransformAnchor( type: Edge | Corner, isFlippedX: boolean, isFlippedY: boolean -) { +): Corner | Edge { let anchor: Corner | Edge = type // Change corner anchors if flipped @@ -989,17 +945,6 @@ export function getTransformAnchor( return anchor } -export function vectorToPoint(point: number[] | Vector | undefined) { - if (typeof point === 'undefined') { - return [0, 0] - } - - if (point instanceof Vector) { - return [point.x, point.y] - } - return point -} - export function getBoundsFromPoints(points: number[][], rotation = 0): Bounds { let minX = Infinity let minY = Infinity @@ -1012,7 +957,7 @@ export function getBoundsFromPoints(points: number[][], rotation = 0): Bounds { maxX = 1 maxY = 1 } else { - for (let [x, y] of points) { + for (const [x, y] of points) { minX = Math.min(x, minX) minY = Math.min(y, minY) maxX = Math.max(x, maxX) @@ -1044,7 +989,7 @@ export function getBoundsFromPoints(points: number[][], rotation = 0): Bounds { * @param delta * @returns */ -export function translateBounds(bounds: Bounds, delta: number[]) { +export function translateBounds(bounds: Bounds, delta: number[]): Bounds { return { minX: bounds.minX + delta[0], minY: bounds.minY + delta[1], @@ -1059,7 +1004,7 @@ export function rotateBounds( bounds: Bounds, center: number[], rotation: number -) { +): Bounds { const [minX, minY] = vec.rotWith([bounds.minX, bounds.minY], center, rotation) const [maxX, maxY] = vec.rotWith([bounds.maxX, bounds.maxY], center, rotation) @@ -1073,7 +1018,7 @@ export function rotateBounds( } } -export function getRotatedSize(size: number[], rotation: number) { +export function getRotatedSize(size: number[], rotation: number): number[] { const center = vec.div(size, 2) const points = [[0, 0], [size[0], 0], size, [0, size[1]]].map((point) => @@ -1085,7 +1030,7 @@ export function getRotatedSize(size: number[], rotation: number) { return [bounds.width, bounds.height] } -export function getRotatedCorners(b: Bounds, rotation: number) { +export function getRotatedCorners(b: Bounds, rotation: number): number[][] { const center = [b.minX + b.width / 2, b.minY + b.height / 2] return [ @@ -1102,10 +1047,10 @@ export function getTransformedBoundingBox( delta: number[], rotation = 0, isAspectRatioLocked = false -) { +): Bounds & { scaleX: number; scaleY: number } { // Create top left and bottom right corners. - let [ax0, ay0] = [bounds.minX, bounds.minY] - let [ax1, ay1] = [bounds.maxX, bounds.maxY] + const [ax0, ay0] = [bounds.minX, bounds.minY] + const [ax1, ay1] = [bounds.maxX, bounds.maxY] // Create a second set of corners for the new box. let [bx0, by0] = [bounds.minX, bounds.minY] @@ -1127,7 +1072,7 @@ export function getTransformedBoundingBox( // Counter rotate the delta. This lets us make changes as if // the (possibly rotated) boxes were axis aligned. - let [dx, dy] = vec.rot(delta, -rotation) + const [dx, dy] = vec.rot(delta, -rotation) /* 1. Delta @@ -1342,7 +1287,7 @@ export function getRelativeTransformedBoundingBox( initialShapeBounds: Bounds, isFlippedX: boolean, isFlippedY: boolean -) { +): Bounds { const nx = (isFlippedX ? initialBounds.maxX - initialShapeBounds.maxX @@ -1375,67 +1320,64 @@ export function getShape( data: Data, shapeId: string, pageId = data.currentPageId -) { +): Shape { return data.document.pages[pageId].shapes[shapeId] } -export function getPage(data: Data, pageId = data.currentPageId) { +export function getPage(data: Data, pageId = data.currentPageId): Page { return data.document.pages[pageId] } -export function getPageState(data: Data, pageId = data.currentPageId) { +export function getPageState( + data: Data, + pageId = data.currentPageId +): PageState { return data.pageStates[pageId] } -export function getCurrentCode(data: Data, fileId = data.currentCodeFileId) { +export function getCurrentCode( + data: Data, + fileId = data.currentCodeFileId +): CodeFile { return data.document.code[fileId] } -export function getShapes(data: Data, pageId = data.currentPageId) { +export function getShapes(data: Data, pageId = data.currentPageId): Shape[] { const page = getPage(data, pageId) return Object.values(page.shapes) } -export function getSelectedShapes(data: Data, pageId = data.currentPageId) { +export function getSelectedShapes( + data: Data, + pageId = data.currentPageId +): Shape[] { const page = getPage(data, pageId) const ids = setToArray(getSelectedIds(data)) return ids.map((id) => page.shapes[id]) } -export function getSelectedBounds(data: Data) { - return getCommonBounds( - ...getSelectedShapes(data).map((shape) => - getShapeUtils(shape).getBounds(shape) - ) - ) -} - -export function isMobile() { +export function isMobile(): boolean { return _isMobile().any } -export function getRotatedBounds(shape: Shape) { - return getShapeUtils(shape).getRotatedBounds(shape) -} - -export function getShapeBounds(shape: Shape) { - return getShapeUtils(shape).getBounds(shape) -} - -export function getBoundsCenter(bounds: Bounds) { +export function getBoundsCenter(bounds: Bounds): number[] { return [bounds.minX + bounds.width / 2, bounds.minY + bounds.height / 2] } -export function clampRadians(r: number) { +export function clampRadians(r: number): number { return (Math.PI * 2 + r) % (Math.PI * 2) } -export function clampToRotationToSegments(r: number, segments: number) { +export function clampToRotationToSegments(r: number, segments: number): number { const seg = (Math.PI * 2) / segments return Math.floor((clampRadians(r) + seg / 2) / seg) * seg } -export function getParent(data: Data, id: string, pageId = data.currentPageId) { +export function getParent( + data: Data, + id: string, + pageId = data.currentPageId +): Shape | Page { const page = getPage(data, pageId) const shape = page.shapes[id] @@ -1446,7 +1388,7 @@ export function getChildren( data: Data, id: string, pageId = data.currentPageId -) { +): Shape[] { const page = getPage(data, pageId) return Object.values(page.shapes) .filter(({ parentId }) => parentId === id) @@ -1457,7 +1399,7 @@ export function getSiblings( data: Data, id: string, pageId = data.currentPageId -) { +): Shape[] { const page = getPage(data, pageId) const shape = page.shapes[id] @@ -1470,7 +1412,7 @@ export function getChildIndexAbove( data: Data, id: string, pageId = data.currentPageId -) { +): number { const page = getPage(data, pageId) const shape = page.shapes[id] @@ -1501,7 +1443,7 @@ export function getChildIndexBelow( data: Data, id: string, pageId = data.currentPageId -) { +): number { const page = getPage(data, pageId) const shape = page.shapes[id] @@ -1528,17 +1470,18 @@ export function getChildIndexBelow( return (shape.childIndex + prevSibling.childIndex) / 2 } -export function forceIntegerChildIndices(shapes: Shape[]) { +export function forceIntegerChildIndices(shapes: Shape[]): void { for (let i = 0; i < shapes.length; i++) { const shape = shapes[i] getShapeUtils(shape).setProperty(shape, 'childIndex', i + 1) } } -export function setZoomCSS(zoom: number) { + +export function setZoomCSS(zoom: number): void { document.documentElement.style.setProperty('--camera-zoom', zoom.toString()) } -export function getCurrent(source: T): T { +export function getCurrent>(source: T): T { return Object.fromEntries( Object.entries(source).map(([key, value]) => [key, value]) ) as T @@ -1550,7 +1493,7 @@ export function getCurrent(source: T): T { * @param tolerance The minimum line distance (also called epsilon). * @returns Simplified array as [x, y, ...][] */ -export function simplify(points: number[][], tolerance = 1) { +export function simplify(points: number[][], tolerance = 1): number[][] { const len = points.length, a = points[0], b = points[len - 1], @@ -1558,9 +1501,9 @@ export function simplify(points: number[][], tolerance = 1) { [x2, y2] = b if (len > 2) { - let distance = 0, - index = 0, - max = Math.hypot(y2 - y1, x2 - x1) + let distance = 0 + let index = 0 + const max = Math.hypot(y2 - y1, x2 - x1) for (let i = 1; i < len - 1; i++) { const [x0, y0] = points[i], @@ -1573,8 +1516,8 @@ export function simplify(points: number[][], tolerance = 1) { } if (distance > tolerance) { - let l0 = simplify(points.slice(0, index + 1), tolerance) - let l1 = simplify(points.slice(index + 1), tolerance) + const l0 = simplify(points.slice(0, index + 1), tolerance) + const l1 = simplify(points.slice(index + 1), tolerance) return l0.concat(l1.slice(1)) } } @@ -1582,7 +1525,7 @@ export function simplify(points: number[][], tolerance = 1) { return [a, b] } -export function getSvgPathFromStroke(stroke: number[][]) { +export function getSvgPathFromStroke(stroke: number[][]): string { if (!stroke.length) return '' const d = stroke.reduce( @@ -1606,57 +1549,27 @@ const PI2 = Math.PI * 2 * @param b * @param c */ -export function isAngleBetween(a: number, b: number, c: number) { +export function isAngleBetween(a: number, b: number, c: number): boolean { if (c === a || c === b) return true const AB = (b - a + PI2) % PI2 const AC = (c - a + PI2) % PI2 return AB <= Math.PI !== AC > AB } -export function getCurrentCamera(data: Data) { +export function getCurrentCamera(data: Data): { + point: number[] + zoom: number +} { return data.pageStates[data.currentPageId].camera } -// export function updateChildren(data: Data, changedShapes: Shape[]) { -// if (changedShapes.length === 0) return -// const { shapes } = getPage(data) - -// changedShapes.forEach((shape) => { -// if (shape.type === ShapeType.Group) { -// for (let childId of shape.children) { -// const childShape = shapes[childId] -// getShapeUtils(childShape).translateBy(childShape, deltaForShape) -// } -// } -// }) -// } - /* --------------------- Groups --------------------- */ -export function updateParents(data: Data, changedShapeIds: string[]) { - if (changedShapeIds.length === 0) return - - const { shapes } = getPage(data) - - const parentToUpdateIds = Array.from( - new Set(changedShapeIds.map((id) => shapes[id].parentId).values()) - ).filter((id) => id !== data.currentPageId) - - for (const parentId of parentToUpdateIds) { - const parent = shapes[parentId] as GroupShape - - getShapeUtils(parent).onChildrenChange( - parent, - parent.children.map((id) => shapes[id]) - ) - - shapes[parentId] = { ...parent } - } - - updateParents(data, parentToUpdateIds) -} - -export function getParentOffset(data: Data, shapeId: string, offset = [0, 0]) { +export function getParentOffset( + data: Data, + shapeId: string, + offset = [0, 0] +): number[] { const shape = getShape(data, shapeId) return shape.parentId === data.currentPageId ? offset @@ -1685,11 +1598,11 @@ export function getDocumentBranch(data: Data, id: string): string[] { ] } -export function getSelectedIds(data: Data) { +export function getSelectedIds(data: Data): Set { return data.pageStates[data.currentPageId].selectedIds } -export function setSelectedIds(data: Data, ids: string[]) { +export function setSelectedIds(data: Data, ids: string[]): Set { data.pageStates[data.currentPageId].selectedIds = new Set(ids) return data.pageStates[data.currentPageId].selectedIds } @@ -1698,30 +1611,13 @@ export function setToArray(set: Set): T[] { return Array.from(set.values()) } -const G2 = (3.0 - Math.sqrt(3.0)) / 6.0 - -const Grad = [ - [1, 1], - [-1, 1], - [1, -1], - [-1, -1], - [1, 0], - [-1, 0], - [1, 0], - [-1, 0], - [0, 1], - [0, -1], - [0, 1], - [0, -1], -] - /** * Seeded random number generator, using [xorshift](https://en.wikipedia.org/wiki/Xorshift). * The result will always be betweeen -1 and 1. * * Adapted from [seedrandom](https://github.com/davidbau/seedrandom). */ -export function rng(seed = '') { +export function rng(seed = ''): () => number { let x = 0 let y = 0 let z = 0 @@ -1736,7 +1632,7 @@ export function rng(seed = '') { return w / 0x100000000 } - for (var k = 0; k < seed.length + 64; k++) { + for (let k = 0; k < seed.length + 64; k++) { x ^= seed.charCodeAt(k) | 0 next() } @@ -1744,11 +1640,11 @@ export function rng(seed = '') { return next } -export function ease(t: number) { +export function ease(t: number): number { return t * t * t } -export function pointsBetween(a: number[], b: number[], steps = 6) { +export function pointsBetween(a: number[], b: number[], steps = 6): number[][] { return Array.from(Array(steps)) .map((_, i) => ease(i / steps)) .map((t) => [...vec.lrp(a, b, t), (1 - t) / 2]) @@ -1758,7 +1654,7 @@ export function shuffleArr(arr: T[], offset: number): T[] { return arr.map((_, i) => arr[(i + offset) % arr.length]) } -export function commandKey() { +export function commandKey(): string { return isDarwin() ? '⌘' : 'Ctrl' } @@ -1770,13 +1666,13 @@ export function getTopParentId(data: Data, id: string): string { : getTopParentId(data, shape.parentId) } -export function uniqueArray(...items: T[]) { +export function uniqueArray(...items: T[]): T[] { return Array.from(new Set(items).values()) } export function getPoint( e: PointerEvent | React.PointerEvent | Touch | React.Touch | WheelEvent -) { +): number[] { return [ Number(e.clientX.toPrecision(5)), Number(e.clientY.toPrecision(5)), @@ -1784,118 +1680,62 @@ export function getPoint( ] } -export function compress(s: string) { +export function compress(s: string): string { return s - - const dict = {} - const data = (s + '').split('') - - let currChar: string - let phrase = data[0] - let code = 256 - - const out = [] - - for (var i = 1; i < data.length; i++) { - currChar = data[i] - - if (dict[phrase + currChar] != null) { - phrase += currChar - } else { - out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0)) - dict[phrase + currChar] = code - code++ - phrase = currChar - } - } - - out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0)) - - for (var i = 0; i < out.length; i++) { - out[i] = String.fromCharCode(out[i]) - } - - return out.join('') } // Decompress an LZW-encoded string -export function decompress(s: string) { +export function decompress(s: string): string { return s - - const dict = {} - const data = (s + '').split('') - - let currChar = data[0] - let oldPhrase = currChar - let code = 256 - let phrase: string - - const out = [currChar] - - for (var i = 1; i < data.length; i++) { - let currCode = data[i].charCodeAt(0) - - if (currCode < 256) { - phrase = data[i] - } else { - phrase = dict[currCode] ? dict[currCode] : oldPhrase + currChar - } - - out.push(phrase) - currChar = phrase.charAt(0) - dict[code] = oldPhrase + currChar - code++ - oldPhrase = phrase - } - - return out.join('') } -function getResizeOffset(a: Bounds, b: Bounds) { - const { minX: x0, minY: y0, width: w0, height: h0 } = a - const { minX: x1, minY: y1, width: w1, height: h1 } = b +// function getResizeOffset(a: Bounds, b: Bounds): number[] { +// const { minX: x0, minY: y0, width: w0, height: h0 } = a +// const { minX: x1, minY: y1, width: w1, height: h1 } = b - let delta: number[] +// let delta: number[] - if (h0 === h1 && w0 !== w1) { - if (x0 !== x1) { - // moving left edge, pin right edge - delta = vec.sub([x1, y1 + h1 / 2], [x0, y0 + h0 / 2]) - } else { - // moving right edge, pin left edge - delta = vec.sub([x1 + w1, y1 + h1 / 2], [x0 + w0, y0 + h0 / 2]) - } - } else if (h0 !== h1 && w0 === w1) { - if (y0 !== y1) { - // moving top edge, pin bottom edge - delta = vec.sub([x1 + w1 / 2, y1], [x0 + w0 / 2, y0]) - } else { - // moving bottom edge, pin top edge - delta = vec.sub([x1 + w1 / 2, y1 + h1], [x0 + w0 / 2, y0 + h0]) - } - } else if (x0 !== x1) { - if (y0 !== y1) { - // moving top left, pin bottom right - delta = vec.sub([x1, y1], [x0, y0]) - } else { - // moving bottom left, pin top right - delta = vec.sub([x1, y1 + h1], [x0, y0 + h0]) - } - } else if (y0 !== y1) { - // moving top right, pin bottom left - delta = vec.sub([x1 + w1, y1], [x0 + w0, y0]) - } else { - // moving bottom right, pin top left - delta = vec.sub([x1 + w1, y1 + h1], [x0 + w0, y0 + h0]) - } +// if (h0 === h1 && w0 !== w1) { +// if (x0 !== x1) { +// // moving left edge, pin right edge +// delta = vec.sub([x1, y1 + h1 / 2], [x0, y0 + h0 / 2]) +// } else { +// // moving right edge, pin left edge +// delta = vec.sub([x1 + w1, y1 + h1 / 2], [x0 + w0, y0 + h0 / 2]) +// } +// } else if (h0 !== h1 && w0 === w1) { +// if (y0 !== y1) { +// // moving top edge, pin bottom edge +// delta = vec.sub([x1 + w1 / 2, y1], [x0 + w0 / 2, y0]) +// } else { +// // moving bottom edge, pin top edge +// delta = vec.sub([x1 + w1 / 2, y1 + h1], [x0 + w0 / 2, y0 + h0]) +// } +// } else if (x0 !== x1) { +// if (y0 !== y1) { +// // moving top left, pin bottom right +// delta = vec.sub([x1, y1], [x0, y0]) +// } else { +// // moving bottom left, pin top right +// delta = vec.sub([x1, y1 + h1], [x0, y0 + h0]) +// } +// } else if (y0 !== y1) { +// // moving top right, pin bottom left +// delta = vec.sub([x1 + w1, y1], [x0 + w0, y0]) +// } else { +// // moving bottom right, pin top left +// delta = vec.sub([x1 + w1, y1 + h1], [x0 + w0, y0 + h0]) +// } - return delta -} +// return delta +// } -export function deepClone(obj: T): T { +export function deepClone>( + obj: T +): T { if (obj === null) return null - let clone = { ...obj } + const clone = { ...obj } Object.keys(obj).forEach( (key) => @@ -1904,11 +1744,50 @@ export function deepClone(obj: T): T { ) if (Array.isArray(obj)) { - // @ts-ignore clone.length = obj.length - // @ts-ignore - return Array.from(clone) as T + return Array.from(clone as unknown[]) as T } return clone } + +/* ----------------- Shapes Related ----------------- */ + +export function getRotatedBounds(shape: Shape): Bounds { + return getShapeUtils(shape).getRotatedBounds(shape) +} + +export function getShapeBounds(shape: Shape): Bounds { + return getShapeUtils(shape).getBounds(shape) +} + +export function getSelectedBounds(data: Data): Bounds { + return getCommonBounds( + ...getSelectedShapes(data).map((shape) => + getShapeUtils(shape).getBounds(shape) + ) + ) +} + +export function updateParents(data: Data, changedShapeIds: string[]): void { + if (changedShapeIds.length === 0) return + + const { shapes } = getPage(data) + + const parentToUpdateIds = Array.from( + new Set(changedShapeIds.map((id) => shapes[id].parentId).values()) + ).filter((id) => id !== data.currentPageId) + + for (const parentId of parentToUpdateIds) { + const parent = shapes[parentId] as GroupShape + + getShapeUtils(parent).onChildrenChange( + parent, + parent.children.map((id) => shapes[id]) + ) + + shapes[parentId] = { ...parent } + } + + updateParents(data, parentToUpdateIds) +} diff --git a/utils/vec.ts b/utils/vec.ts index b143485c8..a6cd919b6 100644 --- a/utils/vec.ts +++ b/utils/vec.ts @@ -16,7 +16,7 @@ export default class Vec { * Negate a vector. * @param A */ - static neg = (A: number[]) => { + static neg = (A: number[]): number[] => { return [-A[0], -A[1]] } @@ -25,7 +25,7 @@ export default class Vec { * @param A * @param B */ - static add = (A: number[], B: number[]) => { + static add = (A: number[], B: number[]): number[] => { return [A[0] + B[0], A[1] + B[1]] } @@ -34,7 +34,7 @@ export default class Vec { * @param A * @param B */ - static addScalar = (A: number[], n: number) => { + static addScalar = (A: number[], n: number): number[] => { return [A[0] + n, A[1] + n] } @@ -43,7 +43,7 @@ export default class Vec { * @param A * @param B */ - static sub = (A: number[], B: number[]) => { + static sub = (A: number[], B: number[]): number[] => { return [A[0] - B[0], A[1] - B[1]] } @@ -52,7 +52,7 @@ export default class Vec { * @param A * @param B */ - static subScalar = (A: number[], n: number) => { + static subScalar = (A: number[], n: number): number[] => { return [A[0] - n, A[1] - n] } @@ -61,7 +61,7 @@ export default class Vec { * @param A * @param B */ - static vec = (A: number[], B: number[]) => { + static vec = (A: number[], B: number[]): number[] => { // A, B as vectors get the vector from A to B return [B[0] - A[0], B[1] - A[1]] } @@ -71,11 +71,11 @@ export default class Vec { * @param A * @param n */ - static mul = (A: number[], n: number) => { + static mul = (A: number[], n: number): number[] => { return [A[0] * n, A[1] * n] } - static mulV = (A: number[], B: number[]) => { + static mulV = (A: number[], B: number[]): number[] => { return [A[0] * B[0], A[1] * B[1]] } @@ -84,7 +84,7 @@ export default class Vec { * @param A * @param n */ - static div = (A: number[], n: number) => { + static div = (A: number[], n: number): number[] => { return [A[0] / n, A[1] / n] } @@ -93,7 +93,7 @@ export default class Vec { * @param A * @param n */ - static divV = (A: number[], B: number[]) => { + static divV = (A: number[], B: number[]): number[] => { return [A[0] / B[0], A[1] / B[1]] } @@ -101,7 +101,7 @@ export default class Vec { * Perpendicular rotation of a vector A * @param A */ - static per(A: number[]) { + static per = (A: number[]): number[] => { return [A[1], -A[0]] } @@ -110,7 +110,7 @@ export default class Vec { * @param A * @param B */ - static dpr = (A: number[], B: number[]) => { + static dpr = (A: number[], B: number[]): number => { return A[0] * B[0] + A[1] * B[1] } @@ -119,7 +119,7 @@ export default class Vec { * @param A * @param B */ - static cpr = (A: number[], B: number[]) => { + static cpr = (A: number[], B: number[]): number => { return A[0] * B[1] - B[0] * A[1] } @@ -127,7 +127,7 @@ export default class Vec { * Length of the vector squared * @param A */ - static len2 = (A: number[]) => { + static len2 = (A: number[]): number => { return A[0] * A[0] + A[1] * A[1] } @@ -135,7 +135,7 @@ export default class Vec { * Length of the vector * @param A */ - static len = (A: number[]) => { + static len = (A: number[]): number => { return Math.hypot(A[0], A[1]) } @@ -144,7 +144,7 @@ export default class Vec { * @param A * @param B */ - static pry = (A: number[], B: number[]) => { + static pry = (A: number[], B: number[]): number => { return Vec.dpr(A, B) / Vec.len(B) } @@ -152,7 +152,7 @@ export default class Vec { * Get normalized / unit vector. * @param A */ - static uni = (A: number[]) => { + static uni = (A: number[]): number[] => { return Vec.div(A, Vec.len(A)) } @@ -160,7 +160,7 @@ export default class Vec { * Get normalized / unit vector. * @param A */ - static normalize = (A: number[]) => { + static normalize = (A: number[]): number[] => { return Vec.uni(A) } @@ -170,7 +170,7 @@ export default class Vec { * @param B * @returns */ - static tangent = (A: number[], B: number[]) => { + static tangent = (A: number[], B: number[]): number[] => { return Vec.normalize(Vec.sub(A, B)) } @@ -179,7 +179,7 @@ export default class Vec { * @param A * @param B */ - static dist2 = (A: number[], B: number[]) => { + static dist2 = (A: number[], B: number[]): number => { return Vec.len2(Vec.sub(A, B)) } @@ -188,7 +188,7 @@ export default class Vec { * @param A * @param B */ - static dist = (A: number[], B: number[]) => { + static dist = (A: number[], B: number[]): number => { return Math.hypot(A[1] - B[1], A[0] - B[0]) } @@ -198,7 +198,7 @@ export default class Vec { * @param B * @returns */ - static fastDist = (A: number[], B: number[]) => { + static fastDist = (A: number[], B: number[]): number[] => { const V = [B[0] - A[0], B[1] - A[1]] const aV = [Math.abs(V[0]), Math.abs(V[1])] let r = 1 / Math.max(aV[0], aV[1]) @@ -211,7 +211,7 @@ export default class Vec { * @param A * @param B */ - static ang = (A: number[], B: number[]) => { + static ang = (A: number[], B: number[]): number => { return Math.atan2(Vec.cpr(A, B), Vec.dpr(A, B)) } @@ -220,7 +220,7 @@ export default class Vec { * @param A * @param B */ - static angle = (A: number[], B: number[]) => { + static angle = (A: number[], B: number[]): number => { return Math.atan2(B[1] - A[1], B[0] - A[0]) } @@ -229,7 +229,7 @@ export default class Vec { * @param A * @param B */ - static med = (A: number[], B: number[]) => { + static med = (A: number[], B: number[]): number[] => { return Vec.mul(Vec.add(A, B), 0.5) } @@ -238,7 +238,7 @@ export default class Vec { * @param A * @param r rotation in radians */ - static rot = (A: number[], r: number) => { + static rot = (A: number[], r: number): number[] => { return [ A[0] * Math.cos(r) - A[1] * Math.sin(r), A[0] * Math.sin(r) + A[1] * Math.cos(r), @@ -251,7 +251,7 @@ export default class Vec { * @param C center * @param r rotation in radians */ - static rotWith = (A: number[], C: number[], r: number) => { + static rotWith = (A: number[], C: number[], r: number): number[] => { if (r === 0) return A const s = Math.sin(r) @@ -271,7 +271,7 @@ export default class Vec { * @param A * @param B */ - static isEqual = (A: number[], B: number[]) => { + static isEqual = (A: number[], B: number[]): boolean => { return A[0] === B[0] && A[1] === B[1] } @@ -281,19 +281,25 @@ export default class Vec { * @param B * @param t scalar */ - static lrp = (A: number[], B: number[], t: number) => { + static lrp = (A: number[], B: number[], t: number): number[] => { return Vec.add(A, Vec.mul(Vec.vec(A, B), t)) } /** - * Interpolate from A to B when curVAL goes fromVAL => to + * Interpolate from A to B when curVAL goes fromVAL: number[] => to * @param A * @param B * @param from Starting value * @param to Ending value * @param s Strength */ - static int = (A: number[], B: number[], from: number, to: number, s = 1) => { + static int = ( + A: number[], + B: number[], + from: number, + to: number, + s = 1 + ): number[] => { const t = (Vec.clamp(from, to) - from) / (to - from) return Vec.add(Vec.mul(A, 1 - t), Vec.mul(B, s)) } @@ -304,7 +310,7 @@ export default class Vec { * @param pc * @param p2 */ - static ang3 = (p1: number[], pc: number[], p2: number[]) => { + static ang3 = (p1: number[], pc: number[], p2: number[]): number => { // this, const v1 = Vec.vec(pc, p1) const v2 = Vec.vec(pc, p2) @@ -316,11 +322,11 @@ export default class Vec { * @param A * @returns */ - static abs = (A: number[]) => { + static abs = (A: number[]): number[] => { return [Math.abs(A[0]), Math.abs(A[1])] } - static rescale = (a: number[], n: number) => { + static rescale = (a: number[], n: number): number[] => { const l = Vec.len(a) return [(n * a[0]) / l, (n * a[1]) / l] } @@ -331,18 +337,18 @@ export default class Vec { * @param pc * @param p2 */ - static isLeft = (p1: number[], pc: number[], p2: number[]) => { + static isLeft = (p1: number[], pc: number[], p2: number[]): number => { // isLeft: >0 for counterclockwise // =0 for none (degenerate) // <0 for clockwise return (pc[0] - p1[0]) * (p2[1] - p1[1]) - (p2[0] - p1[0]) * (pc[1] - p1[1]) } - static clockwise = (p1: number[], pc: number[], p2: number[]) => { + static clockwise = (p1: number[], pc: number[], p2: number[]): boolean => { return Vec.isLeft(p1, pc, p2) > 0 } - static round = (a: number[], d = 5) => { + static round = (a: number[], d = 5): number[] => { return a.map((v) => Number(v.toPrecision(d))) } @@ -398,7 +404,7 @@ export default class Vec { A: number[], u: number[], P: number[] - ) => { + ): number[] => { return Vec.add(A, Vec.mul(u, Vec.pry(Vec.sub(P, A), u))) } @@ -413,7 +419,7 @@ export default class Vec { A: number[], u: number[], P: number[] - ) => { + ): number => { return Vec.dist(P, Vec.nearestPointOnLineThroughPoint(A, u, P)) } @@ -430,7 +436,7 @@ export default class Vec { B: number[], P: number[], clamp = true - ) => { + ): number[] => { const delta = Vec.sub(B, A) const length = Vec.len(delta) const u = Vec.div(delta, length) @@ -461,7 +467,7 @@ export default class Vec { B: number[], P: number[], clamp = true - ) => { + ): number => { return Vec.dist(P, Vec.nearestPointOnLineSegment(A, B, P, clamp)) } @@ -472,7 +478,7 @@ export default class Vec { * @param d * @returns */ - static nudge = (A: number[], B: number[], d: number) => { + static nudge = (A: number[], B: number[], d: number): number[] => { return Vec.add(A, Vec.mul(Vec.uni(Vec.vec(A, B)), d)) } @@ -481,7 +487,7 @@ export default class Vec { * @param a * @param n */ - static toPrecision = (a: number[], n = 4) => { + static toPrecision = (a: number[], n = 4): number[] => { return [+a[0].toPrecision(n), +a[1].toPrecision(n)] } } diff --git a/yarn.lock b/yarn.lock index 8da8429d1..bddcec977 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,73 +9,19 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.5.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" - integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== - -"@babel/compat-data@^7.14.5": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== -"@babel/core@^7.1.0", "@babel/core@^7.4.4", "@babel/core@^7.7.5": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" - integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.3" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.3" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/core@^7.11.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.5.tgz#d281f46a9905f07d1b3bf71ead54d9c7d89cb1e3" - integrity sha512-RN/AwP2DJmQTZSfiDaD+JQQ/J99KsIpOCfBE5pL+5jJSt7nI3nYGoAXZu+ffYSQ029NLs2DstZb+eR81uuARgg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/core@^7.7.2": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.7.2", "@babel/core@^7.7.5": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== @@ -96,15 +42,6 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" - integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== - dependencies: - "@babel/types" "^7.14.2" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.14.5", "@babel/generator@^7.7.2": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" @@ -114,32 +51,22 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.14.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" -"@babel/helper-compilation-targets@^7.10.4", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" - integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== - dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.14.5": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== @@ -149,40 +76,26 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" - integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" + integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.14.4" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" - integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.0.3.tgz#df9da66285b884ce66417abdd0b6ca91198149bd" - integrity sha512-dULDd/APiP4JowYDAMosecKOi/1v+UId99qhBGiO3myM29KtAVKS/R3x3OJJNBR0FeYB1BcYb2dCwkhqvxWXXQ== - dependencies: - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/traverse" "^7.11.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.2.2": version "0.2.3" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" @@ -197,21 +110,12 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" + "@babel/types" "^7.14.5" "@babel/helper-function-name@^7.14.5": version "7.14.5" @@ -222,13 +126,6 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" @@ -236,14 +133,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== - dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" @@ -251,13 +140,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - "@babel/helper-member-expression-to-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" @@ -265,34 +147,13 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.14.5": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - "@babel/helper-module-transforms@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" @@ -307,13 +168,6 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" @@ -321,34 +175,19 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-plugin-utils@^7.14.5": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" - integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.4" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" "@babel/helper-replace-supers@^7.14.5": version "7.14.5" @@ -360,13 +199,6 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - "@babel/helper-simple-access@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" @@ -374,19 +206,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.14.5" "@babel/helper-split-export-declaration@^7.14.5": version "7.14.5" @@ -395,50 +220,22 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - "@babel/helper-validator-identifier@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/helpers@^7.14.5": +"@babel/helper-wrap-function@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.5.tgz#4870f8d9a6fdbbd65e5674a3558b4ff7fef0d9b2" - integrity sha512-xtcWOuN9VL6nApgVHtq3PPcQv5qFBJzoSZzJ/2c0QK/IP/gxVcoWSNQwFEGvmbQsuS9rhYqjILDGGXcTkA705Q== + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== dependencies: + "@babel/helper-function-name" "^7.14.5" "@babel/template" "^7.14.5" "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" @@ -452,16 +249,7 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.14.5": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== @@ -470,157 +258,147 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.11.5", "@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3", "@babel/parser@^7.7.0": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" - integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== - -"@babel/parser@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.5.tgz#4cd2f346261061b2518873ffecdf1612cb032829" - integrity sha512-TM8C+xtH/9n1qzX+JNHi7AN2zHMTiPUtspO0ZdHflW8KaskkALhMmuMHb4bCmNdv9VAPzJX3/bXqkVLnAvsPfg== - -"@babel/parser@^7.14.6", "@babel/parser@^7.7.2": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.7.2": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" + integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" - integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== +"@babel/plugin-proposal-async-generator-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" + integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.4.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.14.3": - version "7.14.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" - integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== +"@babel/plugin-proposal-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" + integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.3" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" - integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" - integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" - integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" - integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" - integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" - integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" - integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== +"@babel/plugin-proposal-object-rest-spread@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" + integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-compilation-targets" "^7.14.4" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" + "@babel/plugin-transform-parameters" "^7.14.5" -"@babel/plugin-proposal-optional-catch-binding@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" - integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" - integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== +"@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== +"@babel/plugin-proposal-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" + integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== +"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -643,12 +421,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -720,21 +498,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -748,282 +519,282 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" - integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== +"@babel/plugin-transform-block-scoping@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" - integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== +"@babel/plugin-transform-classes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" + integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.14.4" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.14.4": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" - integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== +"@babel/plugin-transform-destructuring@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" + integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== +"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-for-of@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-amd@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" - integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== +"@babel/plugin-transform-modules-commonjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" + integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.14.2": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" - integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== +"@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== +"@babel/plugin-transform-spread@^7.14.5": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@^7.11.0": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" - integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997" + integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA== dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-compilation-targets" "^7.14.4" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.14.3" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/compat-data" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.5" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.5" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -1033,46 +804,46 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.4" - "@babel/plugin-transform-classes" "^7.14.4" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.14.4" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.5" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.5" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.4" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" + "@babel/types" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.14.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": @@ -1087,11 +858,11 @@ esutils "^2.0.2" "@babel/runtime-corejs3@^7.10.2": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66" - integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.6.tgz#066b966eda40481740180cb3caab861a3f208cd3" + integrity sha512-Xl8SPYtdjcMoCsIM4teyVRg7jIcgl8F2kRtoCcXuHzXswt9UxZCS6BzRo8fcnCuP6u2XtPgvyonmEPF57Kxo9Q== dependencies: - core-js-pure "^3.0.0" + core-js-pure "^3.14.0" regenerator-runtime "^0.13.4" "@babel/runtime@7.12.5": @@ -1101,30 +872,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.13.10", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.14.0": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13", "@babel/template@^7.3.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/template@^7.14.5": +"@babel/template@^7.14.5", "@babel/template@^7.3.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== @@ -1133,21 +888,7 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.7.0": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.14.5", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.7.2": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg== @@ -1171,15 +912,7 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.14.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" - integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" - -"@babel/types@^7.14.5": +"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== @@ -1192,14 +925,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -1212,13 +937,20 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@hapi/accept@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" - integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== +"@eslint/eslintrc@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" + integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== dependencies: - "@hapi/boom" "9.x.x" - "@hapi/hoek" "9.x.x" + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" "@hapi/accept@5.0.2": version "5.0.2" @@ -1294,17 +1026,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" - slash "^3.0.0" - "@jest/console@^27.0.2": version "27.0.2" resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6" @@ -1317,40 +1038,6 @@ jest-util "^27.0.2" slash "^3.0.0" -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - "@jest/core@^27.0.4": version "27.0.4" resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.4.tgz#679bf9ac07900da2ddbb9667bb1afa8029038f53" @@ -1386,15 +1073,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - "@jest/environment@^27.0.3": version "27.0.3" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.3.tgz#68769b1dfdd213e3456169d64fbe9bd63a5fda92" @@ -1405,17 +1083,6 @@ "@types/node" "*" jest-mock "^27.0.3" -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== - dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" - "@jest/fake-timers@^27.0.3": version "27.0.3" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.3.tgz#9899ba6304cc636734c74478df502e18136461dd" @@ -1428,15 +1095,6 @@ jest-mock "^27.0.3" jest-util "^27.0.2" -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" - "@jest/globals@^27.0.3": version "27.0.3" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.3.tgz#1cf8933b7791bba0b99305cbf39fd4d2e3fe4060" @@ -1446,38 +1104,6 @@ "@jest/types" "^27.0.2" expect "^27.0.2" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" - "@jest/reporters@^27.0.4": version "27.0.4" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.4.tgz#95609b1be97afb80d55d8aa3d7c3179c15810e65" @@ -1508,15 +1134,6 @@ terminal-link "^2.0.0" v8-to-istanbul "^7.0.0" -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - "@jest/source-map@^27.0.1": version "27.0.1" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz#2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4" @@ -1526,16 +1143,6 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== - dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-result@^27.0.2": version "27.0.2" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10" @@ -1546,17 +1153,6 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - "@jest/test-sequencer@^27.0.4": version "27.0.4" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz#976493b277594d81e589896f0ed21f198308928a" @@ -1567,28 +1163,6 @@ jest-haste-map "^27.0.2" jest-runtime "^27.0.4" -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^27.0.2": version "27.0.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.2.tgz#b073b7c589e3f4b842102468875def2bb722d6b5" @@ -1610,15 +1184,16 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" "@types/yargs" "^15.0.0" - chalk "^3.0.0" + chalk "^4.0.0" "@jest/types@^27.0.2": version "27.0.2" @@ -1631,19 +1206,19 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@monaco-editor/loader@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.0.1.tgz#7068c9b07bbc65387c0e7a4df6dac0a326155905" - integrity sha512-hycGOhLqLYjnD0A/FHs56covEQWnDFrSnm/qLKkB/yoeayQ7ju+Vaj4SdTojGrXeY6jhMDx59map0+Jqwquh1Q== +"@monaco-editor/loader@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.1.1.tgz#37db648c81a86946d0febd391de00df9c28a0a3d" + integrity sha512-mkT4r4xDjIyOG9o9M6rJDSzEIeonwF80sYErxEvAAL4LncFVdcbNli8Qv6NDqF6nyv6sunuKkDzo4iFjxPL+uQ== dependencies: state-local "^1.0.6" -"@monaco-editor/react@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.1.3.tgz#7dcaa584f2a4e8bd8f5298604f0b5368f8ebca55" - integrity sha512-kqcjVuoy6btcgALAk4RV/SlasveM+WTw5lzzlyq5FhKXjF8wu5tSe/2oCQ1uhLpcdtxcHfx3L0HrcAPWnejFnQ== +"@monaco-editor/react@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.2.1.tgz#75cb6e85e3640e05887a14005c370e46bd71256b" + integrity sha512-yN8qVY0PyFIbqPjfrZ5TbR/wrcfeiwoys8+0QkmyfiOzG74vXxSBOPIUxk7Ly+qCj7qWHPq1uDJskzFGaIqaPA== dependencies: - "@monaco-editor/loader" "^1.0.1" + "@monaco-editor/loader" "^1.1.1" prop-types "^15.7.2" state-local "^1.0.7" @@ -1663,30 +1238,25 @@ require_optional "^1.0.1" typeorm "^0.2.30" -"@next/env@10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-10.2.0.tgz#154dbce2efa3ad067ebd20b7d0aa9aed775e7c97" - integrity sha512-tsWBsn1Rb6hXRaHc/pWMCpZ4Ipkf3OCbZ54ef5ukgIyEvzzGdGFXQshPP2AF7yb+8yMpunWs7vOMZW3e8oPF6A== +"@next/env@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@next/env/-/env-11.0.0.tgz#bdd306a45e88ba3e4e7a36aa91806f6486bb61d0" + integrity sha512-VKpmDvTYeCpEQjREg3J4pCmVs/QjEzoLmkM8shGFK6e9AmFd0G9QXOL8HGA8qKhy/XmNb7dHeMqrcMiBua4OgA== -"@next/env@10.2.3": - version "10.2.3" - resolved "https://registry.yarnpkg.com/@next/env/-/env-10.2.3.tgz#ede3bbe68cec9939c37168ea2077f9adbc68334e" - integrity sha512-uBOjRBjsWC4C8X3DfmWWP6ekwLnf2JCCwQX9KVnJtJkqfDsv1yQPakdOEwvJzXQc3JC/v5KKffYPVmV2wHXCgQ== +"@next/eslint-plugin-next@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-11.0.0.tgz#e6fb93a00bdaba371904f2b2698b184e6278d369" + integrity sha512-fPZ0904yY1box6bRpR9rJqIkNxJdvzzxH7doXS+cdjyBAdptMR7wj3mcx1hEikBHzWduU8BOXBvRg2hWc09YDQ== -"@next/polyfill-module@10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.2.0.tgz#61f41110c4b465cc26d113e2054e205df61c3594" - integrity sha512-Nl3GexIUXsmuggkUqrRFyE/2k7UI44JaVzSywtXEyHzxpZm2a5bdMaWuC89pgLiFDDOqmbqyLAbtwm5lNxa7Eg== +"@next/polyfill-module@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-11.0.0.tgz#cb2f46b323bbe7f8a337ccd80fb82314d4039403" + integrity sha512-gydtFzRqsT549U8+sY8382I/f4HFcelD8gdUGnAofQJa/jEU1jkxmjCHC8tmEiyeMLidl7iDZgchfSCpmMzzUg== -"@next/polyfill-module@10.2.3": - version "10.2.3" - resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.2.3.tgz#5a29f50c3ce3a56b8268d3b8331c691d8039467a" - integrity sha512-OkeY4cLhzfYbXxM4fd+6V4s5pTPuyfKSlavItfNRA6PpS7t1/R6YjO7S7rB8tu1pbTGuDHGIdE1ioDv15bAbDQ== - -"@next/react-dev-overlay@10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.2.0.tgz#4220121abac7e3404cbaf467784aeecca8be46cf" - integrity sha512-PRIAoWog41hLN4iJ8dChKp4ysOX0Q8yiNQ/cwzyqEd3EjugkDV5OiKl3mumGKaApJaIra1MX6j1wgQRuLhuWMA== +"@next/react-dev-overlay@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-11.0.0.tgz#6befb4d00d952551db1b3909023074eb5778ac5d" + integrity sha512-q+Wp+eStEMThe77zxdeJ/nbuODkHR6P+/dfUqYXZSqbLf6x5c5xwLBauwwVbkCYFZpAlDuL8Jk8QSAH1OsqC2w== dependencies: "@babel/code-frame" "7.12.11" anser "1.4.9" @@ -1700,32 +1270,10 @@ stacktrace-parser "0.1.10" strip-ansi "6.0.0" -"@next/react-dev-overlay@10.2.3": - version "10.2.3" - resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.2.3.tgz#95313d10a8848f6c7b9e31ae3bd2a3627d136841" - integrity sha512-E6g2jws4YW94l0lMMopBVKIZK2mEHfSBvM0d9dmzKG9L/A/kEq6LZCB4SiwGJbNsAdlk2y3USDa0oNbpA+m5Kw== - dependencies: - "@babel/code-frame" "7.12.11" - anser "1.4.9" - chalk "4.0.0" - classnames "2.2.6" - css.escape "1.5.1" - data-uri-to-buffer "3.0.1" - platform "1.3.6" - shell-quote "1.7.2" - source-map "0.8.0-beta.0" - stacktrace-parser "0.1.10" - strip-ansi "6.0.0" - -"@next/react-refresh-utils@10.2.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.2.0.tgz#55953b697769c6647f371bc6bcd865a24e1a22e9" - integrity sha512-3I31K9B4hEQRl7yQ44Umyz+szHtuMJrNdwsgJGhoEnUCXSBRHp5wv5Zv8eDa2NewSbe53b2C0oOpivrzmdBakw== - -"@next/react-refresh-utils@10.2.3": - version "10.2.3" - resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.2.3.tgz#2f3e42fe6680798f276e3621345c2886b231348b" - integrity sha512-qtBF56vPC6d6a8p7LYd0iRjW89fhY80kAIzmj+VonvIGjK/nymBjcFUhbKiMFqlhsarCksnhwX+Zmn95Dw9qvA== +"@next/react-refresh-utils@11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-11.0.0.tgz#cb671723c50b904eaa44b4b45c0845476ecd8825" + integrity sha512-hi5eY+KBn4QGtUv7VL2OptdM33fI2hxhd7+omOFmAK+S0hDWhg1uqHqqGJk0W1IfqlWEzzL10WvTJDPRAtDugQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1748,18 +1296,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@opentelemetry/api@0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" - integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== - dependencies: - "@opentelemetry/context-base" "^0.14.0" - -"@opentelemetry/context-base@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" - integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== - "@panva/asn1.js@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" @@ -1822,15 +1358,15 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-context-menu@^0.0.21": - version "0.0.21" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-0.0.21.tgz#b080c8e515b9a0d18fcda9b02f34b7a94347ef08" - integrity sha512-snRhgVDtdxBNwds2ULd7RQAB97PfSeKlrL5rRudlj4YTlLq7y/Jr0oJ7FTnu9EylfH2ii0uKcW5dEVhrbzr5YQ== +"@radix-ui/react-context-menu@^0.0.22": + version "0.0.22" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-0.0.22.tgz#1cd09008ec25c07e268822fd2686d9dbb6dd97eb" + integrity sha512-saX/fAsvZL5GMBrSwxipBUjGZzPVS838BWFoWaN9LsOE/Cs/YDaItphKWolys0qxGop0YA8RDwArKbibKetaTg== dependencies: "@babel/runtime" "^7.13.10" "@radix-ui/primitive" "0.0.5" "@radix-ui/react-context" "0.0.5" - "@radix-ui/react-menu" "0.0.19" + "@radix-ui/react-menu" "0.0.20" "@radix-ui/react-polymorphic" "0.0.12" "@radix-ui/react-primitive" "0.0.14" "@radix-ui/react-use-callback-ref" "0.0.5" @@ -1877,17 +1413,17 @@ "@radix-ui/react-use-callback-ref" "0.0.5" "@radix-ui/react-use-escape-keydown" "0.0.6" -"@radix-ui/react-dropdown-menu@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-0.0.20.tgz#ca4667deb38ff7b74e6741aac1cebd1b50e3ec07" - integrity sha512-3MXtFeNkRZxAA32gvAGBdzlmJRMCNgBKWy0rDSd5NNzRjtqNFKZRR5dd1gWQTiS24aLxSiztVc9exnvMx4Lu8g== +"@radix-ui/react-dropdown-menu@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-0.0.21.tgz#6676a2386f4644f5e5afcf1e1bea1a75dd425672" + integrity sha512-y3FaUxMhXOhovf9Y8/do6qRqpk1wu3WtWTlCOUAZiqohmj5OUZAkyw/XWzoSDmQlHOfBRnhzu1CwQwkY69nZ0g== dependencies: "@babel/runtime" "^7.13.10" "@radix-ui/primitive" "0.0.5" "@radix-ui/react-compose-refs" "0.0.5" "@radix-ui/react-context" "0.0.5" "@radix-ui/react-id" "0.0.6" - "@radix-ui/react-menu" "0.0.19" + "@radix-ui/react-menu" "0.0.20" "@radix-ui/react-polymorphic" "0.0.12" "@radix-ui/react-primitive" "0.0.14" "@radix-ui/react-use-controllable-state" "0.0.6" @@ -1948,10 +1484,10 @@ "@radix-ui/react-polymorphic" "0.0.12" "@radix-ui/react-primitive" "0.0.14" -"@radix-ui/react-menu@0.0.19": - version "0.0.19" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-0.0.19.tgz#12036862ad6c813e442a14316b5ed380f54962e9" - integrity sha512-ACGk5i83KahzHGyZVpWGyZBi68VCplQgMmS8ZvuuwDGf1vQl5dlpxvWM8iKh6EUL8zCTXNzX2jRtg0NZYoRrPg== +"@radix-ui/react-menu@0.0.20": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-0.0.20.tgz#7fdbe129037a1e69380b1e24ffcfa02401c78ffb" + integrity sha512-d7FGwbMK6B02FjhX78bXSVPnpXknJ4EDBdHDxWaFB+tJJheJCH1oa+qV6j9V1Ewscok60U4n5pO4TzieOPtTVA== dependencies: "@babel/runtime" "^7.13.10" "@radix-ui/primitive" "0.0.5" @@ -2171,7 +1707,7 @@ dependencies: "@babel/runtime" "^7.13.10" -"@rollup/plugin-babel@^5.1.0", "@rollup/plugin-babel@^5.2.0": +"@rollup/plugin-babel@^5.2.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== @@ -2179,26 +1715,6 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-commonjs@^11.0.0": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" - integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== - dependencies: - "@rollup/pluginutils" "^3.0.8" - commondir "^1.0.1" - estree-walker "^1.0.1" - glob "^7.1.2" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - -"@rollup/plugin-json@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - "@rollup/plugin-node-resolve@^11.2.1": version "11.2.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" @@ -2211,19 +1727,7 @@ is-module "^1.0.0" resolve "^1.19.0" -"@rollup/plugin-node-resolve@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" - integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.17.0" - -"@rollup/plugin-replace@^2.2.1", "@rollup/plugin-replace@^2.4.1": +"@rollup/plugin-replace@^2.4.1": version "2.4.2" resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== @@ -2231,7 +1735,7 @@ "@rollup/pluginutils" "^3.1.0" magic-string "^0.25.7" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -2240,17 +1744,22 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@sentry/browser@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.7.1.tgz#e01144a08984a486ecc91d7922cc457e9c9bd6b7" - integrity sha512-R5PYx4TTvifcU790XkK6JVGwavKaXwycDU0MaAwfc4Vf7BLm5KCNJCsDySu1RPAap/017MVYf54p6dWvKiRviA== +"@rushstack/eslint-patch@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50" + integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA== + +"@sentry/browser@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.7.2.tgz#cfbe060de5a9694617f175a6bde469e5e266792e" + integrity sha512-Lv0Ne1QcesyGAhVcQDfQa3hDPR/MhPSDTMg3xFi+LxqztchVc4w/ynzR0wCZFb8KIHpTj5SpJHfxpDhXYMtS9g== dependencies: - "@sentry/core" "6.7.1" - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/core" "6.7.2" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" tslib "^1.9.3" -"@sentry/cli@^1.63.1", "@sentry/cli@^1.64.1": +"@sentry/cli@^1.64.1": version "1.66.0" resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.66.0.tgz#0526f1bc1c0570ce72ed817190af92f3b63a2e9a" integrity sha512-2pZ+JHnvKqwyJWcGkKg/gCM/zURYronAnruBNllI+rH2g5IL0N90deMmjB1xcqXS66J222+MPTtWrGEK1Vl0/w== @@ -2262,118 +1771,111 @@ progress "^2.0.3" proxy-from-env "^1.1.0" -"@sentry/core@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.7.1.tgz#c3aaa6415d06bec65ac446b13b84f073805633e3" - integrity sha512-VAv8OR/7INn2JfiLcuop4hfDcyC7mfL9fdPndQEhlacjmw8gRrgXjR7qyhnCTgzFLkHI7V5bcdIzA83TRPYQpA== +"@sentry/core@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.7.2.tgz#1d294fac6e62744bce3b9dfbcd90b14e93620480" + integrity sha512-NTZqwN5nR94yrXmSfekoPs1mIFuKvf8esdIW/DadwSKWAdLJwQTJY9xK/8PQv+SEzd7wiitPAx+mCw2By1xiNQ== dependencies: - "@sentry/hub" "6.7.1" - "@sentry/minimal" "6.7.1" - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/hub" "6.7.2" + "@sentry/minimal" "6.7.2" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" tslib "^1.9.3" -"@sentry/hub@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.7.1.tgz#d46d24deec67f0731a808ca16796e6765b371bc1" - integrity sha512-eVCTWvvcp6xa0A5GGNHMQEWslmKPlisE5rGmsV/kjvSUv3zSrI0eIDfb51ikdnCiBjHpK2NBWP8Vy8cZOEJegg== +"@sentry/hub@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.7.2.tgz#31b250e74aa303877620dfa500aa89e4411e2dec" + integrity sha512-05qVW6ymChJsXag4+fYCQokW3AcABIgcqrVYZUBf6GMU/Gbz5SJqpV7y1+njwWvnPZydMncP9LaDVpMKbE7UYQ== dependencies: - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" tslib "^1.9.3" -"@sentry/integrations@6.7.1", "@sentry/integrations@^6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.7.1.tgz#9a6723e35589dfdb13c2cd22259184946f0b275e" - integrity sha512-nWxAPTunZxE+E6bi4FyhKHXcUUVpbSpvtwvdHiw/K72p7FuX/K0qU002Ltdfs4U1nyMIjesE776IGMrBLU67uA== +"@sentry/integrations@6.7.2", "@sentry/integrations@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.7.2.tgz#1ddfb165b4aee42d0e9d9ef531c5ded8a73cbd61" + integrity sha512-IvOLqKVTxPxSJLbKVEe15BjvotnWBs86h5MJx3DLA/1HLP4xtUOvFsdmuMLJij5PtFG10HuUpRn8acEh5h9PTw== dependencies: - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" localforage "^1.8.1" tslib "^1.9.3" -"@sentry/minimal@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.7.1.tgz#babf85ee2f167e9dcf150d750d7a0b250c98449c" - integrity sha512-HDDPEnQRD6hC0qaHdqqKDStcdE1KhkFh0RCtJNMCDn0zpav8Dj9AteF70x6kLSlliAJ/JFwi6AmQrLz+FxPexw== +"@sentry/minimal@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.7.2.tgz#9e6c0c587daea64a9042041694a4ad5d559d16cd" + integrity sha512-jkpwFv2GFHoVl5vnK+9/Q+Ea8eVdbJ3hn3/Dqq9MOLFnVK7ED6MhdHKLT79puGSFj+85OuhM5m2Q44mIhyS5mw== dependencies: - "@sentry/hub" "6.7.1" - "@sentry/types" "6.7.1" + "@sentry/hub" "6.7.2" + "@sentry/types" "6.7.2" tslib "^1.9.3" -"@sentry/nextjs@^6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-6.7.1.tgz#af103b91feba894a3e0a0beab29b6027d17d9e80" - integrity sha512-TQjTbgvvFOinCKJRmC0q1jEhn5A+pUR5wIz8ERITL5afU2DzzQvdci2lvgm1FPwGdD4j7Mom5Hz4vwClzeyceQ== +"@sentry/nextjs@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-6.7.2.tgz#bb689aa75222ae899abbc2307cd6e676ca61946c" + integrity sha512-O891EUf9wTSDU+n1GH/ibPblOZVbWfWe8HTnH/BvsPjLjzumJ1IFSpQhQtyiYpmewbEDuR1F2hmqD+CoiTAtTg== dependencies: - "@sentry/core" "6.7.1" - "@sentry/integrations" "6.7.1" - "@sentry/node" "6.7.1" - "@sentry/react" "6.7.1" - "@sentry/tracing" "6.7.1" - "@sentry/utils" "6.7.1" - "@sentry/webpack-plugin" "1.15.0" + "@sentry/core" "6.7.2" + "@sentry/integrations" "6.7.2" + "@sentry/node" "6.7.2" + "@sentry/react" "6.7.2" + "@sentry/tracing" "6.7.2" + "@sentry/utils" "6.7.2" + "@sentry/webpack-plugin" "1.15.1" tslib "^1.9.3" -"@sentry/node@6.7.1", "@sentry/node@^6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.7.1.tgz#b09e2eca8e187168feba7bd865a23935bf0f5cc0" - integrity sha512-rtZo1O8ROv4lZwuljQz3iFZW89oXSlgXCG2VqkxQyRspPWu89abROpxLjYzsWwQ8djnur1XjFv51kOLDUTS6Qw== +"@sentry/node@6.7.2", "@sentry/node@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.7.2.tgz#ef2b865af2c37d83966db7fbd031179aa8c82cc0" + integrity sha512-vfNTmxBbHthAKPDBo0gVk/aNHdgUfXLzmaK7FgWO7cISiI2soCfvKEIP61XqIFZru06teqcRuDsYlR4wSeyWpg== dependencies: - "@sentry/core" "6.7.1" - "@sentry/hub" "6.7.1" - "@sentry/tracing" "6.7.1" - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/core" "6.7.2" + "@sentry/hub" "6.7.2" + "@sentry/tracing" "6.7.2" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/react@6.7.1", "@sentry/react@^6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.7.1.tgz#7d69b9509ee1c08fd20f41b2bd3452f061524c83" - integrity sha512-kLswcfwkq+Pv4ZAQ0Tq1X3PUx0t/glD3kRRSQ0ZGn4zdQWhkTkIaVeSrxfU+K9nwZisVEAVXtMJadk4X2KNySA== +"@sentry/react@6.7.2", "@sentry/react@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/react/-/react-6.7.2.tgz#68edb082ea42cabcf86939f254457436b82b4a0a" + integrity sha512-gjXRuhgd3l2s18Y4dw9ZMWCiFKyeAU79fBiYdv8lqu9EFPFquU0qkZbgep8D37Xq2GWjQM0qEBmD758L6bUwvQ== dependencies: - "@sentry/browser" "6.7.1" - "@sentry/minimal" "6.7.1" - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/browser" "6.7.2" + "@sentry/minimal" "6.7.2" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" hoist-non-react-statics "^3.3.2" tslib "^1.9.3" -"@sentry/tracing@6.7.1", "@sentry/tracing@^6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.7.1.tgz#b11f0c17a6c5dc14ef44733e5436afb686683268" - integrity sha512-wyS3nWNl5mzaC1qZ2AIp1hjXnfO9EERjMIJjCihs2LWBz1r3efxrHxJHs8wXlNWvrT3KLhq/7vvF5CdU82uPeQ== +"@sentry/tracing@6.7.2", "@sentry/tracing@^6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.7.2.tgz#78a6934837143ae5e200b49bd256bc8a917477bc" + integrity sha512-juKlI7FICKONWJFJxDxerj0A+8mNRhmtrdR+OXFqOkqSAy/QXlSFZcA/j//O19k2CfwK1BrvoMcQ/4gnffUOVg== dependencies: - "@sentry/hub" "6.7.1" - "@sentry/minimal" "6.7.1" - "@sentry/types" "6.7.1" - "@sentry/utils" "6.7.1" + "@sentry/hub" "6.7.2" + "@sentry/minimal" "6.7.2" + "@sentry/types" "6.7.2" + "@sentry/utils" "6.7.2" tslib "^1.9.3" -"@sentry/types@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.7.1.tgz#c8263e1886df5e815570c4668eb40a1cfaa1c88b" - integrity sha512-9AO7HKoip2MBMNQJEd6+AKtjj2+q9Ze4ooWUdEvdOVSt5drg7BGpK221/p9JEOyJAZwEPEXdcMd3VAIMiOb4MA== +"@sentry/types@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.7.2.tgz#8108272c98ad7784ddf9ddda0b7bdc6880ed6e50" + integrity sha512-h21Go/PfstUN+ZV6SbwRSZVg9GXRJWdLfHoO5PSVb3TVEMckuxk8tAE57/u+UZDwX8wu+Xyon2TgsKpiWKxqUg== -"@sentry/utils@6.7.1": - version "6.7.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.7.1.tgz#909184ad580f0f6375e1e4d4a6ffd33dfe64a4d1" - integrity sha512-Tq2otdbWlHAkctD+EWTYKkEx6BL1Qn3Z/imkO06/PvzpWvVhJWQ5qHAzz5XnwwqNHyV03KVzYB6znq1Bea9HuA== +"@sentry/utils@6.7.2": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.7.2.tgz#c7f957ebe16de3e701a0c5477ac2dba04e7b4b68" + integrity sha512-9COL7aaBbe61Hp5BlArtXZ1o/cxli1NGONLPrVT4fMyeQFmLonhUiy77NdsW19XnvhvaA+2IoV5dg3dnFiF/og== dependencies: - "@sentry/types" "6.7.1" + "@sentry/types" "6.7.2" tslib "^1.9.3" -"@sentry/webpack-plugin@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.15.0.tgz#c7f9eafbbace1929c3fb81bb720fc0d7e8b4f86d" - integrity sha512-KHVug+xI+KH/xCL7otWcRRszw0rt6i/BCH5F8+6/njz2gCBrYQOzdMvzWm4GeXZUuw5ekgycYaUhDs1/6enjuQ== - dependencies: - "@sentry/cli" "^1.63.1" - -"@sentry/webpack-plugin@^1.15.1": +"@sentry/webpack-plugin@1.15.1", "@sentry/webpack-plugin@^1.15.1": version "1.15.1" resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.15.1.tgz#deb014fce8c1b51811100f25ec9050dd03addd9b" integrity sha512-/Z06MJDXyWcN2+CbeDTMDwVzySjgZWQajOke773TvpkgqdtkeT1eYBsA+pfsje+ZE1prEgrZdlH/L9HdM1odnQ== @@ -2400,28 +1902,27 @@ integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== "@state-designer/core@latest": - version "1.7.31" - resolved "https://registry.yarnpkg.com/@state-designer/core/-/core-1.7.31.tgz#9b0662d347110dbf7e31b42d06f800e1cb953cae" - integrity sha512-GoTImDzQT7KMqCMo5sjQXVIIvVeH0vBaqEuwiL9Om41cstWg3cdUecrE+xZgJSAM5GDRcjzyiVRjZB/OP0aogw== + version "1.7.32" + resolved "https://registry.yarnpkg.com/@state-designer/core/-/core-1.7.32.tgz#1bbc3ce4c60ef73db4481af7f178a74941591386" + integrity sha512-kcJ847b6r4NuMNUjQQ7Nu4M37DDENzF4JZ/JbH1n7T0ItyMlYhxrOW+2upJww5V6YdoRTtKAO01ft8vKFL9RAg== dependencies: immer "^8.0.2" lodash "^4.17.21" lodash-es "^4.17.21" object.entries "^1.1.3" object.fromentries "^2.0.4" - tsdx "^0.14.1" -"@state-designer/react@^1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@state-designer/react/-/react-1.7.3.tgz#5e8ecbdd4230045b445e004d56ebb032cdb3e5ce" - integrity sha512-l1S+cZwwC6/MqZpBMNmC4jmfKwHSWB3kKJu2zpwDSVS92giiC8D/d/TuDZGsu390NfOiYGIVljNfwGI4OzhESQ== +"@state-designer/react@^1.7.32": + version "1.7.32" + resolved "https://registry.yarnpkg.com/@state-designer/react/-/react-1.7.32.tgz#a8f6cab6093de9eba54de7b29b945086c44850d6" + integrity sha512-k6sxP/aP2uPu+jKc6O1aGu9Jkbg491WfJkM2S/j4RPOd+4oJIAjma2lHF2zadY1npiCXnf17vaDcDvUKrPv0QA== dependencies: "@state-designer/core" latest -"@stitches/react@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@stitches/react/-/react-0.2.1.tgz#c63a0a337b849b302da2342cb5d7aeb6ea257913" - integrity sha512-LPCOUXsadQM4JrtHQEsOJ+msyss0KySO9jL8L2SUVi9Vi6BfbyEi1mVGaqgvIQRZQfWsM0Se/3AXcl9rUQi5Nw== +"@stitches/react@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@stitches/react/-/react-0.2.2.tgz#8a2f8256835510c265ab20820f54a5bb0376bac6" + integrity sha512-/qRSX+ANPJg/0eLNr5bEywjkdvIfLbsaG2d8p83wPlI0MA7Yi9FzaRLk2H6DMAdJHuyu6ThY4HfHQIL35buY9g== "@surma/rollup-plugin-off-main-thread@^1.4.1": version "1.4.2" @@ -2431,12 +1932,39 @@ ejs "^2.6.1" magic-string "^0.25.0" +"@testing-library/dom@^7.28.1": + version "7.31.2" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" + integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^4.2.2" + chalk "^4.1.0" + dom-accessibility-api "^0.5.6" + lz-string "^1.4.4" + pretty-format "^26.6.2" + +"@testing-library/react@^11.2.5": + version "11.2.7" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818" + integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^7.28.1" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": +"@types/aria-query@^4.2.0": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" + integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== @@ -2469,16 +1997,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/estree@*": - version "0.0.48" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== - "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -2511,14 +2029,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" @@ -2526,15 +2036,15 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^25.2.1": - version "25.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" - integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== +"@types/jest@^26.0.23": + version "26.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" + integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" + jest-diff "^26.0.0" + pretty-format "^26.0.0" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== @@ -2549,33 +2059,21 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== -"@types/next@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/next/-/next-9.0.0.tgz#29aca06f8a5cfffc974a83b87e52ca57b2a506c4" - integrity sha512-gnBXM8rP1mnCgT1uE2z8SnpFTKRWReJlhbZLZkOLq/CH1ifvTNwjIVtXvsywTy1dwVklf+y/MB0Eh6FOa94yrg== - dependencies: - next "*" - "@types/node@*": - version "15.12.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" - integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== + version "15.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.4.tgz#e1cf817d70a1e118e81922c4ff6683ce9d422e26" + integrity sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/node@^14.14.25": + version "14.17.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.3.tgz#6d327abaa4be34a74e421ed6409a0ae2f47f4c3d" + integrity sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw== "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - "@types/prettier@^2.1.5": version "2.3.0" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb" @@ -2586,17 +2084,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react-dom@^17.0.3": - version "17.0.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.6.tgz#c158325cf91b196270bc0f4af73463f149e7eafe" - integrity sha512-MGTI+TudxAnGTj8aco8mogaPSJGK2Whje7OZh1CxNLRyhJpTZg/pGQpIbCT0eCVFQyH7UFpdvCqQEThHIp/gsA== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^17.0.5": - version "17.0.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.9.tgz#1147fb520024a62c9b3841f5cb4db89b73ddb87f" - integrity sha512-2Cw7FvevpJxQrCb+k5t6GH1KIvmadj5uBbjPaLlJB/nZWUj56e1ZqcD6zsoMFB47MsJUTFl9RJ132A7hb3QFJA== +"@types/react@^17.0.1": + version "17.0.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.11.tgz#67fcd0ddbf5a0b083a0f94e926c7d63f3b836451" + integrity sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2619,11 +2110,6 @@ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== - "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" @@ -2691,62 +2177,80 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.2.tgz#808c9fa7e4517274ed555fa158f2de4b4f468e71" integrity sha512-HrCIVMLjE1MOozVoD86622S7aunluLb2PJdPfb3nYiEtohm8mIB/vyv0Fd37AdeMFrTUQXEunw78YloMA3Qilg== -"@typescript-eslint/eslint-plugin@^2.12.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== +"@typescript-eslint/eslint-plugin@^4.14.2": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f" + integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ== dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/experimental-utils" "4.28.0" + "@typescript-eslint/scope-manager" "4.28.0" + debug "^4.3.1" functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== +"@typescript-eslint/experimental-utils@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0" + integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ== dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" -"@typescript-eslint/parser@^2.12.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== +"@typescript-eslint/parser@^4.14.2", "@typescript-eslint/parser@^4.20.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa" + integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" + debug "^4.3.1" -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== +"@typescript-eslint/scope-manager@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" + integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg== dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + +"@typescript-eslint/types@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" + integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== + +"@typescript-eslint/typescript-estree@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" + integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + debug "^4.3.1" + globby "^11.0.3" is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" + semver "^7.3.5" + tsutils "^3.21.0" -abab@^2.0.0, abab@^2.0.3, abab@^2.0.5: +"@typescript-eslint/visitor-keys@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" + integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw== + dependencies: + "@typescript-eslint/types" "4.28.0" + eslint-visitor-keys "^2.0.0" + +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -2755,27 +2259,17 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0: +acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -2792,12 +2286,20 @@ agent-base@6: dependencies: debug "4" +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2807,6 +2309,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.6.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + anser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" @@ -2817,12 +2329,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2839,11 +2346,6 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -2854,7 +2356,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2878,14 +2380,6 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -2939,26 +2433,6 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" @@ -2987,11 +2461,6 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - array.prototype.flat@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" @@ -3021,18 +2490,6 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - assert@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" @@ -3051,11 +2508,6 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -3066,46 +2518,26 @@ ast-types@0.13.2: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -asyncro@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" - integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - available-typed-arrays@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9" integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - axe-core@^4.0.2: version "4.2.2" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.2.tgz#0c987d82c8b82b4b9b7a945f1b5ef0d8fed586ed" @@ -3116,32 +2548,6 @@ axobject-query@^2.2.0: resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== -babel-eslint@^10.0.3: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - babel-jest@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.2.tgz#7dc18adb01322acce62c2af76ea2c7cd186ade37" @@ -3166,16 +2572,6 @@ babel-loader@^8.2.2: make-dir "^3.1.0" schema-utils "^2.6.5" -babel-plugin-annotate-pure-calls@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-annotate-pure-calls/-/babel-plugin-annotate-pure-calls-0.4.0.tgz#78aa00fd878c4fcde4d49f3da397fcf5defbcce8" - integrity sha512-oi4M/PWUJOU9ZyRGoPTfPMqdyMp06jbJAomd3RcyYuzUtBOddv98BqLm96Lucpi2QFoQHkdGQt0ACvw7VzVEQA== - -babel-plugin-dev-expression@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.2.tgz#c18de18a06150f9480edd151acbb01d2e65e999b" - integrity sha512-y32lfBif+c2FIh5dwGfcc/IfX5aw/Bru7Du7W2n17sJE/GJGAsmIk5DPW/8JOoeKpXW5evJfJOvRq5xkiS6vng== - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -3194,15 +2590,6 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11" @@ -3213,16 +2600,7 @@ babel-plugin-jest-hoist@^27.0.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.6.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-polyfill-corejs2@^0.2.0: +babel-plugin-polyfill-corejs2@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== @@ -3231,22 +2609,15 @@ babel-plugin-polyfill-corejs2@^0.2.0: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" - integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" + integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.9.1" + core-js-compat "^3.14.0" -babel-plugin-polyfill-regenerator@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.0.4.tgz#588641af9a2cb4e299b1400c47672a4a104d2459" - integrity sha512-+/uCzO9JTYVZVGCpZpVAQkgPGt2zkR0VYiZvJ4aVoCe4ccgpKvNQqcjzAgQzSsjK64Jhc5hvrCR3l0087BevkA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.0.3" - -babel-plugin-polyfill-regenerator@^0.2.0: +babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== @@ -3258,28 +2629,6 @@ babel-plugin-syntax-jsx@6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-plugin-transform-rename-import@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-rename-import/-/babel-plugin-transform-rename-import-2.3.0.tgz#5d9d645f937b0ca5c26a24b2510a06277b6ffd9b" - integrity sha512-dPgJoT57XC0PqSnLgl2FwNvxFrWlspatX2dkk7yjKQj5HHGw071vAcOf+hqW8ClqcBDMvEbm6mevn5yHAD8mlQ== - -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -3298,14 +2647,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== - dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" - babel-preset-jest@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20" @@ -3324,26 +2665,6 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3372,22 +2693,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -3410,13 +2715,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -3478,17 +2776,6 @@ browserify-zlib@0.2.0, browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.16.1: - version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" - integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== - dependencies: - caniuse-lite "^1.0.30001173" - colorette "^1.2.1" - electron-to-chromium "^1.3.634" - escalade "^3.1.1" - node-releases "^1.1.69" - browserslist@4.16.6, browserslist@^4.16.6: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" @@ -3500,13 +2787,6 @@ browserslist@4.16.6, browserslist@^4.16.6: escalade "^3.1.1" node-releases "^1.1.71" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3519,7 +2799,7 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= -buffer-from@1.x, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -3569,21 +2849,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3597,34 +2862,22 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228: - version "1.0.30001235" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz#ad5ca75bc5a1f7b12df79ad806d715a43a5ac4ed" - integrity sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A== +caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228: + version "1.0.30001239" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz#66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8" + integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3652,14 +2905,6 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" @@ -3673,11 +2918,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - chokidar@3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -3716,21 +2956,16 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz#2fd46d9906a126965aa541345c499aaa18e8cd73" integrity sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - classnames@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + clean-webpack-plugin@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" @@ -3739,13 +2974,6 @@ clean-webpack-plugin@^3.0.0: "@types/webpack" "^4.4.31" del "^4.1.1" -cli-cursor@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -3765,29 +2993,13 @@ cli-highlight@^2.1.10: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" -cli-spinners@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== - -cli-spinners@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: + slice-ansi "^3.0.0" string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" cliui@^7.0.2: version "7.0.4" @@ -3798,11 +3010,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3818,14 +3025,6 @@ collect-v8-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3850,12 +3049,12 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1, colorette@^1.2.2: +colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3867,6 +3066,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -3877,21 +3081,16 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -confusing-browser-globals@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" - integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -3907,51 +3106,53 @@ constants-browserify@1.0.0, constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -convert-source-map@1.7.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" - integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== +core-js-compat@^3.14.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.0.tgz#e14a371123db9d1c5b41206d3f420643d238b8fa" + integrity sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw== dependencies: browserslist "^4.16.6" semver "7.0.0" -core-js-pure@^3.0.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.14.0.tgz#72bcfacba74a65ffce04bf94ae91d966e80ee553" - integrity sha512-YVh+LN2FgNU0odThzm61BsdkwrbrchumFq3oztnE9vTKC4KS2fvnPmcx8t6jnqAyOTCTF4ZSiuK8Qhh7SNcL4g== +core-js-pure@^3.14.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.0.tgz#c19349ae0be197b8bcf304acf4d91c5e29ae2091" + integrity sha512-RO+LFAso8DB6OeBX9BAcEGvyth36QtxYon1OyVsITNVtSKr/Hos0BXZwnsOJ7o+O6KHtK+O+cJIEj9NGg6VwFA== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" create-ecdh@^4.0.0: version "4.0.4" @@ -3984,18 +3185,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4045,7 +3235,7 @@ cssnano-simple@2.0.0: dependencies: cssnano-preset-simple "^2.0.0" -cssom@^0.4.1, cssom@^0.4.4: +cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== @@ -4055,7 +3245,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0, cssstyle@^2.3.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -4072,27 +3262,11 @@ damerau-levenshtein@^1.0.6: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - data-uri-to-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -4102,14 +3276,14 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -4123,27 +3297,17 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - decimal.js@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -4153,13 +3317,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -4167,28 +3324,6 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -4235,10 +3370,10 @@ detect-node-es@^1.1.0: resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== diff-sequences@^27.0.1: version "27.0.1" @@ -4275,6 +3410,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz#3f5d43b52c7a3bd68b5fb63fa47b4e4c1fdf65a9" + integrity sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw== + domain-browser@4.19.0: version "4.19.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" @@ -4285,13 +3425,6 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -4304,14 +3437,6 @@ dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -4324,10 +3449,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.634, electron-to-chromium@^1.3.723: - version "1.3.749" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a" - integrity sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A== +electron-to-chromium@^1.3.723: + version "1.3.752" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" + integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== elliptic@^6.5.3: version "6.5.4" @@ -4347,11 +3472,6 @@ emittery@^0.8.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4386,7 +3506,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.4: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4451,17 +3571,10 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.11.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" @@ -4475,19 +3588,24 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@^6.0.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== +eslint-config-next@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-11.0.0.tgz#0638a839dd46bbf5391076b13c48b6c0cc92ec2f" + integrity sha512-pmatg4zqb5Vygu2HrSPxbsCBudXO9OZQUMKQCyrPKRvfL8PJ3lOIOzzwsiW68eMPXOZwOc1yxTRZWKNY8OJT0w== dependencies: - get-stdin "^6.0.0" + "@next/eslint-plugin-next" "11.0.0" + "@rushstack/eslint-patch" "^1.0.6" + "@typescript-eslint/parser" "^4.20.0" + eslint-import-resolver-node "^0.3.4" + eslint-plugin-import "^2.22.1" + eslint-plugin-jsx-a11y "^6.4.1" + eslint-plugin-react "^7.23.1" + eslint-plugin-react-hooks "^4.2.0" -eslint-config-react-app@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" - integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ== - dependencies: - confusing-browser-globals "^1.0.9" +eslint-config-prettier@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== eslint-import-resolver-node@^0.3.4: version "0.3.4" @@ -4505,14 +3623,7 @@ eslint-module-utils@^2.6.1: debug "^3.2.7" pkg-dir "^2.0.0" -eslint-plugin-flowtype@^3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c" - integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw== - dependencies: - lodash "^4.17.15" - -eslint-plugin-import@^2.18.2: +eslint-plugin-import@^2.22.1: version "2.23.4" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97" integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== @@ -4533,7 +3644,7 @@ eslint-plugin-import@^2.18.2: resolve "^1.20.0" tsconfig-paths "^3.9.0" -eslint-plugin-jsx-a11y@^6.2.3: +eslint-plugin-jsx-a11y@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== @@ -4550,19 +3661,12 @@ eslint-plugin-jsx-a11y@^6.2.3: jsx-ast-utils "^3.1.0" language-tags "^1.0.5" -eslint-plugin-prettier@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react-hooks@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" - integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== - -eslint-plugin-react@^7.14.3: +eslint-plugin-react@^7.19.0, eslint-plugin-react@^7.23.1: version "7.24.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4" integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q== @@ -4580,7 +3684,7 @@ eslint-plugin-react@^7.14.3: resolve "^2.0.0-next.3" string.prototype.matchall "^4.0.5" -eslint-scope@^5.0.0: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4588,83 +3692,90 @@ eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: +eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^6.1.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.19.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" + integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== dependencies: - "@babel/code-frame" "^7.0.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.2" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" + glob-parent "^5.1.2" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash.merge "^4.6.2" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -4678,7 +3789,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -4688,11 +3799,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -4721,41 +3827,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^4.0.3: +execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -4790,31 +3862,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - expect@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz#e66ca3a4c9592f1c019fa1d46459a9d2084f3422" @@ -4827,69 +3874,11 @@ expect@^27.0.2: jest-message-util "^27.0.2" jest-regex-util "^27.0.1" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - fast-glob@^3.1.1: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" @@ -4902,12 +3891,12 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -4931,29 +3920,12 @@ figlet@^1.1.1: resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" @@ -4986,35 +3958,39 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + locate-path "^6.0.0" + path-exists "^4.0.0" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== + dependencies: + semver-regex "^3.1.2" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -5024,23 +4000,7 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -framer-motion@^4.1.16: +framer-motion@^4.1.17: version "4.1.17" resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.1.17.tgz#4029469252a62ea599902e5a92b537120cc89721" integrity sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw== @@ -5060,16 +4020,7 @@ framesync@5.3.0: dependencies: tslib "^2.1.0" -fs-extra@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0, fs-extra@^9.0.1: +fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5084,7 +4035,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.1: +fsevents@^2.3.2, fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -5123,7 +4074,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5159,18 +4110,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -5183,19 +4122,7 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5207,7 +4134,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -5224,22 +4151,17 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: - type-fest "^0.8.1" - -globalyzer@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" - integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + type-fest "^0.20.2" globby@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -5259,38 +4181,20 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globrex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" - integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - gtag@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gtag/-/gtag-1.0.1.tgz#2248c1415adb79e00de94347c40023a5e16582c0" integrity sha1-IkjBQVrbeeAN6UNHxAAjpeFlgsA= -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== has-ansi@^2.0.0: version "2.0.0" @@ -5324,37 +4228,6 @@ has-unicode@^2.0.0: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -5415,13 +4288,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -5454,15 +4320,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-browserify@1.0.0, https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -5486,12 +4343,23 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -humanize-duration@^3.15.3: - version "3.26.0" - resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.26.0.tgz#4d77f6b3d2fe0ca1ff14623ccc2b2f8b48ab1aaf" - integrity sha512-SddekX3p5ApvPY6bbAYppGKe874jP6iFZXYtrQToDV4R0j2UpTYPqwTFM2QpXpuw9DhS/eXTUnKYTF9TbXAJ6A== +husky@^4.2.3: + version "4.3.8" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.3.8.tgz#31144060be963fd6850e5cc8f019a1dfe194296d" + integrity sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^7.0.0" + find-versions "^4.0.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^5.0.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5510,6 +4378,13 @@ idb-keyval@^5.0.6: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.0.6.tgz#62fe4a6703fb5ec86661f41330c94fda65e6d0e6" integrity sha512-6lJuVbwyo82mKSH6Wq2eHkt9LcbwHAelMIcMe0tP4p20Pod7tTxq9zf0ge2n/YDfMOpDryerfmmYyuQiaFaKOg== +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -5525,6 +4400,13 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-size@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.0.tgz#58b31fe4743b1cec0a0ac26f5c914d3c5b2f0750" + integrity sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw== + dependencies: + queue "6.0.2" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -5535,7 +4417,7 @@ immer@^8.0.2: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a" integrity sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ== -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5556,6 +4438,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5579,25 +4466,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -5607,11 +4475,6 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5619,25 +4482,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arguments@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" @@ -5669,23 +4513,11 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.2" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-ci@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" @@ -5700,60 +4532,11 @@ is-core-module@^2.2.0, is-core-module@^2.4.0: dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - is-date-object@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -5793,11 +4576,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -5821,13 +4599,6 @@ is-number-object@^1.0.4: resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5857,25 +4628,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - is-regex@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" @@ -5889,11 +4646,6 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" @@ -5922,24 +4674,17 @@ is-typed-array@^1.1.3: foreach "^2.0.5" has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5954,23 +4699,6 @@ ismobilejs@^1.1.1: resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" @@ -6012,15 +4740,6 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - jest-changed-files@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz#997253042b4a032950fc5f56abf3c5d1f8560801" @@ -6055,26 +4774,6 @@ jest-circus@^27.0.4: stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== - dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" - jest-cli@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.4.tgz#491b12c754c0d7c6873b13a66f26b3a80a852910" @@ -6093,31 +4792,6 @@ jest-cli@^27.0.4: prompts "^2.0.1" yargs "^16.0.3" -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - jest-config@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.4.tgz#c4f41378acf40ca77860fb4e213b12109d87b8cf" @@ -6145,15 +4819,15 @@ jest-config@^27.0.4: micromatch "^4.0.4" pretty-format "^27.0.2" -jest-diff@^25.2.1, jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== +jest-diff@^26.0.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" jest-diff@^27.0.2: version "27.0.2" @@ -6165,13 +4839,6 @@ jest-diff@^27.0.2: jest-get-type "^27.0.1" pretty-format "^27.0.2" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== - dependencies: - detect-newline "^3.0.0" - jest-docblock@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz#bd9752819b49fa4fab1a50b73eb58c653b962e8b" @@ -6179,17 +4846,6 @@ jest-docblock@^27.0.1: dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - jest-each@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz#865ddb4367476ced752167926b656fa0dcecd8c7" @@ -6201,18 +4857,6 @@ jest-each@^27.0.2: jest-util "^27.0.2" pretty-format "^27.0.2" -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - jest-environment-jsdom@^27.0.3: version "27.0.3" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz#ed73e913ddc03864eb9f934b5cbabf1b63504e2e" @@ -6226,18 +4870,6 @@ jest-environment-jsdom@^27.0.3: jest-util "^27.0.2" jsdom "^16.6.0" -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - jest-environment-node@^27.0.3: version "27.0.3" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.3.tgz#b4acb3679d2552a4215732cab8b0ca7ec4398ee0" @@ -6250,36 +4882,16 @@ jest-environment-node@^27.0.3: jest-mock "^27.0.3" jest-util "^27.0.2" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== jest-get-type@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815" integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg== -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== - dependencies: - "@jest/types" "^25.5.0" - "@types/graceful-fs" "^4.1.2" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.2.tgz#3f1819400c671237e48b4d4b76a80a0dbed7577f" @@ -6300,29 +4912,6 @@ jest-haste-map@^27.0.2: optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - jest-jasmine2@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz#c669519ccf4904a485338555e1e66cad36bb0670" @@ -6347,14 +4936,6 @@ jest-jasmine2@^27.0.4: pretty-format "^27.0.2" throat "^6.0.1" -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-leak-detector@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz#ce19aa9dbcf7a72a9d58907a970427506f624e69" @@ -6363,16 +4944,6 @@ jest-leak-detector@^27.0.2: jest-get-type "^27.0.1" pretty-format "^27.0.2" -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== - dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-matcher-utils@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0" @@ -6383,20 +4954,6 @@ jest-matcher-utils@^27.0.2: jest-get-type "^27.0.1" pretty-format "^27.0.2" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" - jest-message-util@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c" @@ -6412,13 +4969,6 @@ jest-message-util@^27.0.2: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== - dependencies: - "@jest/types" "^25.5.0" - jest-mock@^27.0.3: version "27.0.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz#5591844f9192b3335c0dca38e8e45ed297d4d23d" @@ -6427,30 +4977,16 @@ jest-mock@^27.0.3: "@jest/types" "^27.0.2" "@types/node" "*" -jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.1, jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - -jest-regex-util@^27.0.1: +jest-regex-util@^27.0.0, jest-regex-util@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68" integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ== -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - jest-resolve-dependencies@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz#a07a242d70d668afd3fcf7f4270755eebb1fe579" @@ -6460,21 +4996,6 @@ jest-resolve-dependencies@^27.0.4: jest-regex-util "^27.0.1" jest-snapshot "^27.0.4" -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" - jest-resolve@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.4.tgz#8a27bc3f2f00c8ea28f3bc99bbf6f468300a703d" @@ -6490,31 +5011,6 @@ jest-resolve@^27.0.4: resolve "^1.20.0" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - jest-runner@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.4.tgz#2787170a9509b792ae129794f6944d27d5d12a4f" @@ -6543,38 +5039,6 @@ jest-runner@^27.0.4: source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - jest-runtime@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.4.tgz#2e4a6aa77cac32ac612dfe12768387a8aa15c2f0" @@ -6607,13 +5071,6 @@ jest-runtime@^27.0.4: strip-bom "^4.0.0" yargs "^16.0.3" -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" - jest-serializer@^27.0.1: version "27.0.1" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020" @@ -6622,27 +5079,6 @@ jest-serializer@^27.0.1: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" - jest-snapshot@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.4.tgz#2b96e22ca90382b3e93bd0aae2ce4c78bf51fb5b" @@ -6673,17 +5109,6 @@ jest-snapshot@^27.0.4: pretty-format "^27.0.2" semver "^7.3.2" -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" - jest-util@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7" @@ -6696,18 +5121,6 @@ jest-util@^27.0.2: is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" - jest-validate@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz#7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5" @@ -6720,32 +5133,20 @@ jest-validate@^27.0.2: leven "^3.1.0" pretty-format "^27.0.2" -jest-watch-typeahead@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.5.0.tgz#903dba6112f22daae7e90b0a271853f7ff182008" - integrity sha512-4r36w9vU8+rdg48hj0Z7TvcSqVP6Ao8dk04grlHQNgduyCB0SqrI0xWIl85ZhXrzYvxQ0N5H+rRLAejkQzEHeQ== +jest-watch-typeahead@^0.6.1: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.4.tgz#ea70bf1bec34bd4f55b5b72d471b02d997899c3e" + integrity sha512-tGxriteVJqonyrDj/xZHa0E2glKMiglMLQqISLCjxLUfeueRBh9VoRF2FKQyYO2xOqrWDTg7781zUejx411ZXA== dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-regex-util "^25.2.1" - jest-watcher "^25.2.4" + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^27.0.0" + jest-watcher "^27.0.0" slash "^3.0.0" - string-length "^3.1.0" + string-length "^4.0.1" strip-ansi "^6.0.0" -jest-watcher@^25.2.4, jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== - dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" - -jest-watcher@^27.0.2: +jest-watcher@^27.0.0, jest-watcher@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb" integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA== @@ -6767,22 +5168,6 @@ jest-worker@27.0.0-next.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -6801,15 +5186,6 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^25.3.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== - dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" - jest@^27.0.4: version "27.0.4" resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.4.tgz#91d4d564b36bcf93b98dac1ab19f07089e670f53" @@ -6826,11 +5202,6 @@ jose@^1.27.2: dependencies: "@panva/asn1.js" "^1.0.0" -jpjs@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jpjs/-/jpjs-1.2.1.tgz#f343833de8838a5beba1f42d5a219be0114c44b7" - integrity sha512-GxJWybWU4NV0RNKi6EIqk6IRPOTqd/h+U7sbtyuD7yUISUzV78LdHnq2xkevJsTlz/EImux4sWj+wfMiwKLkiw== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6851,43 +5222,6 @@ js-yaml@^4.0.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - jsdom@^16.6.0: version "16.6.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" @@ -6946,28 +5280,16 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -6975,12 +5297,12 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" jsonfile@^6.0.1: version "6.1.0" @@ -7007,16 +5329,6 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" @@ -7042,30 +5354,6 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -7088,7 +5376,15 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -7108,6 +5404,40 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +lint-staged@^10.0.10: + version "10.5.4" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" + integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== + dependencies: + chalk "^4.1.0" + cli-truncate "^2.1.0" + commander "^6.2.0" + cosmiconfig "^7.0.0" + debug "^4.2.0" + dedent "^0.7.0" + enquirer "^2.3.6" + execa "^4.1.0" + listr2 "^3.2.2" + log-symbols "^4.0.0" + micromatch "^4.0.2" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "^3.3.0" + +listr2@^3.2.2: + version "3.10.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.10.0.tgz#58105a53ed7fa1430d1b738c6055ef7bb006160f" + integrity sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw== + dependencies: + cli-truncate "^2.1.0" + colorette "^1.2.2" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.7" + through "^2.3.8" + wrap-ansi "^7.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -7158,11 +5488,23 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -7198,11 +5540,6 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -7218,33 +5555,33 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.13, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.4.2" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" - integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" @@ -7253,13 +5590,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -7272,7 +5602,12 @@ lru_map@^0.3.3: resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= -magic-string@^0.25.0, magic-string@^0.25.2, magic-string@^0.25.7: +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" + integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= + +magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== @@ -7286,11 +5621,6 @@ make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: dependencies: semver "^6.0.0" -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -7298,18 +5628,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7329,7 +5647,7 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@4.x, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== @@ -7337,25 +5655,6 @@ micromatch@4.x, micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -7369,18 +5668,13 @@ mime-db@1.48.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.31" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: mime-db "1.48.0" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7403,20 +5697,12 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7428,15 +5714,10 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -monaco-editor@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.24.0.tgz#990b55096bcc95d08d8d28e55264c6eb17707269" - integrity sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A== - -mri@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== +monaco-editor@^0.25.2: + version "0.25.2" + resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.25.2.tgz#119e2b15bbd968a1a99c03cac9c329316d7c37e9" + integrity sha512-5iylzSJevCnzJn9UVsW8yOZ3yHjmAs4TfvH3zsbftKiFKmHG0xirGN6DK9Kk04VSWxYCZZAIafYJoNJJMAU1KA== ms@2.0.0: version "2.0.0" @@ -7453,11 +5734,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - mz@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -7472,23 +5748,6 @@ nanoid@^3.1.22: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - native-url@0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" @@ -7531,18 +5790,17 @@ next-pwa@^5.2.21: workbox-webpack-plugin "^6.1.5" workbox-window "^6.1.5" -next@*: - version "10.2.3" - resolved "https://registry.yarnpkg.com/next/-/next-10.2.3.tgz#5aa058a63626338cea91c198fda8f2715c058394" - integrity sha512-dkM1mIfnORtGyzw/Yme8RdqNxlCMZyi4Lqj56F01/yHbe1ZtOaJ0cyqqRB4RGiPhjGGh0319f8ddjDyO1605Ow== +next@latest: + version "11.0.0" + resolved "https://registry.yarnpkg.com/next/-/next-11.0.0.tgz#866b833f192f5a94ddb3267d5cc0f4b0ce405ac7" + integrity sha512-1OA0ccCTwVtdLats/1v7ReiBVx+Akya0UVhHo9IBr8ZkpDI3/SGNcaruJBp5agy8ROF97VDKkZamoUXxRB9NUA== dependencies: "@babel/runtime" "7.12.5" "@hapi/accept" "5.0.2" - "@next/env" "10.2.3" - "@next/polyfill-module" "10.2.3" - "@next/react-dev-overlay" "10.2.3" - "@next/react-refresh-utils" "10.2.3" - "@opentelemetry/api" "0.14.0" + "@next/env" "11.0.0" + "@next/polyfill-module" "11.0.0" + "@next/react-dev-overlay" "11.0.0" + "@next/react-refresh-utils" "11.0.0" assert "2.0.0" ast-types "0.13.2" browserify-zlib "0.2.0" @@ -7560,6 +5818,7 @@ next@*: find-cache-dir "3.3.1" get-orientation "1.1.2" https-browserify "1.0.0" + image-size "1.0.0" jest-worker "27.0.0-next.5" native-url "0.3.4" node-fetch "2.6.1" @@ -7574,7 +5833,7 @@ next@*: prop-types "15.7.2" querystring-es3 "0.2.1" raw-body "2.4.1" - react-is "16.13.1" + react-is "17.0.2" react-refresh "0.8.3" stream-browserify "3.0.0" stream-http "3.1.1" @@ -7587,75 +5846,6 @@ next@*: vm-browserify "1.1.2" watchpack "2.1.1" -next@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/next/-/next-10.2.0.tgz#6654cc925d8abcb15474fa062fc6b3ee527dd6dc" - integrity sha512-PKDKCSF7s82xudu3kQhOEaokxggpbLEWouEUtzP6OqV0YqKYHF+Ff+BFLycEem8ixtTM2M6ElN0VRJcskJfxPQ== - dependencies: - "@babel/runtime" "7.12.5" - "@hapi/accept" "5.0.1" - "@next/env" "10.2.0" - "@next/polyfill-module" "10.2.0" - "@next/react-dev-overlay" "10.2.0" - "@next/react-refresh-utils" "10.2.0" - "@opentelemetry/api" "0.14.0" - assert "2.0.0" - ast-types "0.13.2" - browserify-zlib "0.2.0" - browserslist "4.16.1" - buffer "5.6.0" - caniuse-lite "^1.0.30001179" - chalk "2.4.2" - chokidar "3.5.1" - constants-browserify "1.0.0" - crypto-browserify "3.12.0" - cssnano-simple "2.0.0" - domain-browser "4.19.0" - encoding "0.1.13" - etag "1.8.1" - find-cache-dir "3.3.1" - get-orientation "1.1.2" - https-browserify "1.0.0" - jest-worker "27.0.0-next.5" - native-url "0.3.4" - node-fetch "2.6.1" - node-html-parser "1.4.9" - node-libs-browser "^2.2.1" - os-browserify "0.3.0" - p-limit "3.1.0" - path-browserify "1.0.1" - pnp-webpack-plugin "1.6.4" - postcss "8.2.13" - process "0.11.10" - prop-types "15.7.2" - querystring-es3 "0.2.1" - raw-body "2.4.1" - react-is "16.13.1" - react-refresh "0.8.3" - stream-browserify "3.0.0" - stream-http "3.1.1" - string_decoder "1.3.0" - styled-jsx "3.3.2" - timers-browserify "2.0.12" - tty-browserify "0.0.1" - use-subscription "1.5.1" - util "0.12.3" - vm-browserify "1.1.2" - watchpack "2.1.1" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-fetch@2.6.1, node-fetch@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -7707,28 +5897,17 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-releases@^1.1.69, node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== nodemailer@^6.4.16: version "6.6.2" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.6.2.tgz#e184c9ed5bee245a3e0bcabc7255866385757114" integrity sha512-YSzu7TLbI+bsjCis/TZlAXBoM4y93HhlIgo0P5oiA2ua9Z4k+E2Fod//ybIzdJxOlXGRcHIh/WaeCBehvxZb/Q== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -7738,25 +5917,11 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -7784,11 +5949,6 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - oauth@^0.9.15: version "0.9.15" resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" @@ -7799,15 +5959,6 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - object-inspect@^1.10.3, object-inspect@^1.9.0: version "1.10.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" @@ -7826,13 +5977,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" @@ -7862,13 +6006,6 @@ object.fromentries@^2.0.4: es-abstract "^1.18.0-next.2" has "^1.0.3" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - object.values@^1.1.3, object.values@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" @@ -7885,13 +6022,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -7899,7 +6029,12 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1, optionator@^0.8.3: +opencollective-postinstall@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -7911,46 +6046,29 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ora@^4.0.3: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" - integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" os-browserify@0.3.0, os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-limit@3.1.0, p-limit@^3.1.0: +p-limit@3.1.0, p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -7985,11 +6103,25 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -8053,11 +6185,6 @@ parse5-htmlparser2-tree-adapter@^6.0.0: dependencies: parse5 "^6.0.1" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -8068,19 +6195,6 @@ parse5@^5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -pascal-case@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - path-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" @@ -8111,11 +6225,6 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -8154,11 +6263,6 @@ perfect-freehand@^0.4.9: resolved "https://registry.yarnpkg.com/perfect-freehand/-/perfect-freehand-0.4.9.tgz#09e9f5a1057da7eda335367d5f1f2c6fbd369e3e" integrity sha512-mNf9Yd2dxWV3kZs2PPNWjLOt8Yh31+PIu6/zst7I8YJOicYBnRofzXl9us5gxqK4ZfHKO5O7PjttHF0tuHfo0g== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -8217,6 +6321,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" @@ -8229,10 +6340,12 @@ platform@1.3.6: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" pnp-webpack-plugin@1.6.4: version "1.6.4" @@ -8251,11 +6364,6 @@ popmotion@9.3.6: style-value-types "4.1.4" tslib "^2.1.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - postcss@8.2.13: version "8.2.13" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" @@ -8277,24 +6385,17 @@ preact@^10.4.1: resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.13.tgz#85f6c9197ecd736ce8e3bec044d08fd1330fa019" integrity sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -prettier@^2.3.0: +prettier@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== @@ -8304,15 +6405,15 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" ansi-regex "^5.0.0" ansi-styles "^4.0.0" - react-is "^16.12.0" + react-is "^17.0.1" pretty-format@^27.0.2: version "27.0.2" @@ -8339,16 +6440,6 @@ process@0.11.10, process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress-estimator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/progress-estimator/-/progress-estimator-0.2.2.tgz#1c3947a5782ea56e40c8fccc290ac7ceeb1b91cb" - integrity sha512-GF76Ac02MTJD6o2nMNtmtOFjwWCnHcvXyn5HOWPQnEMO8OTLw7LAvNmrwe8LmdsB+eZhwUu9fX/c9iQnBxWaFA== - dependencies: - chalk "^2.4.1" - cli-spinners "^1.3.1" - humanize-duration "^3.15.3" - log-update "^2.3.0" - progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -8376,7 +6467,7 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -8416,11 +6507,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - querystring-es3@0.2.1, querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8441,6 +6527,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8466,7 +6559,7 @@ raw-body@2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -react-dom@17.0.2: +react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -8482,16 +6575,16 @@ react-feather@^2.0.9: dependencies: prop-types "^15.7.2" -react-is@16.13.1, react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: +react-is@17.0.2, react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-refresh@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" @@ -8530,7 +6623,7 @@ react-use-gesture@^9.1.3: resolved "https://registry.yarnpkg.com/react-use-gesture/-/react-use-gesture-9.1.3.tgz#92bd143e4f58e69bd424514a5bfccba2a1d62ec0" integrity sha512-CdqA2SmS/fj3kkS2W8ZU8wjTbVBAIwDWaRprX7OKaj7HlGwBasGEFggmk5qNklknqk9zK/h8D355bEJFTpqEMg== -react@17.0.2: +react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -8546,15 +6639,6 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -8564,16 +6648,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -8603,18 +6677,6 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - reflect-metadata@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -8632,7 +6694,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -8644,14 +6706,6 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" @@ -8660,15 +6714,10 @@ regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^4.7.1: version "4.7.1" @@ -8694,72 +6743,15 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require_optional@^1.0.1: version "1.0.1" @@ -8791,24 +6783,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -8824,14 +6799,6 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -8840,23 +6807,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8864,7 +6819,7 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8879,25 +6834,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-sourcemaps@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" - integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== - dependencies: - "@rollup/pluginutils" "^3.0.9" - source-map-resolve "^0.6.0" - -rollup-plugin-terser@^5.1.2: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz#8c650062c22a8426c64268548957463bf981b413" - integrity sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^4.0.0" - terser "^4.6.2" - rollup-plugin-terser@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -8908,49 +6844,12 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup-plugin-typescript2@^0.27.3: - version "0.27.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz#cd9455ac026d325b20c5728d2cc54a08a771b68b" - integrity sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - find-cache-dir "^3.3.1" - fs-extra "8.1.0" - resolve "1.17.0" - tslib "2.0.1" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.32.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - rollup@^2.43.1: - version "2.51.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.2.tgz#6de71e28c833089a0bd745a09671a3e2b92af6b7" - integrity sha512-ReV2eGEadA7hmXSzjxdDKs10neqH2QURf2RxJ6ayAlq93ugy6qIvXMmbc5cWMGCDh1h5T4thuWO1e2VNbMq8FA== + version "2.52.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.2.tgz#a7e90d10ddae3e8472c2857bd9f44b09ef34a47a" + integrity sha512-4RlFC3k2BIHlUsJ9mGd8OO+9Lm2eDF5P7+6DNQOp5sx+7N/1tFM01kELfbxlMX3MxT6owvLB1ln4S3QvvQlbUA== optionalDependencies: - fsevents "~2.3.1" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" @@ -8959,20 +6858,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0: +rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -sade@^1.4.2: - version "1.7.4" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.7.4.tgz#ea681e0c65d248d2095c90578c03ca0bb1b54691" - integrity sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA== - dependencies: - mri "^1.1.0" - 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: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -8983,45 +6875,16 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -9055,22 +6918,32 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver-regex@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" + integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== + +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@6.x, semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^7.1.1, semver@^7.3.2: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -9091,21 +6964,11 @@ serialize-javascript@^5.0.1: dependencies: randombytes "^2.1.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -9124,13 +6987,6 @@ sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -9138,11 +6994,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -9153,20 +7004,6 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -9191,70 +7028,30 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - -source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@^0.5.6, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -9279,7 +7076,7 @@ source-map@0.8.0-beta.0, source-map@^0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -9320,40 +7117,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -9373,24 +7141,11 @@ state-local@^1.0.6, state-local@^1.0.7: resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - "statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-browserify@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" @@ -9435,19 +7190,16 @@ stream-parser@^0.3.1: dependencies: debug "2" +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + string-hash@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -9465,7 +7217,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.1: +"string-width@^1.0.2 || 2": version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -9473,15 +7225,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" @@ -9565,13 +7308,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9587,17 +7323,12 @@ strip-comments@^2.0.1: resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -9646,13 +7377,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -9675,20 +7399,22 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -symbol-tree@^3.2.2, symbol-tree@^3.2.4: +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" temp-dir@^2.0.0: version "2.0.0" @@ -9725,15 +7451,6 @@ terser-webpack-plugin@^5.1.1: source-map "^0.6.1" terser "^5.7.0" -terser@^4.6.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - terser@^5.0.0, terser@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" @@ -9771,17 +7488,12 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - throat@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through@^2.3.6: +through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9793,21 +7505,6 @@ timers-browserify@2.0.12, timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-glob@^0.2.6: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" - integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - dependencies: - globalyzer "0.1.0" - globrex "^0.1.2" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -9823,21 +7520,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -9845,38 +7527,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -9900,22 +7555,6 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -ts-jest@^25.3.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" - ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -9931,84 +7570,17 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tsdx@^0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/tsdx/-/tsdx-0.14.1.tgz#8771d509b6fc523ad971bae3a63ebe3a88355ab3" - integrity sha512-keHmFdCL2kx5nYFlBdbE3639HQ2v9iGedAFAajobrUTH2wfX0nLPdDhbHv+GHLQZqf0c5ur1XteE8ek/+Eyj5w== - dependencies: - "@babel/core" "^7.4.4" - "@babel/helper-module-imports" "^7.0.0" - "@babel/parser" "^7.11.5" - "@babel/plugin-proposal-class-properties" "^7.4.4" - "@babel/preset-env" "^7.11.0" - "@babel/traverse" "^7.11.5" - "@rollup/plugin-babel" "^5.1.0" - "@rollup/plugin-commonjs" "^11.0.0" - "@rollup/plugin-json" "^4.0.0" - "@rollup/plugin-node-resolve" "^9.0.0" - "@rollup/plugin-replace" "^2.2.1" - "@types/jest" "^25.2.1" - "@typescript-eslint/eslint-plugin" "^2.12.0" - "@typescript-eslint/parser" "^2.12.0" - ansi-escapes "^4.2.1" - asyncro "^3.0.0" - babel-eslint "^10.0.3" - babel-plugin-annotate-pure-calls "^0.4.0" - babel-plugin-dev-expression "^0.2.1" - babel-plugin-macros "^2.6.1" - babel-plugin-polyfill-regenerator "^0.0.4" - babel-plugin-transform-rename-import "^2.3.0" - camelcase "^6.0.0" - chalk "^4.0.0" - enquirer "^2.3.4" - eslint "^6.1.0" - eslint-config-prettier "^6.0.0" - eslint-config-react-app "^5.2.1" - eslint-plugin-flowtype "^3.13.0" - eslint-plugin-import "^2.18.2" - eslint-plugin-jsx-a11y "^6.2.3" - eslint-plugin-prettier "^3.1.0" - eslint-plugin-react "^7.14.3" - eslint-plugin-react-hooks "^2.2.0" - execa "^4.0.3" - fs-extra "^9.0.0" - jest "^25.3.0" - jest-watch-typeahead "^0.5.0" - jpjs "^1.2.1" - lodash.merge "^4.6.2" - ora "^4.0.3" - pascal-case "^3.1.1" - prettier "^1.19.1" - progress-estimator "^0.2.2" - regenerator-runtime "^0.13.7" - rollup "^1.32.1" - rollup-plugin-sourcemaps "^0.6.2" - rollup-plugin-terser "^5.1.2" - rollup-plugin-typescript2 "^0.27.3" - sade "^1.4.2" - semver "^7.1.1" - shelljs "^0.8.3" - tiny-glob "^0.2.6" - ts-jest "^25.3.1" - tslib "^1.9.3" - typescript "^3.7.3" - -tslib@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== -tsutils@^3.17.1: +tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -10025,17 +7597,12 @@ tty-browserify@0.0.1: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" @@ -10054,26 +7621,21 @@ type-fest@^0.16.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10104,15 +7666,10 @@ typeorm@^0.2.30: yargs "^16.2.0" zen-observable-ts "^1.0.0" -typescript@^3.7.3: - version "3.9.9" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== - -typescript@^4.2.4: - version "4.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" - integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== +typescript@^4.1.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" + integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== unbox-primitive@^1.0.1: version "1.0.1" @@ -10147,16 +7704,6 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -10164,7 +7711,7 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -10179,14 +7726,6 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -10199,11 +7738,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -10232,11 +7766,6 @@ use-subscription@1.5.1: dependencies: object-assign "^4.1.1" -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -10280,11 +7809,6 @@ util@^0.12.0: safe-buffer "^5.1.2" which-typed-array "^1.1.2" -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -10295,15 +7819,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - v8-to-istanbul@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" @@ -10321,36 +7836,18 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: +w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - w3c-xmlserializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" @@ -10358,7 +7855,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= @@ -10373,13 +7870,6 @@ watchpack@2.1.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10403,14 +7893,14 @@ webpack-sources@^1.4.3: source-list-map "^2.0.0" source-map "~0.6.1" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== @@ -10444,10 +7934,10 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= which-typed-array@^1.1.2: version "1.1.4" @@ -10462,14 +7952,7 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -10483,7 +7966,7 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -10655,14 +8138,6 @@ workbox-window@^6.1.5: dependencies: workbox-core "^6.1.5" -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" - integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -10696,18 +8171,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^7.0.0: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@^7.4.5: version "7.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691" @@ -10731,7 +8194,7 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlchars@^2.1.1, xmlchars@^2.2.0: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== @@ -10741,11 +8204,6 @@ xtend@^4.0.0, xtend@^4.0.2: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -10756,7 +8214,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -10770,35 +8228,10 @@ yargonaut@^1.1.4: figlet "^1.1.1" parent-require "^1.0.0" -yargs-parser@18.x, yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^16.0.0, yargs@^16.0.3, yargs@^16.2.0: version "16.2.0"