From d647b03e088cb60e646ec5986841f869c3f49dd0 Mon Sep 17 00:00:00 2001 From: MayaGillilanContentful <101652314+MayaGillilanContentful@users.noreply.github.com> Date: Wed, 22 Jun 2022 13:53:32 +0200 Subject: [PATCH] chore: require descriptions when ignoring eslint, upgrade exhaustive-deps rule to error (#1167) * feat: require descriptions when ignoring eslint, upgrade exhaustive-deps rule to error * fix: fix linting errors, update eslint and dependency versions * fix: removed old rte.jsx, updated caniuselite --- .eslintignore | 1 + apps/entry-app-collapsible/package.json | 5 +- apps/markdown-app/package.json | 5 +- apps/multiple-references-app/package.json | 5 +- apps/rich-text-app/package.json | 5 +- apps/singleline-app/package.json | 5 +- package.json | 8 +- packages/.eslintrc.js | 18 +- packages/_shared/src/FieldConnector.ts | 4 +- packages/_shared/src/ModalDialogLauncher.tsx | 2 +- packages/_test/src/createFakeFieldAPI.ts | 2 +- packages/_test/src/fakesFactory.ts | 2 +- packages/date/src/DateEditor.tsx | 1 + packages/date/src/DatepickerInput.tsx | 2 +- packages/date/src/TimepickerInput.tsx | 4 +- packages/date/src/types.ts | 2 +- packages/date/src/utils/data.spec.ts | 2 +- packages/date/src/utils/date.ts | 2 +- packages/location/src/LocationEditor.tsx | 2 +- packages/location/src/LocationSearchInput.tsx | 1 + packages/markdown/src/MarkdownActions.ts | 4 +- packages/markdown/src/MarkdownEditor.tsx | 4 + .../src/components/MarkdownPreview.tsx | 4 +- .../MarkdownTextarea/CodeMirrorWrapper.ts | 4 +- .../MarkdownTextarea/MarkdownCommands.ts | 2 +- .../MarkdownTextarea/MarkdownTextarea.tsx | 2 + .../src/dialogs/ZenModeModalDialog.tsx | 6 +- .../src/dialogs/renderMarkdownDialog.tsx | 2 +- .../markdown/src/utils/insertAssetLinks.ts | 2 +- packages/markdown/src/utils/linkOrganizer.ts | 4 +- packages/markdown/src/utils/userAgent.ts | 2 +- .../FetchingWrappedAssetCard.tsx | 3 + .../WrappedAssetCard/WrappedAssetCard.tsx | 2 +- packages/reference/src/common/EntityStore.ts | 1 + .../src/common/MultipleReferenceEditor.tsx | 1 + .../src/common/SingleReferenceEditor.tsx | 1 + .../src/common/useContentTypePermissions.ts | 1 + .../src/common/useEditorPermissions.spec.ts | 2 +- .../src/common/useEditorPermissions.ts | 2 + .../CreateEntryMenuTrigger.spec.tsx | 2 +- .../LinkActions/LinkEntityActions.tsx | 8 +- .../ScheduledIconWithTooltip.tsx | 2 +- .../formatDateAndTime.ts | 2 +- .../FetchingWrappedEntryCard.tsx | 3 + .../src/utils/fromFieldValidations.ts | 2 +- packages/rich-text/src/SdkProvider.tsx | 2 +- .../HypelinkDialog/HyperlinkDialog.jsx | 4 +- packages/rich-text/src/helpers/editor.ts | 2 +- .../src/helpers/formatDateAndTime.ts | 2 +- .../CommandPanel/InViewport/InViewport.js | 136 ++++ .../FetchingWrappedAssetCard.js | 69 ++ .../FetchingWrappedEntryCard.js | 73 +++ .../FetchingWrappedInlineEntryCard.tsx | 2 +- .../FetchingWrappedInlineEntryCard.js | 121 ++++ .../plugins/Heading/components/Heading.tsx | 2 +- .../components/ToolbarHeadingButton.tsx | 2 +- .../src/plugins/Hyperlink/Hyperlink.js | 101 +++ .../List/__tests__/insertListBreak.test.tsx | 2 +- .../__tests__/insertListFragment.test.tsx | 2 +- .../List/transforms/moveListItems.test.tsx | 2 +- .../plugins/PasteHTML/utils/sanitizeSheets.ts | 2 +- .../Text/__tests__/createTextPlugin.test.tsx | 4 +- .../FetchingWrappedAssetCard.test.tsx | 4 +- .../FetchingWrappedEntryCard.test.tsx | 4 +- .../src/plugins/shared/useFetchedEntity.ts | 2 +- .../rich-text/src/test-utils/hyperscript.d.ts | 4 +- packages/rich-text/src/types.ts | 2 +- packages/single-line/src/SingleLineEditor.tsx | 1 - .../tags/src/TagsEditorContainer.spec.tsx | 2 +- .../src/ValidationErrors.tsx | 1 + yarn.lock | 617 +++++++++++++++++- 71 files changed, 1236 insertions(+), 75 deletions(-) create mode 100644 packages/rich-text/src/plugins/CommandPalette/CommandPanel/InViewport/InViewport.js create mode 100644 packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedAssetCard.js create mode 100644 packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedEntryCard.js create mode 100644 packages/rich-text/src/plugins/EmbeddedEntryInline/FetchingWrappedInlineEntryCard.js create mode 100644 packages/rich-text/src/plugins/Hyperlink/Hyperlink.js diff --git a/.eslintignore b/.eslintignore index fc76b15c9..5ed608ceb 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,3 +6,4 @@ dist/ build/ cypress/plugins/ cypress/support/ +.eslintrc.js diff --git a/apps/entry-app-collapsible/package.json b/apps/entry-app-collapsible/package.json index 78a796dfc..f0b555679 100644 --- a/apps/entry-app-collapsible/package.json +++ b/apps/entry-app-collapsible/package.json @@ -39,7 +39,10 @@ "@types/react-dom": "^17.0.7", "cross-env": "^7.0.3", "react-scripts": "4.0.3", - "typescript": "^4.3.3" + "typescript": "^4.3.3", + "babel-eslint": "^10.1.0", + "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.29.0" }, "browserslist": { "production": [ diff --git a/apps/markdown-app/package.json b/apps/markdown-app/package.json index 1869c56c8..19247b6f4 100644 --- a/apps/markdown-app/package.json +++ b/apps/markdown-app/package.json @@ -33,7 +33,10 @@ "@types/react-dom": "^17.0.8", "cross-env": "^7.0.3", "react-scripts": "4.0.3", - "typescript": "^4.3.4" + "typescript": "^4.3.4", + "babel-eslint": "^10.1.0", + "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.29.0" }, "browserslist": { "production": [ diff --git a/apps/multiple-references-app/package.json b/apps/multiple-references-app/package.json index 68ecfaa7e..5b9ff491c 100644 --- a/apps/multiple-references-app/package.json +++ b/apps/multiple-references-app/package.json @@ -32,7 +32,10 @@ "@types/react-dom": "^17.0.8", "cross-env": "^7.0.3", "react-scripts": "4.0.3", - "typescript": "^4.3.4" + "typescript": "^4.3.4", + "babel-eslint": "^10.1.0", + "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.29.0" }, "browserslist": { "production": [ diff --git a/apps/rich-text-app/package.json b/apps/rich-text-app/package.json index 3d6aa87d8..9a28c0999 100644 --- a/apps/rich-text-app/package.json +++ b/apps/rich-text-app/package.json @@ -46,7 +46,10 @@ "@types/react-dom": "^17.0.8", "cross-env": "^7.0.3", "react-scripts": "4.0.3", - "typescript": "^4.3.4" + "typescript": "^4.3.4", + "babel-eslint": "^10.1.0", + "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.29.0" }, "homepage": "." } diff --git a/apps/singleline-app/package.json b/apps/singleline-app/package.json index 8620cf365..dd0b0b59b 100644 --- a/apps/singleline-app/package.json +++ b/apps/singleline-app/package.json @@ -45,7 +45,10 @@ "@types/react-dom": "^17.0.8", "cross-env": "^7.0.3", "react-scripts": "4.0.3", - "typescript": "^4.3.4" + "typescript": "^4.3.4", + "babel-eslint": "^10.1.0", + "@typescript-eslint/parser": "^5.29.0", + "@typescript-eslint/eslint-plugin": "^5.29.0" }, "homepage": "." } diff --git a/package.json b/package.json index d33110af2..493b1af40 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ ], "devDependencies": { "@babel/core": "^7.9.6", + "@babel/eslint-parser": "7.18.2", "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-proposal-optional-chaining": "^7.9.0", @@ -73,9 +74,11 @@ "docz": "1.3.2", "docz-theme-default": "1.2.0", "emotion": "10.0.27", - "eslint": "6.8.0", + "eslint": "^7.32.0", "eslint-config-react-app": "^6.0.0", "eslint-plugin-cypress": "^2.12.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-import-helpers": "^1.2.0", "eslint-plugin-jest": "^24.1.0", "eslint-plugin-jsx-a11y": "^6.2.3", @@ -175,5 +178,6 @@ "outputs": [] } } - } + }, + "dependencies": {} } diff --git a/packages/.eslintrc.js b/packages/.eslintrc.js index effd600ef..53dd70d2f 100644 --- a/packages/.eslintrc.js +++ b/packages/.eslintrc.js @@ -6,8 +6,24 @@ module.exports = { require.resolve('@contentful/eslint-config-extension/jsx-a11y'), require.resolve('@contentful/eslint-config-extension/react'), ], + plugins: ['eslint-comments'], rules: { - 'react-hooks/exhaustive-deps': 'warn', + 'react-hooks/exhaustive-deps': 'error', + // Require descriptions only for disable-line and disable-next-line + 'eslint-comments/require-description': [ + 'error', + { + ignore: [ + 'eslint', + 'eslint-disable', + 'eslint-enable', + 'eslint-env', + 'exported', + 'global', + 'globals', + ], + }, + ], 'react/default-props-match-prop-types': 'warn', 'react/no-unused-prop-types': 'off', 'you-dont-need-lodash-underscore/flatten': 'warn', diff --git a/packages/_shared/src/FieldConnector.ts b/packages/_shared/src/FieldConnector.ts index 1ffbb34f1..2665e50a2 100644 --- a/packages/_shared/src/FieldConnector.ts +++ b/packages/_shared/src/FieldConnector.ts @@ -41,11 +41,11 @@ export class FieldConnector extends React.Component< children: () => { return null; }, - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable isEmptyValue: (value: any | Nullable) => { return value === null || value === ''; }, - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable isEqualValues: (value1: any | Nullable, value2: any | Nullable) => { return isEqual(value1, value2); }, diff --git a/packages/_shared/src/ModalDialogLauncher.tsx b/packages/_shared/src/ModalDialogLauncher.tsx index c442a75f4..a5254cdc9 100644 --- a/packages/_shared/src/ModalDialogLauncher.tsx +++ b/packages/_shared/src/ModalDialogLauncher.tsx @@ -31,7 +31,7 @@ export function open(componentRenderer: (params: { onClose: Function; isShown: b isShown: false, }; render(currentConfig); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/ban-ts-comment // @ts-ignore resolve(...args); getRoot().remove(); diff --git a/packages/_test/src/createFakeFieldAPI.ts b/packages/_test/src/createFakeFieldAPI.ts index d00c221b3..57ef5a39e 100644 --- a/packages/_test/src/createFakeFieldAPI.ts +++ b/packages/_test/src/createFakeFieldAPI.ts @@ -14,7 +14,7 @@ export function createFakeFieldAPI( ): [FieldAPI, Emitter] { const emitter: Emitter = mitt(); - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable let _value: any = initialValue; return [ diff --git a/packages/_test/src/fakesFactory.ts b/packages/_test/src/fakesFactory.ts index 8394447f3..11676c82e 100644 --- a/packages/_test/src/fakesFactory.ts +++ b/packages/_test/src/fakesFactory.ts @@ -2,7 +2,7 @@ import { Entry } from '@contentful/field-editor-shared'; interface Fields { [key: string]: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any [localeKey: string]: any; }; } diff --git a/packages/date/src/DateEditor.tsx b/packages/date/src/DateEditor.tsx index 89db8c9a6..b2161b232 100644 --- a/packages/date/src/DateEditor.tsx +++ b/packages/date/src/DateEditor.tsx @@ -55,6 +55,7 @@ function useEffectWithoutFirstRender(callback: Function, deps: Array) { return; } callback(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, deps); } diff --git a/packages/date/src/DatepickerInput.tsx b/packages/date/src/DatepickerInput.tsx index a6bc22ff8..58dbb6a73 100644 --- a/packages/date/src/DatepickerInput.tsx +++ b/packages/date/src/DatepickerInput.tsx @@ -1,6 +1,6 @@ import React, { Component, FocusEventHandler, FocusEvent } from 'react'; import noop from 'lodash/noop'; -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; import { css, cx } from 'emotion'; import { formatDateDisplay } from './utils/date'; diff --git a/packages/date/src/TimepickerInput.tsx b/packages/date/src/TimepickerInput.tsx index ef77e87cc..88acf0788 100644 --- a/packages/date/src/TimepickerInput.tsx +++ b/packages/date/src/TimepickerInput.tsx @@ -1,5 +1,5 @@ import React, { useState, useCallback, useEffect } from 'react'; -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; import { css } from 'emotion'; @@ -31,7 +31,7 @@ const validInputFormats = [ function parseRawInput(raw: string): moment.Moment | null { let time: moment.Moment | null = null; - // eslint-disable-next-line @typescript-eslint/prefer-for-of + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of for (let i = 0; i < validInputFormats.length; i++) { const date = moment(raw, validInputFormats[i]); if (date.isValid()) { diff --git a/packages/date/src/types.ts b/packages/date/src/types.ts index 03d483a62..616e301ee 100644 --- a/packages/date/src/types.ts +++ b/packages/date/src/types.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; export type DateTimeFormat = 'dateonly' | 'time' | 'timeZ'; diff --git a/packages/date/src/utils/data.spec.ts b/packages/date/src/utils/data.spec.ts index 1727ca741..f6c165b69 100644 --- a/packages/date/src/utils/data.spec.ts +++ b/packages/date/src/utils/data.spec.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; import { buildFieldValue } from './date'; diff --git a/packages/date/src/utils/date.ts b/packages/date/src/utils/date.ts index 8d2768c40..35d736239 100644 --- a/packages/date/src/utils/date.ts +++ b/packages/date/src/utils/date.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; import { TimeResult } from '../types'; diff --git a/packages/location/src/LocationEditor.tsx b/packages/location/src/LocationEditor.tsx index 4a1519b7c..523c15648 100644 --- a/packages/location/src/LocationEditor.tsx +++ b/packages/location/src/LocationEditor.tsx @@ -55,7 +55,7 @@ export class LocationEditor extends React.Component< LocationEditorProps, { localValue?: Coords; - mapsObject: any; // eslint-disable-line @typescript-eslint/no-explicit-any + mapsObject: any; // eslint-disable-line -- TODO: describe this disable @typescript-eslint/no-explicit-any } > { constructor(props: LocationEditorProps) { diff --git a/packages/location/src/LocationSearchInput.tsx b/packages/location/src/LocationSearchInput.tsx index e38cf5970..e362c7cc8 100644 --- a/packages/location/src/LocationSearchInput.tsx +++ b/packages/location/src/LocationSearchInput.tsx @@ -56,6 +56,7 @@ export function LocationSearchInput(props: LocationSearchInputProps) { setAddress(address); setIsSearching(false); }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props.value, props.disabled]); return ( diff --git a/packages/markdown/src/MarkdownActions.ts b/packages/markdown/src/MarkdownActions.ts index 853ff0003..bc322ab00 100644 --- a/packages/markdown/src/MarkdownActions.ts +++ b/packages/markdown/src/MarkdownActions.ts @@ -16,7 +16,7 @@ export function createMarkdownActions(props: { }) { const { sdk, editor, locale } = props; - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/ban-types const insertAssetsWithConfirmation = async (assets: Array | null) => { if (assets) { const { links, fallbacks } = await insertAssetLinks(assets, { @@ -150,7 +150,7 @@ export function createMarkdownActions(props: { try { const { entity: asset } = (await sdk.navigator.openNewAsset({ slideIn: { waitForClose: true }, - })) as any; // eslint-disable-line @typescript-eslint/no-explicit-any + })) as any; // eslint-disable-line -- TODO: describe this disable @typescript-eslint/no-explicit-any const markdownLinks = await insertAssetsWithConfirmation([asset]); editor.insert(markdownLinks); diff --git a/packages/markdown/src/MarkdownEditor.tsx b/packages/markdown/src/MarkdownEditor.tsx index cc3f48dce..7982dbde0 100644 --- a/packages/markdown/src/MarkdownEditor.tsx +++ b/packages/markdown/src/MarkdownEditor.tsx @@ -58,12 +58,14 @@ export function MarkdownEditor( editor.refresh(); }, 1); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [editor]); React.useEffect(() => { props.sdk.access.can('create', 'Asset').then((value) => { setCanUploadAssets(value); }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, []); React.useEffect(() => { @@ -78,10 +80,12 @@ export function MarkdownEditor( const actions = React.useMemo(() => { return createMarkdownActions({ sdk: props.sdk, editor, locale: props.sdk.field.locale }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [editor]); const openMarkdownHelp = React.useCallback(() => { openCheatsheetModal(props.sdk.dialogs); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, []); return ( diff --git a/packages/markdown/src/components/MarkdownPreview.tsx b/packages/markdown/src/components/MarkdownPreview.tsx index c04f6c883..69050ef1c 100644 --- a/packages/markdown/src/components/MarkdownPreview.tsx +++ b/packages/markdown/src/components/MarkdownPreview.tsx @@ -171,7 +171,7 @@ function MarkdownLink(props: { href: string; title: string; className?: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any children: any; Embedly?: React.SFC<{ url: string }>; }) { @@ -208,7 +208,7 @@ export const MarkdownPreview = React.memo((props: MarkdownPreviewProps) => { options={{ overrides: { a: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any component: MarkdownLink as any, props: { Embedly: props.previewComponents?.embedly, diff --git a/packages/markdown/src/components/MarkdownTextarea/CodeMirrorWrapper.ts b/packages/markdown/src/components/MarkdownTextarea/CodeMirrorWrapper.ts index d879ee9af..f4ec57d87 100644 --- a/packages/markdown/src/components/MarkdownTextarea/CodeMirrorWrapper.ts +++ b/packages/markdown/src/components/MarkdownTextarea/CodeMirrorWrapper.ts @@ -42,7 +42,7 @@ export function create( shift: 50, }; - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable // @ts-ignore const cm = CodeMirror(host, { direction, @@ -175,7 +175,7 @@ export function create( transform( map, (acc, value, key) => { - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable // @ts-ignore acc[ctrlKey + '-' + key] = value; }, diff --git a/packages/markdown/src/components/MarkdownTextarea/MarkdownCommands.ts b/packages/markdown/src/components/MarkdownTextarea/MarkdownCommands.ts index c1fd9b645..966c38d4c 100644 --- a/packages/markdown/src/components/MarkdownTextarea/MarkdownCommands.ts +++ b/packages/markdown/src/components/MarkdownTextarea/MarkdownCommands.ts @@ -4,7 +4,7 @@ import range from 'lodash/range'; import min from 'lodash/min'; import max from 'lodash/max'; import times from 'lodash/times'; -// eslint-disable-next-line you-dont-need-lodash-underscore/repeat +// eslint-disable-next-line -- TODO: describe this disable you-dont-need-lodash-underscore/repeat import repeat from 'lodash/repeat'; import * as CodeMirrorWrapper from './CodeMirrorWrapper'; diff --git a/packages/markdown/src/components/MarkdownTextarea/MarkdownTextarea.tsx b/packages/markdown/src/components/MarkdownTextarea/MarkdownTextarea.tsx index 69fbe003b..b590c588a 100644 --- a/packages/markdown/src/components/MarkdownTextarea/MarkdownTextarea.tsx +++ b/packages/markdown/src/components/MarkdownTextarea/MarkdownTextarea.tsx @@ -141,12 +141,14 @@ export const MarkdownTextarea = React.memo((props: MarkdownTextareaProps) => { ) ); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, []); useEffect(() => { if (editor) { props.onReady(editor); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [editor]); const className = cx( diff --git a/packages/markdown/src/dialogs/ZenModeModalDialog.tsx b/packages/markdown/src/dialogs/ZenModeModalDialog.tsx index 02257b42e..e2ad24d8d 100644 --- a/packages/markdown/src/dialogs/ZenModeModalDialog.tsx +++ b/packages/markdown/src/dialogs/ZenModeModalDialog.tsx @@ -111,8 +111,9 @@ export const ZenModeModalDialog = (props: ZenModeDialogProps) => { const [editor, setEditor] = React.useState(null); React.useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any props.sdk?.window?.updateHeight('100%' as any); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, []); // refresh editor right after dialog is opened to avoid disappearing effect @@ -125,6 +126,7 @@ export const ZenModeModalDialog = (props: ZenModeDialogProps) => { const actions = React.useMemo(() => { return createMarkdownActions({ sdk: props.sdk, editor, locale: props.locale }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [editor]); actions.closeZenMode = () => { @@ -212,7 +214,7 @@ export const openZenMode = ( options: { initialValue: string; locale: string } ): Promise => { return dialogs.openCurrent({ - width: 'zen' as any, // eslint-disable-line @typescript-eslint/no-explicit-any + width: 'zen' as any, // eslint-disable-line -- TODO: describe this disable @typescript-eslint/no-explicit-any shouldCloseOnEscapePress: false, minHeight: '100vh', shouldCloseOnOverlayClick: false, diff --git a/packages/markdown/src/dialogs/renderMarkdownDialog.tsx b/packages/markdown/src/dialogs/renderMarkdownDialog.tsx index fa80c3fda..afc265b81 100644 --- a/packages/markdown/src/dialogs/renderMarkdownDialog.tsx +++ b/packages/markdown/src/dialogs/renderMarkdownDialog.tsx @@ -37,7 +37,7 @@ export const renderMarkdownDialog = ( } else if (parameters.type === MarkdownDialogType.zenMode) { const locale = parameters.locale; const initialValue = parameters.initialValue; - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any sdk.window.updateHeight('100%' as any); return ( { getOrLoadAsset(props.assetId); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props.assetId]); const asset = assets[props.assetId]; @@ -44,6 +45,7 @@ export function FetchingWrappedAssetCard(props: FetchingWrappedAssetCardProps) { if (asset) { props.onAction && props.onAction({ type: 'rendered', entity: 'Asset' }); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [asset]); const onEdit = async () => { @@ -149,5 +151,6 @@ export function FetchingWrappedAssetCard(props: FetchingWrappedAssetCardProps) { } return renderDefaultCard(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props, entityKey]); } diff --git a/packages/reference/src/assets/WrappedAssetCard/WrappedAssetCard.tsx b/packages/reference/src/assets/WrappedAssetCard/WrappedAssetCard.tsx index 04fc4b2f5..2d86a188d 100644 --- a/packages/reference/src/assets/WrappedAssetCard/WrappedAssetCard.tsx +++ b/packages/reference/src/assets/WrappedAssetCard/WrappedAssetCard.tsx @@ -53,7 +53,7 @@ const defaultProps = { isClickable: true, }; -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any function getFileType(file?: File): any { if (!file) { return 'archive'; diff --git a/packages/reference/src/common/EntityStore.ts b/packages/reference/src/common/EntityStore.ts index abd6b0749..946c57bb9 100644 --- a/packages/reference/src/common/EntityStore.ts +++ b/packages/reference/src/common/EntityStore.ts @@ -199,6 +199,7 @@ function useEntitiesStore(props: { sdk: BaseExtensionSDK }) { }); } }) as { (): void }; + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props.sdk, state.assets, state.entries]); return { getOrLoadEntry, getOrLoadAsset, loadEntityScheduledActions, ...state }; diff --git a/packages/reference/src/common/MultipleReferenceEditor.tsx b/packages/reference/src/common/MultipleReferenceEditor.tsx index fc58ba6ca..97a29fe8f 100644 --- a/packages/reference/src/common/MultipleReferenceEditor.tsx +++ b/packages/reference/src/common/MultipleReferenceEditor.tsx @@ -98,6 +98,7 @@ function Editor(props: EditorProps) { props.renderCustomCard ? props.renderCustomCard(cardProps, linkActionsProps, renderDefaultCard) : false, + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies [linkActionsProps] ); diff --git a/packages/reference/src/common/SingleReferenceEditor.tsx b/packages/reference/src/common/SingleReferenceEditor.tsx index 93bd71bba..52ee6a58f 100644 --- a/packages/reference/src/common/SingleReferenceEditor.tsx +++ b/packages/reference/src/common/SingleReferenceEditor.tsx @@ -52,6 +52,7 @@ function Editor(props: EditorProps) { props.renderCustomCard ? props.renderCustomCard(cardProps, linkActionsProps, renderDefaultCard) : false, + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies [linkActionsProps] ); diff --git a/packages/reference/src/common/useContentTypePermissions.ts b/packages/reference/src/common/useContentTypePermissions.ts index 170593f3e..1388f22dd 100644 --- a/packages/reference/src/common/useContentTypePermissions.ts +++ b/packages/reference/src/common/useContentTypePermissions.ts @@ -63,6 +63,7 @@ export function useContentTypePermissions( } void checkContentTypeAccess(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [availableContentTypes]); return { diff --git a/packages/reference/src/common/useEditorPermissions.spec.ts b/packages/reference/src/common/useEditorPermissions.spec.ts index a375437d1..ea6247e9d 100644 --- a/packages/reference/src/common/useEditorPermissions.spec.ts +++ b/packages/reference/src/common/useEditorPermissions.spec.ts @@ -162,7 +162,7 @@ describe('useEditorPermissions', () => { expect(result.current.canLinkEntity).toBe(true); }); - // eslint-disable-next-line jest/no-test-prefixes + // eslint-disable-next-line -- TODO: describe this disable jest/no-test-prefixes it.skip(`denies creation when no content-type can be read`, async () => { const allContentTypes = [makeContentType('one'), makeContentType('two')]; diff --git a/packages/reference/src/common/useEditorPermissions.ts b/packages/reference/src/common/useEditorPermissions.ts index 56c069793..fc470cfef 100644 --- a/packages/reference/src/common/useEditorPermissions.ts +++ b/packages/reference/src/common/useEditorPermissions.ts @@ -43,6 +43,7 @@ export function useEditorPermissions(props: EditorPermissionsProps) { } void checkCreateAccess(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [entityType, parameters.instance, creatableContentTypes]); useEffect(() => { @@ -69,6 +70,7 @@ export function useEditorPermissions(props: EditorPermissionsProps) { } void checkLinkAccess(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [entityType, parameters.instance, readableContentTypes]); return { diff --git a/packages/reference/src/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.tsx b/packages/reference/src/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.tsx index 961129ddc..5ecb18f9f 100644 --- a/packages/reference/src/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.tsx +++ b/packages/reference/src/components/CreateEntryLinkButton/CreateEntryMenuTrigger.spec.tsx @@ -1,6 +1,6 @@ import React from 'react'; import noop from 'lodash/noop'; -// eslint-disable-next-line you-dont-need-lodash-underscore/fill +// eslint-disable-next-line -- TODO: describe this disable you-dont-need-lodash-underscore/fill import fill from 'lodash/fill'; import { act, render, fireEvent, configure } from '@testing-library/react'; import { ContentType } from '../../types'; diff --git a/packages/reference/src/components/LinkActions/LinkEntityActions.tsx b/packages/reference/src/components/LinkActions/LinkEntityActions.tsx index e8aacc73e..85a2e0085 100644 --- a/packages/reference/src/components/LinkActions/LinkEntityActions.tsx +++ b/packages/reference/src/components/LinkActions/LinkEntityActions.tsx @@ -55,6 +55,7 @@ export function useLinkActionsProps(props: LinkEntityActionsProps): LinkActionsP index, }); }, + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies [entityType, props.onCreate, props.onAction] ); const onLinkedExisting = React.useCallback( @@ -73,6 +74,7 @@ export function useLinkActionsProps(props: LinkEntityActionsProps): LinkActionsP }); }); }, + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies [entityType, props.onLink, props.onAction] ); @@ -114,8 +116,8 @@ export function useLinkActionsProps(props: LinkEntityActionsProps): LinkActionsP } onLinkedExisting(entities, index); }; - - // FIXME: The memoization might rerun every time due to the always changing callback identities above + + // FIXME: The memoization might rerun every time due to the always changing callback identities above return useMemo( () => ({ entityType, @@ -133,6 +135,7 @@ export function useLinkActionsProps(props: LinkEntityActionsProps): LinkActionsP onLinkedExisting, itemsLength, }), + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies [ entityType, canLinkMultiple, @@ -142,6 +145,7 @@ export function useLinkActionsProps(props: LinkEntityActionsProps): LinkActionsP editorPermissions.canCreateEntity, editorPermissions.canLinkEntity, actionLabels, + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies editorPermissions.creatableContentTypes.map((ct) => ct.sys.id).join(':'), onCreate, onLinkExisting, diff --git a/packages/reference/src/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.tsx b/packages/reference/src/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.tsx index b0666f5bb..a07716414 100644 --- a/packages/reference/src/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.tsx +++ b/packages/reference/src/components/ScheduledIconWithTooltip/ScheduledIconWithTooltip.tsx @@ -31,7 +31,7 @@ export const ScheduledIconWithTooltip = ({ }); // This should only be ever called once. Following the eslint hint to add used // dependencies will cause page freeze (infinite loop) - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: describe this disable }, []); if (status.type === 'loading' || status.type === 'error') { diff --git a/packages/reference/src/components/ScheduledIconWithTooltip/formatDateAndTime.ts b/packages/reference/src/components/ScheduledIconWithTooltip/formatDateAndTime.ts index 5655926b9..5767282bf 100644 --- a/packages/reference/src/components/ScheduledIconWithTooltip/formatDateAndTime.ts +++ b/packages/reference/src/components/ScheduledIconWithTooltip/formatDateAndTime.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports import moment from 'moment'; type DateFormatFn = (date: Date | string, short?: boolean) => string; diff --git a/packages/reference/src/entries/WrappedEntryCard/FetchingWrappedEntryCard.tsx b/packages/reference/src/entries/WrappedEntryCard/FetchingWrappedEntryCard.tsx index 9425b07ad..1ea3d1460 100644 --- a/packages/reference/src/entries/WrappedEntryCard/FetchingWrappedEntryCard.tsx +++ b/packages/reference/src/entries/WrappedEntryCard/FetchingWrappedEntryCard.tsx @@ -57,6 +57,7 @@ export function FetchingWrappedEntryCard(props: EntryCardReferenceEditorProps) { React.useEffect(() => { getOrLoadEntry(props.entryId); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props.entryId]); const size = props.viewType === 'link' ? 'small' : 'default'; @@ -98,6 +99,7 @@ export function FetchingWrappedEntryCard(props: EntryCardReferenceEditorProps) { if (entry) { props.onAction && props.onAction({ type: 'rendered', entity: 'Entry' }); } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [entry]); return React.useMemo(() => { @@ -173,5 +175,6 @@ export function FetchingWrappedEntryCard(props: EntryCardReferenceEditorProps) { } return renderDefaultCard(); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies }, [props, entityKey]); } diff --git a/packages/reference/src/utils/fromFieldValidations.ts b/packages/reference/src/utils/fromFieldValidations.ts index 5425a3a4d..c303830e0 100644 --- a/packages/reference/src/utils/fromFieldValidations.ts +++ b/packages/reference/src/utils/fromFieldValidations.ts @@ -13,7 +13,7 @@ export type ReferenceValidations = { }; export function fromFieldValidations(field: FieldAPI): ReferenceValidations { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-explicit-any const validations: Record[] = [ ...field.validations, ...(field.items?.validations ?? []), diff --git a/packages/rich-text/src/SdkProvider.tsx b/packages/rich-text/src/SdkProvider.tsx index 91d01f91e..6cc4f096d 100644 --- a/packages/rich-text/src/SdkProvider.tsx +++ b/packages/rich-text/src/SdkProvider.tsx @@ -8,7 +8,7 @@ interface SdkProviderProps { } function useSdk({ sdk }: SdkProviderProps) { - const sdkMemo = React.useMemo(() => sdk, []); // eslint-disable-line + const sdkMemo = React.useMemo(() => sdk, []); // eslint-disable-line -- TODO: explain this disable return sdkMemo; } diff --git a/packages/rich-text/src/dialogs/HypelinkDialog/HyperlinkDialog.jsx b/packages/rich-text/src/dialogs/HypelinkDialog/HyperlinkDialog.jsx index f1ff492e8..4ecfbedfd 100644 --- a/packages/rich-text/src/dialogs/HypelinkDialog/HyperlinkDialog.jsx +++ b/packages/rich-text/src/dialogs/HypelinkDialog/HyperlinkDialog.jsx @@ -184,7 +184,7 @@ export class HyperlinkDialog extends React.Component { name="link-text" value={text || ''} onChange={(e) => this.setState({ text: e.target.value })} - // eslint-disable-next-line jsx-a11y/no-autofocus + // eslint-disable-next-line -- TODO: describe this disable jsx-a11y/no-autofocus autoFocus={!isUriInputAutoFocused} /> @@ -218,7 +218,7 @@ export class HyperlinkDialog extends React.Component { value={uri || ''} placeholder="https://" onChange={(e) => this.setState({ uri: e.target.value })} - // eslint-disable-next-line jsx-a11y/no-autofocus + // eslint-disable-next-line -- TODO: describe this disable jsx-a11y/no-autofocus autoFocus={isUriInputAutoFocused} /> A protocol may be required, e.g. https:// diff --git a/packages/rich-text/src/helpers/editor.ts b/packages/rich-text/src/helpers/editor.ts index 81ec7a762..dfbebbd33 100644 --- a/packages/rich-text/src/helpers/editor.ts +++ b/packages/rich-text/src/helpers/editor.ts @@ -211,7 +211,7 @@ export function getNextNode(editor: RichTextEditor): CustomElement | null { return null; } const descendants = Node.descendants(editor, { from: editor.selection.focus.path }); - // eslint-disable-next-line no-constant-condition + // eslint-disable-next-line no-constant-condition -- TODO: explain this disable while (true) { const { done, value } = descendants.next(); if (done) { diff --git a/packages/rich-text/src/helpers/formatDateAndTime.ts b/packages/rich-text/src/helpers/formatDateAndTime.ts index 5655926b9..4c3f42239 100644 --- a/packages/rich-text/src/helpers/formatDateAndTime.ts +++ b/packages/rich-text/src/helpers/formatDateAndTime.ts @@ -1,4 +1,4 @@ -// eslint-disable-next-line no-restricted-imports +// eslint-disable-next-line no-restricted-imports -- TODO: explain this disable import moment from 'moment'; type DateFormatFn = (date: Date | string, short?: boolean) => string; diff --git a/packages/rich-text/src/plugins/CommandPalette/CommandPanel/InViewport/InViewport.js b/packages/rich-text/src/plugins/CommandPalette/CommandPanel/InViewport/InViewport.js new file mode 100644 index 000000000..af4870891 --- /dev/null +++ b/packages/rich-text/src/plugins/CommandPalette/CommandPanel/InViewport/InViewport.js @@ -0,0 +1,136 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { cx, css } from 'emotion'; + +const throttle = (delay = 200, fn) => { + let lastCall = 0; + const throttleExec = (...args) => { + const now = new Date().getTime(); + if (now - lastCall < delay) { + return; + } + lastCall = now; + return fn(...args); // eslint-disable-line -- TODO: describe this disable + }; + return throttleExec; +}; + +const defaultProps = { + testId: 'cf-ui-in-viewport', + offset: 0, +}; + +const isBrowser = typeof window !== 'undefined'; + +export class InViewport extends Component { + static defaultProps = defaultProps; + + tGetDomPosition = null; + nodeRef = null; + lastOverflowAt = null; + + tOnOverflowTop = this.props.onOverflowTop && throttle(100, this.props.onOverflowTop); + tOnOverflowBottom = this.props.onOverflowBottom && throttle(100, this.props.onOverflowBottom); + tOnOverflowRight = this.props.onOverflowRight && throttle(100, this.props.onOverflowRight); + tOnOverflowLeft = this.props.onOverflowLeft && throttle(100, this.props.onOverflowLeft); + + componentDidMount() { + this.getDomPosition(); + this.bindEventListeners(); + } + + componentDidUpdate() { + this.getDomPosition(); + } + + componentWillUnmount() { + if (isBrowser && this.tGetDomPosition) { + window.removeEventListener('scroll', this.tGetDomPosition, true); + window.removeEventListener('resize', this.tGetDomPosition); + } + } + + getDomPosition = () => { + if (isBrowser && this.nodeRef) { + const html = document.documentElement; + const boundingClientRect = this.nodeRef.getBoundingClientRect(); + const windowWidth = window.innerWidth || html.clientWidth; + const windowHeight = window.innerHeight || html.clientHeight; + this.handleOverflow(boundingClientRect, windowWidth, windowHeight); + } + }; + + bindEventListeners = () => { + this.tGetDomPosition = throttle(600, this.getDomPosition); + if (isBrowser && this.tGetDomPosition) { + window.addEventListener('scroll', this.tGetDomPosition, true); + window.addEventListener('resize', this.tGetDomPosition); + } + }; + + handleOverflow = ({ top, left, bottom, right }, windowWidth, windowHeight) => { + const { offset } = this.props; + const topThreshold = 0 - offset; + const leftThreshold = 0 - offset; + const rightThreshold = windowWidth + offset; + const bottomThreshold = windowHeight + offset; + + if (top + right + bottom + left !== 0) { + if (top < topThreshold && this.lastOverflowAt !== 'bottom') { + this.lastOverflowAt = 'top'; + this.tOnOverflowTop && this.tOnOverflowTop(); + } else if (left < leftThreshold && this.lastOverflowAt !== 'right') { + this.lastOverflowAt = 'left'; + this.tOnOverflowLeft && this.tOnOverflowLeft(); + } else if (bottom > bottomThreshold && this.lastOverflowAt !== 'top') { + this.lastOverflowAt = 'bottom'; + this.tOnOverflowBottom && this.tOnOverflowBottom(); + } else if (right > rightThreshold && this.lastOverflowAt !== 'left') { + this.lastOverflowAt = 'right'; + this.tOnOverflowRight && this.tOnOverflowRight(); + } + } + }; + + render() { + const { + className, + children, + testId, + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-unused-vars + onOverflowBottom, + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-unused-vars + onOverflowLeft, + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-unused-vars + onOverflowRight, + // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/no-unused-vars + onOverflowTop, + ...otherProps + } = this.props; + + const classNames = cx(css({ display: 'inline-block' }), className); + + return ( +
{ + this.nodeRef = ref; + }} + className={classNames} + data-test-id={testId} + {...otherProps}> + {children} +
+ ); + } +} + +InViewport.propTypes = { + offset: PropTypes.number, + onOverflowTop: PropTypes.func, + onOverflowRight: PropTypes.func, + onOverflowBottom: PropTypes.func, + onOverflowLeft: PropTypes.func, + className: PropTypes.string, + children: PropTypes.any, + testId: PropTypes.string, +}; diff --git a/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedAssetCard.js b/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedAssetCard.js new file mode 100644 index 000000000..2724c981e --- /dev/null +++ b/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedAssetCard.js @@ -0,0 +1,69 @@ +import * as React from 'react'; +import PropTypes from 'prop-types'; +import { AssetCard } from '@contentful/f36-components'; +import { + useEntities, + MissingEntityCard, + WrappedAssetCard, +} from '@contentful/field-editor-reference'; + +export function FetchingWrappedAssetCard(props) { + const { getOrLoadAsset, loadEntityScheduledActions, assets } = useEntities(); + + React.useEffect(() => { + getOrLoadAsset(props.assetId); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [props.assetId]); + + const asset = assets[props.assetId]; + + React.useEffect(() => { + if (asset) { + props.onEntityFetchComplete && props.onEntityFetchComplete(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [asset]); + + if (asset === 'failed') { + return ( + + ); + } + + if (asset === undefined) { + return ; + } + + return ( + + ); +} + +FetchingWrappedAssetCard.propTypes = { + sdk: PropTypes.object.isRequired, + locale: PropTypes.string.isRequired, + assetId: PropTypes.string.isRequired, + isDisabled: PropTypes.bool.isRequired, + isSelected: PropTypes.bool.isRequired, + onRemove: PropTypes.func, + onEdit: PropTypes.func, + getAssetUrl: PropTypes.func, + onEntityFetchComplete: PropTypes.func, +}; diff --git a/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedEntryCard.js b/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedEntryCard.js new file mode 100644 index 000000000..06aa7dd49 --- /dev/null +++ b/packages/rich-text/src/plugins/EmbeddedEntityBlock/FetchingWrappedEntryCard.js @@ -0,0 +1,73 @@ +import * as React from 'react'; +import PropTypes from 'prop-types'; +import { EntryCard } from '@contentful/f36-components'; +import { + useEntities, + MissingEntityCard, + WrappedEntryCard, +} from '@contentful/field-editor-reference'; + +export function FetchingWrappedEntryCard(props) { + const { getOrLoadEntry, loadEntityScheduledActions, entries } = useEntities(); + + React.useEffect(() => { + getOrLoadEntry(props.entryId); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [props.entryId]); + + const entry = entries[props.entryId]; + + React.useEffect(() => { + if (entry) { + props.onEntityFetchComplete && props.onEntityFetchComplete(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [entry]); + + if (entry === 'failed') { + return ( + + ); + } + + if (entry === undefined) { + return ; + } + + const contentType = props.sdk.space + .getCachedContentTypes() + .find((contentType) => contentType.sys.id === entry.sys.contentType.sys.id); + + return ( + + ); +} + +FetchingWrappedEntryCard.propTypes = { + sdk: PropTypes.object.isRequired, + entryId: PropTypes.string.isRequired, + locale: PropTypes.string.isRequired, + isDisabled: PropTypes.bool.isRequired, + isSelected: PropTypes.bool.isRequired, + onRemove: PropTypes.func, + onEdit: PropTypes.func, + getEntryUrl: PropTypes.func, + onEntityFetchComplete: PropTypes.func, +}; diff --git a/packages/rich-text/src/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.tsx b/packages/rich-text/src/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.tsx index 88fe4164f..743017319 100644 --- a/packages/rich-text/src/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.tsx +++ b/packages/rich-text/src/plugins/EmbeddedEntityInline/FetchingWrappedInlineEntryCard.tsx @@ -67,7 +67,7 @@ export function FetchingWrappedInlineEntryCard(props: FetchingWrappedInlineEntry getOrLoadEntry(props.entryId); // We don't include getOrLoadEntry below because it's part of the constate-derived // useEntities(), not props. - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable }, [props.entryId]); if (entry === 'failed') { diff --git a/packages/rich-text/src/plugins/EmbeddedEntryInline/FetchingWrappedInlineEntryCard.js b/packages/rich-text/src/plugins/EmbeddedEntryInline/FetchingWrappedInlineEntryCard.js new file mode 100644 index 000000000..1ce3f41db --- /dev/null +++ b/packages/rich-text/src/plugins/EmbeddedEntryInline/FetchingWrappedInlineEntryCard.js @@ -0,0 +1,121 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { css } from 'emotion'; +import tokens from '@contentful/f36-tokens'; +import { InlineEntryCard, MenuItem, Text } from '@contentful/f36-components'; +import { entityHelpers } from '@contentful/field-editor-shared'; +import { useEntities, ScheduledIconWithTooltip } from '@contentful/field-editor-reference'; + +import { INLINES } from '@contentful/rich-text-types'; + +import { ClockIcon } from '@contentful/f36-icons'; + +const { getEntryTitle, getEntryStatus } = entityHelpers; + +const styles = { + scheduledIcon: css({ + verticalAlign: 'text-bottom', + marginRight: tokens.spacing2Xs, + }), +}; + +export const FetchingWrappedInlineEntryCard = (props) => { + const { getOrLoadEntry, loadEntityScheduledActions, entries } = useEntities(); + + React.useEffect(() => { + getOrLoadEntry(props.entryId); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [props.entryId]); + + const entry = entries[props.entryId]; + + React.useEffect(() => { + if (entry) { + props.onEntityFetchComplete && props.onEntityFetchComplete(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies + }, [entry]); + + if (entry === 'failed') { + return ( + + Entry missing or inaccessible + + ); + } + + if (entry === undefined) { + return ; + } + + const allContentTypes = props.sdk.space.getCachedContentTypes(); + + const contentType = allContentTypes.find( + (contentType) => contentType.sys.id === entry.sys.contentType.sys.id + ); + const contentTypeName = contentType ? contentType.name : ''; + + const status = getEntryStatus(entry.sys); + + if (status === 'deleted') { + return ( + + Remove + , + ]}> + Entry missing or inaccessible + + ); + } + + const title = getEntryTitle({ + entry: entry, + contentType, + localeCode: props.sdk.field.locale, + defaultLocaleCode: props.sdk.locales.default, + defaultTitle: 'Untitled', + }); + + return ( + + Edit + , + + Remove + , + ] + : undefined + }> + + + + {title} + + ); +}; + +FetchingWrappedInlineEntryCard.propTypes = { + sdk: PropTypes.object.isRequired, + entryId: PropTypes.string.isRequired, + isDisabled: PropTypes.bool.isRequired, + isSelected: PropTypes.bool.isRequired, + isReadOnly: PropTypes.bool.isRequired, + onRemove: PropTypes.func.isRequired, + onEdit: PropTypes.func.isRequired, + onEntityFetchComplete: PropTypes.func, +}; diff --git a/packages/rich-text/src/plugins/Heading/components/Heading.tsx b/packages/rich-text/src/plugins/Heading/components/Heading.tsx index 8723889d4..b9dda33f6 100644 --- a/packages/rich-text/src/plugins/Heading/components/Heading.tsx +++ b/packages/rich-text/src/plugins/Heading/components/Heading.tsx @@ -59,7 +59,7 @@ const styles = { }, }; -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: explain this disable function createHeading(Tag: any, block: BLOCKS) { return function Heading(props: Slate.RenderElementProps) { return ( diff --git a/packages/rich-text/src/plugins/Heading/components/ToolbarHeadingButton.tsx b/packages/rich-text/src/plugins/Heading/components/ToolbarHeadingButton.tsx index d79ba42ad..150f680e9 100644 --- a/packages/rich-text/src/plugins/Heading/components/ToolbarHeadingButton.tsx +++ b/packages/rich-text/src/plugins/Heading/components/ToolbarHeadingButton.tsx @@ -73,7 +73,7 @@ export function ToolbarHeadingButton(props: ToolbarHeadingButtonProps) { const type = (element as CustomElement).type; setSelected(LABELS[type] ? type : BLOCKS.PARAGRAPH); - }, [editor?.operations, editor?.selection]); // eslint-disable-line + }, [editor?.operations, editor?.selection]); // eslint-disable-line -- TODO: explain this disable const [nodeTypesByEnablement, someHeadingsEnabled] = React.useMemo(() => { const nodeTypesByEnablement = Object.fromEntries( diff --git a/packages/rich-text/src/plugins/Hyperlink/Hyperlink.js b/packages/rich-text/src/plugins/Hyperlink/Hyperlink.js new file mode 100644 index 000000000..ad4667a81 --- /dev/null +++ b/packages/rich-text/src/plugins/Hyperlink/Hyperlink.js @@ -0,0 +1,101 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { cx } from 'emotion'; +import isHotKey from 'is-hotkey'; +import styles from './styles'; +import { SUPPORTS_NATIVE_SLATE_HYPERLINKS } from '../../helpers/browserSupport'; +import { useRequestStatus } from './useRequestStatus'; +import { getScheduleTooltipContent } from '@contentful/field-editor-reference'; +import { truncate } from './truncate'; + +import { TextLink, Tooltip } from '@contentful/f36-components'; + +function isUrl(string) { + return /^(?:[a-z]+:)?\/\//i.test(string) || /^mailto:/i.test(string); +} + +// eslint-disable-next-line -- TODO: describe this disable react/prop-types +function getEntityInfo({ entityTitle, entityStatus, contentTypeName }) { + const title = truncate(entityTitle, 60) || 'Untitled'; + + return `${contentTypeName || 'Asset'} "${title}", ${entityStatus}`; +} + +export default function Hyperlink(props) { + const { children, node } = props; + const title = node.data.get('title'); + const uri = node.data.get('uri'); + const href = isUrl(uri) ? uri : 'javascript:void(0)'; + const target = node.data.get('target'); + const requestStatus = useRequestStatus({ richTextAPI: props.richTextAPI, target }); + + const getTooltipContent = () => { + if (requestStatus.type === 'loading') { + return `Loading ${target.sys.linkType.toLowerCase()}...`; + } + let tooltipContent = ''; + if (requestStatus.type === 'error') { + tooltipContent = `${target.sys.linkType} missing or inaccessible`; + } else { + const { jobs, ...entityInfo } = requestStatus.data; + tooltipContent = `${getEntityInfo(entityInfo)} + ${jobs.length > 0 ? getScheduleTooltipContent({ job: jobs[0], jobsCount: jobs.length }) : ''}`; + } + return tooltipContent; + }; + + const onKeyDown = (e) => { + if (isHotKey('enter', e)) { + e.preventDefault(); + e.stopPropagation(); // Ensure Slate doesn't interpret as new paragraph. + props.onEdit(e); + } + }; + + const renderLink = ({ tooltipContent }) => { + return ( + + {SUPPORTS_NATIVE_SLATE_HYPERLINKS ? ( + + {children} + + ) : ( + {children} + )} + + ); + }; + + return ( + onKeyDown(e)} + role="button" + tabIndex={0}> + {target + ? renderLink({ tooltipContent: getTooltipContent() }) + : renderLink({ tooltipContent: uri })} + + // TODO: Add contentEditable={false} to tooltip to fix text cursor bug + ); +} + +Hyperlink.propTypes = { + attributes: PropTypes.object.isRequired, + node: PropTypes.object.isRequired, + children: PropTypes.node, + editor: PropTypes.object, + richTextAPI: PropTypes.object.isRequired, + onEdit: PropTypes.func, +}; diff --git a/packages/rich-text/src/plugins/List/__tests__/insertListBreak.test.tsx b/packages/rich-text/src/plugins/List/__tests__/insertListBreak.test.tsx index 6bf8a77ef..1e6fd7855 100644 --- a/packages/rich-text/src/plugins/List/__tests__/insertListBreak.test.tsx +++ b/packages/rich-text/src/plugins/List/__tests__/insertListBreak.test.tsx @@ -329,7 +329,7 @@ describe('insert line break', () => { ); for (const t of tests) { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line jest/valid-title -- TODO: explain this disable test(t.title, () => { const { editor } = createTestEditor({ input: render(t.input), diff --git a/packages/rich-text/src/plugins/List/__tests__/insertListFragment.test.tsx b/packages/rich-text/src/plugins/List/__tests__/insertListFragment.test.tsx index 1ef783586..74c9472f3 100644 --- a/packages/rich-text/src/plugins/List/__tests__/insertListFragment.test.tsx +++ b/packages/rich-text/src/plugins/List/__tests__/insertListFragment.test.tsx @@ -182,7 +182,7 @@ describe('insert fragment', () => { ); for (const t of tests) { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line jest/valid-title -- TODO: explain this disable test(t.title, () => { const { editor } = createTestEditor({ input: render(t.input), diff --git a/packages/rich-text/src/plugins/List/transforms/moveListItems.test.tsx b/packages/rich-text/src/plugins/List/transforms/moveListItems.test.tsx index 2b0a9ed42..901b279aa 100644 --- a/packages/rich-text/src/plugins/List/transforms/moveListItems.test.tsx +++ b/packages/rich-text/src/plugins/List/transforms/moveListItems.test.tsx @@ -19,7 +19,7 @@ describe('moving list items (up/down)', () => { ); const assertTab = (t: ListTest, shift = false) => { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line jest/valid-title -- TODO: explain this disable test(t.title, () => { const { editor } = createTestEditor({ input: renderEditor(t.input), diff --git a/packages/rich-text/src/plugins/PasteHTML/utils/sanitizeSheets.ts b/packages/rich-text/src/plugins/PasteHTML/utils/sanitizeSheets.ts index c5132c4d3..69dc31f46 100644 --- a/packages/rich-text/src/plugins/PasteHTML/utils/sanitizeSheets.ts +++ b/packages/rich-text/src/plugins/PasteHTML/utils/sanitizeSheets.ts @@ -33,7 +33,7 @@ export const sanitizeSheets = (doc: Document): Document => { // CSS :nth-of-type index starts from 1 let colIndex = 1; - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable while (true) { const cells = rows .map((row) => row.querySelector(`th:nth-of-type(${colIndex}), td:nth-of-type(${colIndex})`)) diff --git a/packages/rich-text/src/plugins/Text/__tests__/createTextPlugin.test.tsx b/packages/rich-text/src/plugins/Text/__tests__/createTextPlugin.test.tsx index c219b24f9..c7895c1d8 100644 --- a/packages/rich-text/src/plugins/Text/__tests__/createTextPlugin.test.tsx +++ b/packages/rich-text/src/plugins/Text/__tests__/createTextPlugin.test.tsx @@ -101,7 +101,7 @@ describe('delete backward', () => { ); for (const t of tests) { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line jest/valid-title -- TODO: explain this disable test(t.title, () => { const { editor } = createTestEditor({ input: render(t.input), @@ -218,7 +218,7 @@ describe('delete forward', () => { ); for (const t of tests) { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line jest/valid-title -- TODO: explain this disable test(t.title, () => { const { editor } = createTestEditor({ input: render(t.input), diff --git a/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedAssetCard.test.tsx b/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedAssetCard.test.tsx index ac8954e87..52a3fe606 100644 --- a/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedAssetCard.test.tsx +++ b/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedAssetCard.test.tsx @@ -35,9 +35,9 @@ test('some dropdown actions should be disabled', async () => { sdk={sdk} assetId="asset-id" locale="en-US" - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable onEdit={() => {}} - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable onRemove={() => {}} isDisabled isSelected diff --git a/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedEntryCard.test.tsx b/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedEntryCard.test.tsx index bdc9c56ac..19287c621 100644 --- a/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedEntryCard.test.tsx +++ b/packages/rich-text/src/plugins/shared/__tests__/FetchingWrappedEntryCard.test.tsx @@ -37,9 +37,9 @@ test('some dropdown actions should be disabled/removed', async () => { sdk={sdk} entryId="entry-id" locale="en-US" - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable onEdit={() => {}} - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable onRemove={() => {}} isDisabled isSelected diff --git a/packages/rich-text/src/plugins/shared/useFetchedEntity.ts b/packages/rich-text/src/plugins/shared/useFetchedEntity.ts index 346b15367..0029c75b9 100644 --- a/packages/rich-text/src/plugins/shared/useFetchedEntity.ts +++ b/packages/rich-text/src/plugins/shared/useFetchedEntity.ts @@ -33,7 +33,7 @@ export function useFetchedEntity({ type, id, onEntityFetchComplete }: FetchedEnt // entity store update causing page lag on initial load // TODO: consider rewriting useEntities() hook to avoid that happening in // first place. - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: explain this disable }, [type, id]); useEffect(() => { diff --git a/packages/rich-text/src/test-utils/hyperscript.d.ts b/packages/rich-text/src/test-utils/hyperscript.d.ts index 298ed2701..1db26092d 100644 --- a/packages/rich-text/src/test-utils/hyperscript.d.ts +++ b/packages/rich-text/src/test-utils/hyperscript.d.ts @@ -1,6 +1,6 @@ -// eslint-disable-next-line +// eslint-disable-next-line -- TODO: explain this disable declare namespace JSX { - // eslint-disable-next-line + // eslint-disable-next-line -- TODO: explain this disable interface Element {} interface IntrinsicElements { editor: {}; diff --git a/packages/rich-text/src/types.ts b/packages/rich-text/src/types.ts index 962d1795f..9ee9312df 100644 --- a/packages/rich-text/src/types.ts +++ b/packages/rich-text/src/types.ts @@ -23,7 +23,7 @@ export type CustomElement = { isVoid?: boolean; }; -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: explain this disable export type CustomRenderElementProps = Omit & { element: CustomElement; } & O; diff --git a/packages/single-line/src/SingleLineEditor.tsx b/packages/single-line/src/SingleLineEditor.tsx index 7a3e43246..11b6bf392 100644 --- a/packages/single-line/src/SingleLineEditor.tsx +++ b/packages/single-line/src/SingleLineEditor.tsx @@ -43,7 +43,6 @@ export function SingleLineEditor(props: SingleLineEditorProps) { throw new Error(`"${field.type}" field type is not supported by SingleLineEditor`); } - // eslint-disable-next-line const constraints = ConstraintsUtils.fromFieldValidations(field.validations, field.type); const checkConstraint = ConstraintsUtils.makeChecker(constraints); const direction = locales.direction[field.locale] || 'ltr'; diff --git a/packages/tags/src/TagsEditorContainer.spec.tsx b/packages/tags/src/TagsEditorContainer.spec.tsx index 62a1f07b3..c9ad0043b 100644 --- a/packages/tags/src/TagsEditorContainer.spec.tsx +++ b/packages/tags/src/TagsEditorContainer.spec.tsx @@ -112,7 +112,7 @@ describe('TagsEditor', () => { ]; conditions.forEach((condition) => { - // eslint-disable-next-line jest/valid-title + // eslint-disable-next-line -- TODO: describe this disable jest/valid-title it(condition.testType, () => { const [field] = createFakeFieldAPI((mock) => { return { diff --git a/packages/validation-errors/src/ValidationErrors.tsx b/packages/validation-errors/src/ValidationErrors.tsx index 808178c76..d742dfd39 100644 --- a/packages/validation-errors/src/ValidationErrors.tsx +++ b/packages/validation-errors/src/ValidationErrors.tsx @@ -88,6 +88,7 @@ function UniquenessError(props: UniquenessErrorProps) { entries, }); }); + // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate these dependencies }, [getTitle, state.entries, conflicting, props.space.getEntries, props.getEntryURL]); return ( diff --git a/yarn.lock b/yarn.lock index 6415389db..3110a42b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -157,6 +157,15 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/eslint-parser@7.18.2": + version "7.18.2" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz#e14dee36c010edfb0153cf900c2b0815e82e3245" + integrity sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.12.1", "@babel/generator@^7.14.5", "@babel/generator@^7.4.4", "@babel/generator@^7.8.4", "@babel/generator@^7.9.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" @@ -3259,6 +3268,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + 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" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -3377,6 +3401,20 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" @@ -5741,6 +5779,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -6038,7 +6081,21 @@ regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/eslint-plugin@^4.10.0", "@typescript-eslint/eslint-plugin@^4.5.0", "@typescript-eslint/eslint-plugin@^4.6.0": +"@typescript-eslint/eslint-plugin@^4.10.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/eslint-plugin@^4.5.0", "@typescript-eslint/eslint-plugin@^4.6.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.27.0.tgz#0b7fc974e8bc9b2b5eb98ed51427b0be529b4ad0" integrity sha512-DsLqxeUfLVNp3AO7PC3JyaddmEHTtI9qTSAs+RB6ja27QvIM0TA8Cizn1qcS6vOu+WDLFJzkwkgweiyFhssDdQ== @@ -6052,6 +6109,21 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/eslint-plugin@^5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" + integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== + dependencies: + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/type-utils" "5.29.0" + "@typescript-eslint/utils" "5.29.0" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@2.28.0": version "2.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.28.0.tgz#1fd0961cd8ef6522687b4c562647da6e71f8833d" @@ -6074,6 +6146,18 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/experimental-utils@^3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" @@ -6095,7 +6179,17 @@ "@typescript-eslint/typescript-estree" "2.28.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/parser@^4.10.0", "@typescript-eslint/parser@^4.5.0", "@typescript-eslint/parser@^4.6.0": +"@typescript-eslint/parser@^4.10.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + dependencies: + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + debug "^4.3.1" + +"@typescript-eslint/parser@^4.5.0", "@typescript-eslint/parser@^4.6.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.27.0.tgz#85447e573364bce4c46c7f64abaa4985aadf5a94" integrity sha512-XpbxL+M+gClmJcJ5kHnUpBGmlGdgNvy6cehgR6ufyxkEJMGP25tZKCaKyC0W/JVpuhU3VU1RBn7SYUPKSMqQvQ== @@ -6105,6 +6199,16 @@ "@typescript-eslint/typescript-estree" "4.27.0" debug "^4.3.1" +"@typescript-eslint/parser@^5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" + integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== + dependencies: + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" + debug "^4.3.4" + "@typescript-eslint/scope-manager@4.27.0": version "4.27.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.27.0.tgz#b0b1de2b35aaf7f532e89c8e81d0fa298cae327d" @@ -6113,6 +6217,31 @@ "@typescript-eslint/types" "4.27.0" "@typescript-eslint/visitor-keys" "4.27.0" +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/scope-manager@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" + integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + +"@typescript-eslint/type-utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" + integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== + dependencies: + "@typescript-eslint/utils" "5.29.0" + debug "^4.3.4" + tsutils "^3.21.0" + "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" @@ -6123,6 +6252,16 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8" integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA== +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/types@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" + integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== + "@typescript-eslint/typescript-estree@2.28.0": version "2.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.28.0.tgz#d34949099ff81092c36dc275b6a1ea580729ba00" @@ -6163,6 +6302,44 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" + integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" + integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" @@ -6178,6 +6355,22 @@ "@typescript-eslint/types" "4.27.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +"@typescript-eslint/visitor-keys@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" + integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + eslint-visitor-keys "^3.3.0" + "@udecode/plate-basic-marks@^10.4.0": version "10.5.3" resolved "https://registry.yarnpkg.com/@udecode/plate-basic-marks/-/plate-basic-marks-10.5.3.tgz#ff8b7318290c4b237da4d96224c2f19959d544d0" @@ -6938,6 +7131,17 @@ array-includes@^3.1.1, array-includes@^3.1.3: get-intrinsic "^1.1.1" is-string "^1.0.5" +array-includes@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + array-move@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/array-move/-/array-move-3.0.1.tgz#179645cc0987b65953a4fc06b6df9045e4ba9618" @@ -6983,6 +7187,16 @@ array.prototype.flat@^1.2.4: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" @@ -7779,7 +7993,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -8228,9 +8442,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219: - version "1.0.30001237" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz#4b7783661515b8e7151fc6376cfd97f0e427b9e5" - integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw== + version "1.0.30001358" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz" + integrity sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw== capitalize@^2.0.0: version "2.0.2" @@ -10066,6 +10280,13 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -10217,6 +10438,14 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -11085,6 +11314,35 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstrac string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + es-get-iterator@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.1.tgz#b93ddd867af16d5118e00881396533c1c6647ad9" @@ -11099,6 +11357,13 @@ es-get-iterator@^1.1.1: is-string "^1.0.5" isarray "^2.0.5" +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -11224,6 +11489,14 @@ eslint-import-resolver-node@^0.3.4: debug "^2.6.9" resolve "^1.13.1" +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + eslint-module-utils@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" @@ -11232,6 +11505,14 @@ eslint-module-utils@^2.6.1: debug "^3.2.7" pkg-dir "^2.0.0" +eslint-module-utils@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + eslint-plugin-babel@5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz#75a2413ffbf17e7be57458301c60291f2cfbf560" @@ -11246,6 +11527,14 @@ eslint-plugin-cypress@^2.12.0: dependencies: globals "^11.12.0" +eslint-plugin-eslint-comments@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" + 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" @@ -11287,6 +11576,25 @@ eslint-plugin-import@^2.18.2, eslint-plugin-import@^2.22.1: resolve "^1.20.0" tsconfig-paths "^3.9.0" +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + eslint-plugin-jest@24.1.3: version "24.1.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" @@ -11427,6 +11735,16 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^2.1.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-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint-webpack-plugin@^2.5.2: version "2.5.4" resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz#473b84932f1a8e2c2b8e66a402d0497bf440b986" @@ -11439,7 +11757,7 @@ eslint-webpack-plugin@^2.5.2: normalize-path "^3.0.0" schema-utils "^3.0.0" -eslint@6.8.0, eslint@^6.1.0: +eslint@^6.1.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -11527,6 +11845,52 @@ eslint@^7.11.0, eslint@^7.12.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + 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" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + 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.1.2" resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" @@ -12005,6 +12369,17 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@2.x, 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" @@ -12522,11 +12897,26 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -12640,6 +13030,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + 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" @@ -12862,6 +13260,18 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -13002,6 +13412,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" @@ -13029,11 +13444,30 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -13606,6 +14040,11 @@ ignore@^5.0.0, ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@^5.0.5, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + image-size@^0.7.2: version "0.7.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" @@ -14058,6 +14497,11 @@ is-callable@^1.1.4, is-callable@^1.2.3: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -14091,6 +14535,13 @@ is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.4.0: dependencies: has "^1.0.3" +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + 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" @@ -14211,6 +14662,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" @@ -14273,6 +14731,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-number-object@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" @@ -14400,6 +14863,14 @@ is-regex@^1.0.4, is-regex@^1.1.1, is-regex@^1.1.2: call-bind "^1.0.2" has-symbols "^1.0.1" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -14427,6 +14898,13 @@ is-set@^2.0.1: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + is-ssh@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" @@ -14449,6 +14927,13 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -14498,6 +14983,13 @@ is-weakmap@^2.0.1: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-weakset@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.1.tgz#e9a0af88dbd751589f5e50d80f4c98b780884f83" @@ -16816,7 +17308,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0: +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -16863,6 +17355,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -16966,6 +17466,13 @@ minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" @@ -17663,6 +18170,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.12.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" @@ -17748,6 +18260,15 @@ object.values@^1.1.0, object.values@^1.1.3: es-abstract "^1.18.0-next.2" has "^1.0.3" +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -18454,7 +18975,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -18546,6 +19067,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -20502,6 +21028,15 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0, regexp.prototype.f call-bind "^1.0.2" define-properties "^1.1.3" +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -20512,6 +21047,11 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -21214,6 +21754,15 @@ resolve@^1.1.5, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11. is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -21614,6 +22163,13 @@ semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7 dependencies: lru-cache "^6.0.0" +semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -22579,6 +23135,15 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string.prototype.trimstart@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" @@ -22587,6 +23152,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -22840,6 +23414,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + svg-parser@^2.0.0, svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -23456,6 +24035,16 @@ ts-pnp@1.2.0, ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" @@ -23810,6 +24399,16 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + uncss@^0.17.3: version "0.17.3" resolved "https://registry.yarnpkg.com/uncss/-/uncss-0.17.3.tgz#50fc1eb4ed573ffff763458d801cd86e4d69ea11"