From a950e9d095359c8de59f430351e96144ea8ffd21 Mon Sep 17 00:00:00 2001 From: Gabriel Hernandez Date: Fri, 14 Oct 2022 17:45:57 +0100 Subject: [PATCH] Feat/update query doc sidepanel (#8214) * create new components for query side panel * add reusable icon component that uses svg for icons * integrate with new osquery_fleet_schema.json data * update UI to work with osquery_fleet_schema.json * add remark-gfm to safely support direct urls in markdown * move fleet ace into markdown component so we can render code with ace editor * add testing for new query sidebar * remove incomplete tests for query sidepanel --- changes/issue-7080-new-query-sidebar-docs | 1 + cypress/integration/all/app/labelflow.spec.ts | 4 +- .../integration/all/app/policiesflow.spec.ts | 16 +- .../integration/pages/manageQueriesPage.ts | 6 +- frontend/components/FleetAce/FleetAce.tsx | 16 +- .../FleetMarkdown/FleetMarkdown.tsx | 87 ++ .../components/FleetMarkdown/_styles.scss | 21 + frontend/components/FleetMarkdown/index.ts | 1 + frontend/components/Icon/_styles.scss | 0 .../TooltipWrapper/TooltipWrapper.tsx | 6 +- frontend/components/icons/index.ts | 4 + .../QuerySidePanel/QuerySidePanel.tsx | 141 +- .../ColumnListItem/ColumnListItem.tsx | 103 ++ .../ColumnListItem/_styles.scss | 51 + .../QueryTableColumns/ColumnListItem/index.ts | 1 + .../QueryTableColumns/QueryTableColumns.tsx | 47 + .../QueryTableColumns/_styles.scss | 13 + .../QuerySidePanel/QueryTableColumns/index.ts | 1 + .../QueryTableExample/QueryTableExample.tsx | 20 + .../QueryTableExample/_styles.scss | 7 + .../QuerySidePanel/QueryTableExample/index.ts | 1 + .../QueryTableNotes/QueryTableNotes.tsx | 23 + .../QueryTableNotes/_styles.scss | 18 + .../QuerySidePanel/QueryTableNotes/index.ts | 1 + .../QueryTablePlatforms.tsx | 51 + .../QueryTablePlatforms/_styles.scss | 28 + .../QueryTablePlatforms/index.ts | 1 + .../side_panels/QuerySidePanel/_styles.scss | 124 +- frontend/context/policy.tsx | 15 +- frontend/context/query.tsx | 6 +- frontend/docs/patterns.md | 18 + frontend/interfaces/osquery_table.ts | 29 +- frontend/utilities/constants.ts | 2 +- frontend/utilities/osquery_tables.ts | 25 +- package.json | 4 +- tsconfig.json | 3 +- yarn.lock | 1269 +++++++++++++---- 37 files changed, 1648 insertions(+), 516 deletions(-) create mode 100644 changes/issue-7080-new-query-sidebar-docs create mode 100644 frontend/components/FleetMarkdown/FleetMarkdown.tsx create mode 100644 frontend/components/FleetMarkdown/_styles.scss create mode 100644 frontend/components/FleetMarkdown/index.ts create mode 100644 frontend/components/Icon/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/ColumnListItem.tsx create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/index.ts create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/QueryTableColumns.tsx create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableColumns/index.ts create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableExample/QueryTableExample.tsx create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableExample/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableExample/index.ts create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableNotes/QueryTableNotes.tsx create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableNotes/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTableNotes/index.ts create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/QueryTablePlatforms.tsx create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/_styles.scss create mode 100644 frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/index.ts diff --git a/changes/issue-7080-new-query-sidebar-docs b/changes/issue-7080-new-query-sidebar-docs new file mode 100644 index 0000000000..25cd59693d --- /dev/null +++ b/changes/issue-7080-new-query-sidebar-docs @@ -0,0 +1 @@ +- add new query sidebar with updated and improved docs diff --git a/cypress/integration/all/app/labelflow.spec.ts b/cypress/integration/all/app/labelflow.spec.ts index 48be5366f9..0246722164 100644 --- a/cypress/integration/all/app/labelflow.spec.ts +++ b/cypress/integration/all/app/labelflow.spec.ts @@ -21,7 +21,7 @@ describe("Labels flow", () => { it("creates a custom label", () => { cy.getAttached(".label-filter-select__control").click(); cy.findByRole("button", { name: /add label/i }).click(); - cy.getAttached(".ace_content").type( + cy.getAttached(".label-form__text-editor-wrapper .ace_content").type( "{selectall}{backspace}SELECT * FROM users;" ); cy.findByLabelText(/name/i).click().type("Show all MAC users"); @@ -62,7 +62,7 @@ describe("Labels flow", () => { it("creates labels with special characters", () => { cy.getAttached(".label-filter-select__control").click(); cy.findByRole("button", { name: /add label/i }).click(); - cy.getAttached(".ace_content").type( + cy.getAttached(".label-form__text-editor-wrapper .ace_content").type( "{selectall}{backspace}SELECT * FROM users;" ); cy.findByLabelText(/name/i) diff --git a/cypress/integration/all/app/policiesflow.spec.ts b/cypress/integration/all/app/policiesflow.spec.ts index 61751162cc..b2efc1b570 100644 --- a/cypress/integration/all/app/policiesflow.spec.ts +++ b/cypress/integration/all/app/policiesflow.spec.ts @@ -147,7 +147,7 @@ describe("Policies flow (empty)", () => { cy.findByText(/add a policy/i).click(); }); cy.findByText(/create your own policy/i).click(); - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .click({ force: true }) .type( "{selectall}SELECT 1 FROM users WHERE username = 'backup' LIMIT 1;" @@ -217,7 +217,7 @@ describe("Policies flow (empty)", () => { }); // Query with unknown table name displays error message - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall}SELECT 1 FROM foo WHERE start_time > 1;"); @@ -230,7 +230,7 @@ describe("Policies flow (empty)", () => { }); // Query with syntax error displays error message - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall}SELEC 1 FRO osquery_info WHER start_time > 1;"); @@ -243,7 +243,7 @@ describe("Policies flow (empty)", () => { }); // Query with no tables treated as compatible with all platforms - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall}SELECT * WHERE 1 = 1;"); @@ -254,7 +254,7 @@ describe("Policies flow (empty)", () => { }); // Tables defined in common table expression not factored into compatibility check - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall} ") @@ -270,7 +270,7 @@ describe("Policies flow (empty)", () => { // Query with only macOS tables treated as compatible only with macOS // eslint-disable-next-line cypress/no-unnecessary-waiting - cy.getAttached(".ace_scroller") + cy.getAttached(" .policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall} ") @@ -285,7 +285,7 @@ describe("Policies flow (empty)", () => { }); // Query with macadmins extension table is not treated as incompatible - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .first() .click({ force: true }) .type("{selectall}SELECT 1 FROM mdm WHERE enrolled='true';"); @@ -477,7 +477,7 @@ describe("Policies flow (seeded)", () => { cy.getAttached("tbody").within(() => { cy.getAttached(".name__cell .button--text-link").first().click(); }); - cy.getAttached(".ace_scroller") + cy.getAttached(".policy-page__form .ace_scroller") .click({ force: true }) .type( "{selectall}SELECT 1 FROM gatekeeper WHERE assessments_enabled = 1;" diff --git a/cypress/integration/pages/manageQueriesPage.ts b/cypress/integration/pages/manageQueriesPage.ts index 6767e7cf53..a5ff7854ae 100644 --- a/cypress/integration/pages/manageQueriesPage.ts +++ b/cypress/integration/pages/manageQueriesPage.ts @@ -13,7 +13,7 @@ const manageQueriesPage = { allowsCreateNewQuery: () => { cy.getAttached(".button--brand"); // ensures cta button loads cy.findByRole("button", { name: /new query/i }).click(); - cy.getAttached(".ace_scroller") + cy.getAttached(".query-page__form .ace_scroller") .click({ force: true }) .type("{selectall}SELECT * FROM windows_crashes;"); cy.findByRole("button", { name: /save/i }).click(); @@ -52,7 +52,7 @@ const manageQueriesPage = { cy.getAttached(".name__cell .button--text-link") .first() .click({ force: true }); - cy.getAttached(".ace_text-input") + cy.getAttached(".query-page__form .ace_text-input") .click({ force: true }) .clear({ force: true }) .type("SELECT 1 FROM cypress;", { @@ -72,7 +72,7 @@ const manageQueriesPage = { cy.findByText(/get authorized/i).click(); }); cy.findByRole("button", { name: /run query/i }).should("exist"); - cy.getAttached(".ace_scroller") + cy.getAttached(".query-page__form .ace_scroller") .click() .type("{selectall}SELECT datetime, username FROM windows_crashes;"); cy.findByRole("button", { name: /save as new/i }).should("be.enabled"); diff --git a/frontend/components/FleetAce/FleetAce.tsx b/frontend/components/FleetAce/FleetAce.tsx index 6d4209b41f..0806fc2ea8 100644 --- a/frontend/components/FleetAce/FleetAce.tsx +++ b/frontend/components/FleetAce/FleetAce.tsx @@ -23,6 +23,8 @@ export interface IFleetAceProps { wrapperClassName?: string; hint?: string; labelActionComponent?: React.ReactNode; + style?: React.CSSProperties; + onBlur?: (editor?: IAceEditor) => void; onLoad?: (editor: IAceEditor) => void; onChange?: (value: string) => void; handleSubmit?: () => void; @@ -42,6 +44,8 @@ const FleetAce = ({ wrapEnabled = false, wrapperClassName, hint, + style, + onBlur, onLoad, onChange, handleSubmit = noop, @@ -54,9 +58,17 @@ const FleetAce = ({ const fixHotkeys = (editor: IAceEditor) => { editor.commands.removeCommand("gotoline"); editor.commands.removeCommand("find"); + }; + + const onLoadHandler = (editor: IAceEditor) => { + fixHotkeys(editor); onLoad && onLoad(editor); }; + const onBlurHandler = (event: any, editor?: IAceEditor): void => { + onBlur && onBlur(editor); + }; + const handleDelete = (deleteCommand: string) => { const currentText = editorRef.current?.editor.getValue(); const selectedText = editorRef.current?.editor.getSelectedText(); @@ -114,7 +126,8 @@ const FleetAce = ({ maxLines={20} name={name} onChange={onChange} - onLoad={fixHotkeys} + onBlur={onBlurHandler} + onLoad={onLoadHandler} readOnly={readOnly} setOptions={{ enableLinking: true }} showGutter={showGutter} @@ -123,6 +136,7 @@ const FleetAce = ({ value={value} width="100%" wrapEnabled={wrapEnabled} + style={style} commands={[ { name: "commandName", diff --git a/frontend/components/FleetMarkdown/FleetMarkdown.tsx b/frontend/components/FleetMarkdown/FleetMarkdown.tsx new file mode 100644 index 0000000000..4825091740 --- /dev/null +++ b/frontend/components/FleetMarkdown/FleetMarkdown.tsx @@ -0,0 +1,87 @@ +import React from "react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import classnames from "classnames"; +import { IAceEditor } from "react-ace/lib/types"; +import { noop } from "lodash"; + +import FleetAce from "components/FleetAce"; + +import ExternalLinkIcon from "../../../assets/images/icon-external-link-12x12@2x.png"; + +interface ICustomLinkProps { + text: React.ReactNode; + href: string; + newTab?: boolean; +} + +const CustomLink = ({ text, href, newTab = false }: ICustomLinkProps) => { + const target = newTab ? "__blank" : ""; + return ( + + {text} + Open external link + + ); +}; + +interface IFleetMarkdownProps { + markdown: string; + className?: string; +} + +const baseClass = "fleet-markdown"; + +/** This will give us sensible defaults for how we render markdown across the fleet application. + * NOTE: can be extended later to take custom components, but dont need that at the moment. + */ +const FleetMarkdown = ({ markdown, className }: IFleetMarkdownProps) => { + const classNames = classnames(baseClass, className); + + return ( + { + return ; + }, + + // Overrides code display to use FleetAce with Readonly overrides. + code: ({ children }) => { + const onEditorBlur = (editor?: IAceEditor) => { + editor && editor.clearSelection(); + }; + + const onEditorLoad = (editor: IAceEditor) => { + editor.setOptions({ + indentedSoftWrap: false, // removes automatic indentation when wrapping + }); + + // removes focus UI styling + editor.renderer.visualizeFocus = noop; + }; + + return ( + + ); + }, + }} + > + {markdown} + + ); +}; + +export default FleetMarkdown; diff --git a/frontend/components/FleetMarkdown/_styles.scss b/frontend/components/FleetMarkdown/_styles.scss new file mode 100644 index 0000000000..79633c7365 --- /dev/null +++ b/frontend/components/FleetMarkdown/_styles.scss @@ -0,0 +1,21 @@ +.fleet-markdown { + font-size: $x-small; + + ul { + // We need 20px here to keep the list items in line with the left side of + // the container. + padding-left: 20px; + } + + pre { + padding: 12px; + border: 1px solid $ui-blue-gray; + background-color: $ui-light-grey; // copy fleet ace background color + + .ace_cursor { + // We have the !important here as there doesnt seen a way to programatically + // hide only the cursor in the editor. + display: none !important + } + } +} diff --git a/frontend/components/FleetMarkdown/index.ts b/frontend/components/FleetMarkdown/index.ts new file mode 100644 index 0000000000..d2dc2c26c8 --- /dev/null +++ b/frontend/components/FleetMarkdown/index.ts @@ -0,0 +1 @@ +export { default } from "./FleetMarkdown"; diff --git a/frontend/components/Icon/_styles.scss b/frontend/components/Icon/_styles.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/components/TooltipWrapper/TooltipWrapper.tsx b/frontend/components/TooltipWrapper/TooltipWrapper.tsx index 147346c433..f04dc41964 100644 --- a/frontend/components/TooltipWrapper/TooltipWrapper.tsx +++ b/frontend/components/TooltipWrapper/TooltipWrapper.tsx @@ -1,3 +1,4 @@ +import classnames from "classnames"; import React from "react"; interface ITooltipWrapperProps { @@ -5,6 +6,7 @@ interface ITooltipWrapperProps { tipContent: string; position?: "top" | "bottom"; isDelayed?: boolean; + className?: string; } const baseClass = "component__tooltip-wrapper"; @@ -14,13 +16,15 @@ const TooltipWrapper = ({ tipContent, position = "bottom", isDelayed, + className, }: ITooltipWrapperProps): JSX.Element => { + const classname = classnames(baseClass, className); const tipClass = isDelayed ? `${baseClass}__tip-text delayed-tip` : `${baseClass}__tip-text`; return ( -
+
{children}
diff --git a/frontend/components/icons/index.ts b/frontend/components/icons/index.ts index 276ec6a79d..f77b5200c4 100644 --- a/frontend/components/icons/index.ts +++ b/frontend/components/icons/index.ts @@ -3,11 +3,15 @@ import Apple from "./Apple"; import Windows from "./Windows"; import Linux from "./Linux"; +// a mapping of the usable names of icons to the icon source. export const ICON_MAP = { "calendar-check": CalendarCheck, darwin: Apple, + macOS: Apple, windows: Windows, + Windows, linux: Linux, + Linux, }; export type IconNames = keyof typeof ICON_MAP; diff --git a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tsx b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tsx index d57a5c5583..b64e56c04a 100644 --- a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tsx +++ b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tsx @@ -1,24 +1,23 @@ import React from "react"; -import classnames from "classnames"; -import { IOsqueryTable } from "interfaces/osquery_table"; +import { IOsQueryTable } from "interfaces/osquery_table"; import { osqueryTableNames } from "utilities/osquery_tables"; -import { PLATFORM_DISPLAY_NAMES } from "utilities/constants"; // @ts-ignore import Dropdown from "components/forms/fields/Dropdown"; -// @ts-ignore -import FleetIcon from "components/icons/FleetIcon"; -import TooltipWrapper from "components/TooltipWrapper"; +import FleetMarkdown from "components/FleetMarkdown"; +import Icon from "components/Icon"; + +import QueryTableColumns from "./QueryTableColumns"; +import QueryTablePlatforms from "./QueryTablePlatforms"; // @ts-ignore -import AppleIcon from "../../../../assets/images/icon-apple-dark-20x20@2x.png"; -import LinuxIcon from "../../../../assets/images/icon-linux-dark-20x20@2x.png"; -import WindowsIcon from "../../../../assets/images/icon-windows-dark-20x20@2x.png"; import CloseIcon from "../../../../assets/images/icon-close-black-50-8x8@2x.png"; +import QueryTableExample from "./QueryTableExample"; +import QueryTableNotes from "./QueryTableNotes"; interface IQuerySidePanel { - selectedOsqueryTable: IOsqueryTable; + selectedOsqueryTable: IOsQueryTable; onOsqueryTableSelect: (tableName: string) => void; onClose?: () => void; } @@ -30,64 +29,35 @@ const QuerySidePanel = ({ onOsqueryTableSelect, onClose, }: IQuerySidePanel): JSX.Element => { - const displayTypeForDataType = (dataType: string) => { - switch (dataType) { - case "TEXT_TYPE": - return "text"; - case "BIGINT_TYPE": - return "big int"; - case "INTEGER_TYPE": - return "integer"; - default: - return dataType; - } - }; + const { + name, + description, + platforms, + columns, + examples, + notes, + evented, + } = selectedOsqueryTable; const onSelectTable = (value: string) => { onOsqueryTableSelect(value); }; - const renderColumns = () => { - const columns = selectedOsqueryTable?.columns; - const columnBaseClass = "query-column-list"; - - return columns?.map((column) => ( -
  • - - - {column.name} - - -
    - - {displayTypeForDataType(column.type)} - -
    -
  • - )); - }; - const renderTableSelect = () => { - const tableNames = osqueryTableNames?.map((name: string) => { - return { label: name, value: name }; + const tableNames = osqueryTableNames?.map((tableName: string) => { + return { label: tableName, value: tableName }; }); - if (!tableNames) { - return null; - } - return ( ); }; - const { description, platforms } = selectedOsqueryTable || {}; - const iconClasses = classnames([`${baseClass}__icon`], "icon"); return ( <>
    -

    Tables

    +

    + Tables + + {osqueryTableNames.length} + +

    {renderTableSelect()} -

    {description}

    -
    -

    Compatible with:

    -
      - {platforms?.map((platform) => { - if (platform === "all") { - return ( -
    • - {" "} - {PLATFORM_DISPLAY_NAMES[platform] || platform} -
    • - ); - } - platform = platform.toLowerCase(); - let icon = ( - {`${platform} - ); - if (platform === "linux") { - icon = ( - {`${platform} - ); - } else if (platform === "windows") { - icon = ( - {`${platform} - ); - } - - return ( -
    • - {icon} {PLATFORM_DISPLAY_NAMES[platform] || platform} -
    • - ); - })} -
    -
    -
    -

    Columns

    -
      {renderColumns()}
    + {evented && ( +
    + + EVENTED TABLE +
    + )} +
    +
    + + + {examples && } + {notes && } ); }; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/ColumnListItem.tsx b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/ColumnListItem.tsx new file mode 100644 index 0000000000..c12f751996 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/ColumnListItem.tsx @@ -0,0 +1,103 @@ +import React from "react"; +import classnames from "classnames"; + +import { ColumnType, IQueryTableColumn } from "interfaces/osquery_table"; +import { PLATFORM_DISPLAY_NAMES } from "utilities/constants"; +import TooltipWrapper from "components/TooltipWrapper"; + +interface IColumnListItemProps { + column: IQueryTableColumn; +} + +const baseClass = "column-list-item"; + +const FOOTNOTES = { + required: "Required in WHERE clause.", + requires_user_context: "Defaults to root.", + platform: "Only available on", +}; + +/** + * This function is to create the html string for the tooltip. We do this as the + * current tooltip only supports strings. we can change this when it support ReactNodes + * in the future. + */ +const createTooltipHtml = (column: IQueryTableColumn) => { + const toolTipHtml = []; + + const descriptionHtml = `${column.description}`; + toolTipHtml.push(descriptionHtml); + + if (column.required) { + toolTipHtml.push( + `${FOOTNOTES.required}` + ); + } + + if (column.requires_user_context) { + toolTipHtml.push( + `${FOOTNOTES.requires_user_context}` + ); + } + + if (column.platforms?.length === 1) { + const platform = column.platforms[0]; + toolTipHtml.push( + `${FOOTNOTES.platform} ${platform}` + ); + } + + if (column.platforms?.length === 2) { + const platform1 = PLATFORM_DISPLAY_NAMES[column.platforms[0]]; + const platform2 = PLATFORM_DISPLAY_NAMES[column.platforms[1]]; + toolTipHtml.push( + `${FOOTNOTES.platform} ${platform1} and ${platform2}.` + ); + } + + const tooltip = toolTipHtml.join(""); + return tooltip; +}; + +const hasFootnotes = (column: IQueryTableColumn) => { + return ( + column.required || + column.requires_user_context || + (column.platforms !== undefined && column.platforms.length !== 0) + ); +}; + +const createTypeDisplayText = (type: ColumnType) => { + return type.replace("_", " ").toUpperCase(); +}; + +const createListItemClassnames = (column: IQueryTableColumn) => { + return classnames(`${baseClass}__name`, { + [`${baseClass}__has-footnotes`]: hasFootnotes(column), + }); +}; + +const ColumnListItem = ({ column }: IColumnListItemProps) => { + const columnNameClasses = createListItemClassnames(column); + + return ( +
  • +
    + + + {column.name} + + + {column.required && *} +
    + + {createTypeDisplayText(column.type)} + +
  • + ); +}; + +export default ColumnListItem; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/_styles.scss b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/_styles.scss new file mode 100644 index 0000000000..a787f72178 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/_styles.scss @@ -0,0 +1,51 @@ +.column-list-item { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + + &:last-child { + margin-bottom: 0; + } + + &__name-wrapper { + display: flex; + align-items: center; + } + + &__name { + font-size: $x-small; + } + + // this is to override the tooltip text style from TooltipWrapper. When we + // change the component to support ReactNode we wont need this. + &__tooltip { + .component__tooltip-wrapper__tip-text { + font-style: normal; + } + } + + &__asterisk { + // specific height to align it vertically with the column name + height: 19px; + } + + &__has-footnotes { + font-style: italic; + margin-right: $pad-xsmall; + } + + &__type { + font-size: $xx-small; + } + + &__footnote { + font-weight: $bold; + margin: $pad-small 0; + display: block; + + &:last-child { + margin-bottom: 0; + } + } +} diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/index.ts b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/index.ts new file mode 100644 index 0000000000..0d2e347f06 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/ColumnListItem/index.ts @@ -0,0 +1 @@ +export { default } from "./ColumnListItem"; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/QueryTableColumns.tsx b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/QueryTableColumns.tsx new file mode 100644 index 0000000000..34d998fa8f --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/QueryTableColumns.tsx @@ -0,0 +1,47 @@ +import React from "react"; + +import { IQueryTableColumn } from "interfaces/osquery_table"; + +import ColumnListItem from "./ColumnListItem"; + +const sortAlphabetically = ( + columnA: IQueryTableColumn, + columnB: IQueryTableColumn +) => { + return columnA.name.localeCompare(columnB.name); +}; + +/** + * Orders the columns by required columns first sorted alphabetically, + * then the rest of the columns sorted alphabetically. + */ +const orderColumns = (columns: IQueryTableColumn[]) => { + const requiredColumns = columns.filter((column) => column.required); + const nonRequiredColumns = columns.filter((column) => !column.required); + + const sortedRequiredColumns = requiredColumns.sort(sortAlphabetically); + const sortedNonRequiredColumns = nonRequiredColumns.sort(sortAlphabetically); + + return [...sortedRequiredColumns, ...sortedNonRequiredColumns]; +}; + +interface IQueryTableColumnsProps { + columns: IQueryTableColumn[]; +} + +const baseClass = "query-table-columns"; + +const QueryTableColumns = ({ columns }: IQueryTableColumnsProps) => { + const columnListItems = orderColumns(columns).map((column) => { + return ; + }); + + return ( +
    +

    Columns

    +
      {columnListItems}
    +
    + ); +}; + +export default QueryTableColumns; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/_styles.scss b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/_styles.scss new file mode 100644 index 0000000000..c4b36e2191 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/_styles.scss @@ -0,0 +1,13 @@ +.query-table-columns { + margin-bottom: $pad-xlarge; + + h3 { + font-size: $small; + font-weight: $bold; + } + + &__column-list { + list-style: none; + padding-left: 0; + } +} diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/index.ts b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/index.ts new file mode 100644 index 0000000000..24d153543c --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableColumns/index.ts @@ -0,0 +1 @@ +export { default } from "./QueryTableColumns"; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableExample/QueryTableExample.tsx b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/QueryTableExample.tsx new file mode 100644 index 0000000000..e0ce94fe3d --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/QueryTableExample.tsx @@ -0,0 +1,20 @@ +import React from "react"; + +import FleetMarkdown from "components/FleetMarkdown"; + +interface IQueryTableExampleProps { + example: string; +} + +const baseClass = "query-table-example"; + +const QueryTableExample = ({ example }: IQueryTableExampleProps) => { + return ( +
    +

    Example

    + +
    + ); +}; + +export default QueryTableExample; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableExample/_styles.scss b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/_styles.scss new file mode 100644 index 0000000000..2757788622 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/_styles.scss @@ -0,0 +1,7 @@ +.query-table-example { + + h3 { + font-size: $small; + font-weight: $bold; + } +} diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableExample/index.ts b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/index.ts new file mode 100644 index 0000000000..bee3a688bb --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableExample/index.ts @@ -0,0 +1 @@ +export { default } from "./QueryTableExample"; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/QueryTableNotes.tsx b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/QueryTableNotes.tsx new file mode 100644 index 0000000000..4ac005562d --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/QueryTableNotes.tsx @@ -0,0 +1,23 @@ +import React from "react"; + +import FleetMarkdown from "components/FleetMarkdown"; + +interface IQueryTableNotesProps { + notes: string; +} + +const baseClass = "query-table-notes"; + +const QueryTableNotes = ({ notes }: IQueryTableNotesProps) => { + return ( +
    +

    Notes

    + +
    + ); +}; + +export default QueryTableNotes; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/_styles.scss b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/_styles.scss new file mode 100644 index 0000000000..f00eae9081 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/_styles.scss @@ -0,0 +1,18 @@ +.query-table-notes { + h3 { + font-size: $small; + font-weight: $bold; + } + + // overriding default FleetMarkdown styles here + &__notes-markdown { + + li { + margin-bottom: $pad-medium; + + &:last-child { + margin-bottom: 0; + } + } + } +} diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/index.ts b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/index.ts new file mode 100644 index 0000000000..0d7c2da9f7 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTableNotes/index.ts @@ -0,0 +1 @@ +export { default } from "./QueryTableNotes"; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/QueryTablePlatforms.tsx b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/QueryTablePlatforms.tsx new file mode 100644 index 0000000000..bcb6e03993 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/QueryTablePlatforms.tsx @@ -0,0 +1,51 @@ +import React from "react"; + +import { IOsqueryPlatform } from "interfaces/platform"; +import { PLATFORM_DISPLAY_NAMES } from "utilities/constants"; +import Icon from "components/Icon"; + +interface IPLatformListItemProps { + platform: IOsqueryPlatform; +} + +const baseClassListItem = "platform-list-item"; + +const PlatformListItem = ({ platform }: IPLatformListItemProps) => { + return ( +
  • + + {PLATFORM_DISPLAY_NAMES[platform]} +
  • + ); +}; + +// TODO: remove when freebsd is removed +type IPlatformsWithFreebsd = IOsqueryPlatform | "freebsd"; + +interface IQueryTablePlatformsProps { + platforms: IPlatformsWithFreebsd[]; +} + +const baseClass = "query-table-platforms"; + +const QueryTablePlatforms = ({ platforms }: IQueryTablePlatformsProps) => { + const platformListItems = platforms + .filter((platform) => platform !== "freebsd") + .map((platform) => { + return ( + + ); + }); + + return ( +
    +

    Compatible with

    +
      {platformListItems}
    +
    + ); +}; + +export default QueryTablePlatforms; diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/_styles.scss b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/_styles.scss new file mode 100644 index 0000000000..8e04c9937e --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/_styles.scss @@ -0,0 +1,28 @@ +.query-table-platforms { + h3 { + font-size: $small; + font-weight: $bold; + } + + &__platform-list { + list-style: none; + padding-left: 0; + } + + .platform-list-item { + display: flex; + align-items: center; + padding-bottom: $pad-medium; + font-size: $x-small; + + &:last-child { + padding-bottom: 0; + } + + .icon { + margin-right: $pad-small; + width: 20px; + height: 20px; + } + } +} diff --git a/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/index.ts b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/index.ts new file mode 100644 index 0000000000..cc9a08f3c8 --- /dev/null +++ b/frontend/components/side_panels/QuerySidePanel/QueryTablePlatforms/index.ts @@ -0,0 +1 @@ +export { default } from "./QueryTablePlatforms"; diff --git a/frontend/components/side_panels/QuerySidePanel/_styles.scss b/frontend/components/side_panels/QuerySidePanel/_styles.scss index 54848d24a2..4068d96d6a 100644 --- a/frontend/components/side_panels/QuerySidePanel/_styles.scss +++ b/frontend/components/side_panels/QuerySidePanel/_styles.scss @@ -26,121 +26,47 @@ } } - &__header { - margin: 0 0 $pad-small; - font-size: $x-small; - font-weight: $bold; - color: $core-fleet-black; - } - &__choose-table { - margin: 0 0 $pad-xlarge; + margin: 0 0 $pad-large; .form-field { margin-bottom: $pad-medium; } } - &__description { - font-size: $x-small; - font-style: italic; - color: $core-fleet-black; - margin: 0; - } - - &__platforms { - font-size: $x-small; - color: $core-fleet-black; - list-style: none; - margin: 0 0 $pad-xlarge; - padding: 0; - - .fleeticon { - font-size: 18px; - margin-right: $pad-medium; - } - - .icon { - margin-right: $pad-medium; - width: 20px; - height: 20px; - } - - li { - height: 20px; - display: flex; - align-items: center; - padding-bottom: $pad-medium; - - &:last-child { - padding-bottom: 0; - } - } - } - - &__columns, - &__suggested-queries { - margin: 0 0 $pad-large; - } - - &__column-list { - margin: 0; - padding: 0; - list-style: none; - } - - &__column-wrapper { - display: flex; - margin: 0 0 15px; - padding-top: $pad-small; - border-top: 1px solid $ui-fleet-blue-15; - } - - &__suggestion { - flex-grow: 1; - font-size: $x-small; - line-height: 1.71; - letter-spacing: 0.5px; - text-align: left; - color: $core-fleet-black; - } - - &__load-suggestion { - align-self: center; - padding: 1px 5px; - margin: 0 0 0 10px; - } -} - -.query-column-list { - &__item { + &__header { + margin: 0 0 $pad-medium; + font-size: $small; + font-weight: $bold; display: flex; align-items: center; - justify-content: space-between; - color: $core-fleet-black; - font-size: $x-small; - padding: $pad-small 0; - - &:first-of-type { - border: 0; - } } - &__name { - border-radius: $border-radius; - margin-right: $pad-small; + &__table-count { + line-height: normal; + margin-left: $pad-small; + background-color: $ui-fleet-blue-15; + padding: $pad-xsmall $pad-small; + border-radius: 8px; font-size: $x-small; + } + + &__evented-table-tag { + display: inline-flex; + align-items: center; + background-color: $ui-fleet-blue-15; + padding: $pad-xsmall $pad-small; + border-radius: 6px; + font-size: $xxx-small; font-weight: $bold; - color: $core-fleet-black; + } + + &__event-icon { + margin-right: $pad-small; } &__description { - flex-grow: 1; - text-align: right; - } - - &__type { font-size: $x-small; - color: $core-fleet-black; + overflow-wrap: break-word; } } diff --git a/frontend/context/policy.tsx b/frontend/context/policy.tsx index 2fc23e7d85..f5f76bcb54 100644 --- a/frontend/context/policy.tsx +++ b/frontend/context/policy.tsx @@ -2,7 +2,7 @@ import React, { createContext, useReducer, ReactNode } from "react"; import { find } from "lodash"; import { osqueryTables } from "utilities/osquery_tables"; -import { IOsqueryTable, DEFAULT_OSQUERY_TABLE } from "interfaces/osquery_table"; +import { IOsQueryTable, DEFAULT_OSQUERY_TABLE } from "interfaces/osquery_table"; import { IPlatformString } from "interfaces/platform"; enum ACTIONS { @@ -55,10 +55,14 @@ type InitialStateType = { setLastEditedQueryPlatform: (value: IPlatformString | null) => void; policyTeamId: number; setPolicyTeamId: (id: number) => void; - selectedOsqueryTable: IOsqueryTable; + selectedOsqueryTable: IOsQueryTable; setSelectedOsqueryTable: (tableName: string) => void; }; +const initTable = + osqueryTables.find((table) => table.name === "users") || + DEFAULT_OSQUERY_TABLE; + const initialState = { lastEditedQueryId: null, lastEditedQueryName: "", @@ -74,8 +78,7 @@ const initialState = { setLastEditedQueryPlatform: () => null, policyTeamId: 0, setPolicyTeamId: () => null, - selectedOsqueryTable: - find(osqueryTables, { name: "users" }) || DEFAULT_OSQUERY_TABLE, + selectedOsqueryTable: initTable, setSelectedOsqueryTable: () => null, }; @@ -89,7 +92,9 @@ const reducer = (state: InitialStateType, action: IAction) => { case ACTIONS.SET_SELECTED_OSQUERY_TABLE: return { ...state, - selectedOsqueryTable: find(osqueryTables, { name: action.tableName }), + selectedOsqueryTable: + find(osqueryTables, { name: action.tableName }) || + DEFAULT_OSQUERY_TABLE, }; case ACTIONS.SET_LAST_EDITED_QUERY_INFO: return { diff --git a/frontend/context/query.tsx b/frontend/context/query.tsx index 80efa923b9..b7e2127b91 100644 --- a/frontend/context/query.tsx +++ b/frontend/context/query.tsx @@ -3,14 +3,14 @@ import { find } from "lodash"; import { osqueryTables } from "utilities/osquery_tables"; import { DEFAULT_QUERY } from "utilities/constants"; -import { DEFAULT_OSQUERY_TABLE, IOsqueryTable } from "interfaces/osquery_table"; +import { DEFAULT_OSQUERY_TABLE, IOsQueryTable } from "interfaces/osquery_table"; type Props = { children: ReactNode; }; type InitialStateType = { - selectedOsqueryTable: IOsqueryTable; + selectedOsqueryTable: IOsQueryTable; lastEditedQueryId: number | null; lastEditedQueryName: string; lastEditedQueryDescription: string; @@ -45,7 +45,7 @@ const actions = { SET_LAST_EDITED_QUERY_INFO: "SET_LAST_EDITED_QUERY_INFO", } as const; -const reducer = (state: any, action: any) => { +const reducer = (state: InitialStateType, action: any) => { switch (action.type) { case actions.SET_SELECTED_OSQUERY_TABLE: return { diff --git a/frontend/docs/patterns.md b/frontend/docs/patterns.md index 3937f8d9a5..4b7c35d74a 100644 --- a/frontend/docs/patterns.md +++ b/frontend/docs/patterns.md @@ -8,6 +8,7 @@ should be discussed within the team and documented before merged. ## Table of contents - [Typing](#typing) + - [Utilities](#utilities) - [Components](#components) - [React Hooks](#react-hooks) - [React Context](#react-context) @@ -60,6 +61,23 @@ const functionWithTableName = (tableName: string): boolean => { }; ``` +## Utilities + +### Named exports + +We export individual utility functions and avoid exporting default objects when exporting utilities. + +```ts + +// good +export const replaceNewLines = () => {...} + +// bad +export default { + replaceNewLines +} +``` + ## Components ### React Functional Components diff --git a/frontend/interfaces/osquery_table.ts b/frontend/interfaces/osquery_table.ts index 0673e84366..bcfd886ea2 100644 --- a/frontend/interfaces/osquery_table.ts +++ b/frontend/interfaces/osquery_table.ts @@ -1,4 +1,5 @@ import PropTypes from "prop-types"; +import { IOsqueryPlatform } from "./platform"; export default PropTypes.shape({ columns: PropTypes.arrayOf( @@ -13,27 +14,37 @@ export default PropTypes.shape({ platform: PropTypes.string, }); -interface ITableColumn { - description: string; +export type ColumnType = + | "integer" + | "bigint" + | "double" + | "text" + | "unsigned_bigint"; + +export interface IQueryTableColumn { name: string; - type: string; + description: string; + type: ColumnType; hidden: boolean; required: boolean; index: boolean; + platforms?: IOsqueryPlatform[]; + requires_user_context?: boolean; } -export interface IOsqueryTable { - columns: ITableColumn[]; - description: string; +export interface IOsQueryTable { name: string; - platform?: string; + description: string; url: string; - platforms: string[]; + platforms: IOsqueryPlatform[]; evented: boolean; cacheable: boolean; + columns: IQueryTableColumn[]; + examples?: string; + notes?: string; } -export const DEFAULT_OSQUERY_TABLE: IOsqueryTable = { +export const DEFAULT_OSQUERY_TABLE: IOsQueryTable = { name: "users", description: "Local user accounts (including domain accounts that have logged on locally (Windows)).", diff --git a/frontend/utilities/constants.ts b/frontend/utilities/constants.ts index d5b8fe48b4..c3a3d047f4 100644 --- a/frontend/utilities/constants.ts +++ b/frontend/utilities/constants.ts @@ -1,5 +1,5 @@ import URL_PREFIX from "router/url_prefix"; -import { IOsqueryPlatform, IPlatformString } from "interfaces/platform"; +import { IOsqueryPlatform } from "interfaces/platform"; const { origin } = global.window.location; export const BASE_URL = `${origin}${URL_PREFIX}/api`; diff --git a/frontend/utilities/osquery_tables.ts b/frontend/utilities/osquery_tables.ts index e44cbb2fbb..e8661a890f 100644 --- a/frontend/utilities/osquery_tables.ts +++ b/frontend/utilities/osquery_tables.ts @@ -1,19 +1,16 @@ -import { flatMap, sortBy } from "lodash"; -// @ts-ignore -import osqueryTablesJSON from "../osquery_tables.json"; +import { flatMap } from "lodash"; -export const normalizeTables = ( - tablesJSON: Record | string -) => { - // osquery JSON needs less parsing than it used to - const parsedTables = - typeof tablesJSON === "object" ? tablesJSON : JSON.parse(tablesJSON); - return sortBy(parsedTables, (table) => { - return table.name; - }); -}; +import { IOsQueryTable } from "interfaces/osquery_table"; +import osqueryFleetTablesJSON from "../../schema/osquery_fleet_schema.json"; + +// Typecasting explicity here as we are adding more rigid types such as +// IOsqueryPlatform for platform names, instead of just any strings. +const queryTable = osqueryFleetTablesJSON as IOsQueryTable[]; + +export const osqueryTables = queryTable.sort((a, b) => { + return a.name >= b.name ? 1 : -1; +}); -export const osqueryTables = normalizeTables(osqueryTablesJSON); export const osqueryTableNames = flatMap(osqueryTables, (table) => { return table.name; }); diff --git a/package.json b/package.json index c94cdf70cd..a5693de33b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "react-dom": "16.14.0", "react-entity-getter": "0.0.8", "react-error-boundary": "3.1.4", + "react-markdown": "^8.0.3", "react-query": "3.34.16", "react-router": "3.2.6", "react-router-transition": "1.2.1", @@ -60,6 +61,7 @@ "react-table": "7.7.0", "react-tabs": "3.2.3", "react-tooltip": "4.2.21", + "remark-gfm": "^3.0.1", "select": "1.1.2", "sockjs-client": "1.6.1", "sqlite-parser": "1.0.1", @@ -172,7 +174,7 @@ "@typescript-eslint/parser": "4.33.0", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", - "babel-jest": "23.6.0", + "babel-jest": "^29.2.0", "babel-loader": "8.2.3", "css-loader": "1.0.1", "cypress": "9.5.1", diff --git a/tsconfig.json b/tsconfig.json index b1c8fa6127..a10655ca90 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ "target": "ES2019", "sourceMap": true, "jsx": "react", - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true }, "include": [ "./frontend/**/*" diff --git a/yarn.lock b/yarn.lock index cbb53ebfd2..de14e36260 100644 --- a/yarn.lock +++ b/yarn.lock @@ -45,6 +45,11 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== +"@babel/compat-data@^7.19.3": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.4.tgz#95c86de137bf0317f3a570e1b6e996b427299747" + integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz" @@ -88,6 +93,27 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@^7.11.6": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + "@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.10": version "7.18.12" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" @@ -97,6 +123,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.19.3", "@babel/generator@^7.19.4": + version "7.19.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.5.tgz#da3f4b301c8086717eee9cab14da91b1fa5dcca7" + integrity sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg== + dependencies: + "@babel/types" "^7.19.4" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" @@ -122,6 +157,16 @@ browserslist "^4.20.2" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + dependencies: + "@babel/compat-data" "^7.19.3" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.1", "@babel/helper-create-class-features-plugin@^7.17.6": version "7.17.6" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz" @@ -191,6 +236,14 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.9" +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" + "@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" @@ -226,6 +279,20 @@ "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz" @@ -289,11 +356,21 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" @@ -318,6 +395,15 @@ "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" +"@babel/helpers@^7.19.0": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.4.tgz#42154945f87b8148df7203a25c31ba9a73be46c5" + integrity sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.4" + "@babel/types" "^7.19.4" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" @@ -332,6 +418,11 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz" integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== +"@babel/parser@^7.19.3", "@babel/parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.4.tgz#03c4339d2b8971eb3beca5252bafd9b9f79db3dc" + integrity sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz" @@ -1205,6 +1296,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.4.tgz#f117820e18b1e59448a6c1fa9d0ff08f7ac459a8" + integrity sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.4" + "@babel/types" "^7.19.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.10" resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz" @@ -1214,6 +1321,15 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" + integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz" @@ -1534,6 +1650,13 @@ optionalDependencies: node-notifier "^8.0.0" +"@jest/schemas@^29.0.0": + version "29.0.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.0.0.tgz#5f47f5994dd4ef067fb7b4188ceac45f77fe952a" + integrity sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA== + dependencies: + "@sinclair/typebox" "^0.24.1" + "@jest/source-map@^26.6.2": version "26.6.2" resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz" @@ -1585,6 +1708,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.2.0.tgz#1c55ca549f64810351df999265a29f8ead51be15" + integrity sha512-NXMujGHy+B4DAj4dGnVPD0SIXlR2Z/N8Gp9h3mF66kcIRult1WWqY3/CEIrJcKviNWaFPYhZjCG2L3fteWzcUw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.2.0" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.2.0" + jest-regex-util "^29.2.0" + jest-util "^29.2.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + "@jest/types@^25.5.0": version "25.5.0" resolved "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz" @@ -1606,6 +1750,18 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jest/types@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.0.tgz#c0d1ef8bc1e4f4b358e7877e34157371e7881b0b" + integrity sha512-mfgpQz4Z2xGo37m6KD8xEpKelaVzvYVRijmLPePn9pxgaPEtX+SqIyPNzzoeCPXKYbB4L/wYSgXDL8o3Gop78Q== + dependencies: + "@jest/schemas" "^29.0.0" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" @@ -1615,6 +1771,11 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz" @@ -1625,6 +1786,11 @@ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.11" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" @@ -1638,6 +1804,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.15": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@mdx-js/mdx@^1.6.22": version "1.6.22" resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz" @@ -1743,6 +1917,11 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@sinclair/typebox@^0.24.1": + version "0.24.46" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.46.tgz#57501b58023776dbbae9e25619146286440be34c" + integrity sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw== + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" @@ -2636,6 +2815,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.4" resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" @@ -2670,6 +2860,13 @@ dependencies: cypress "*" +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + "@types/eslint-scope@^3.7.3": version "3.7.3" resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz" @@ -2709,7 +2906,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": version "4.1.5" resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== @@ -2805,6 +3002,11 @@ dependencies: "@types/unist" "*" +"@types/mdurl@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + "@types/memoize-one@5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/memoize-one/-/memoize-one-5.1.2.tgz#9bed4199822f6ae759b2a0de855f3254104709b5" @@ -2827,6 +3029,11 @@ resolved "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz" integrity sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node-fetch@^2.5.7": version "2.6.1" resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz" @@ -2880,6 +3087,11 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== +"@types/prop-types@^15.0.0": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + "@types/qs@^6.9.5": version "6.9.7" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" @@ -3046,6 +3258,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== + dependencies: + "@types/yargs-parser" "*" + "@types/yauzl@^2.9.1": version "2.9.2" resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz" @@ -3704,19 +3923,12 @@ aria-query@^5.0.0: resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz" integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -3769,11 +3981,6 @@ array-uniq@^1.0.1: resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" @@ -4001,7 +4208,7 @@ babel-eslint@9.0.0: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-generator@^6.18.0, babel-generator@^6.26.0: +babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz" integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== @@ -4147,14 +4354,6 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz" @@ -4169,6 +4368,19 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" +babel-jest@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.2.0.tgz#088624f037da90e69a06073305276cbd111d68a8" + integrity sha512-c8FkrW1chgcbyBqOo7jFGpQYfVnb43JqjQGV+C2r94k2rZJOukYOZ6+csAqKE4ms+PHc+yevnONxs27jQIxylw== + dependencies: + "@jest/transform" "^29.2.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.2.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-loader@8.2.3, babel-loader@^8.0.0: version "8.2.3" resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz" @@ -4237,17 +4449,7 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz" - integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -4258,11 +4460,6 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz" - integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= - babel-plugin-jest-hoist@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz" @@ -4273,6 +4470,16 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" +babel-plugin-jest-hoist@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" + integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" @@ -4373,7 +4580,7 @@ babel-plugin-syntax-function-bind@^6.8.0: resolved "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz" integrity sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y= -babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: +babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz" integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= @@ -4732,14 +4939,6 @@ babel-preset-es2015@^6.14.0: babel-plugin-transform-es2015-unicode-regex "^6.24.1" babel-plugin-transform-regenerator "^6.24.1" -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz" - integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - babel-preset-jest@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz" @@ -4748,6 +4947,14 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" +babel-preset-jest@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" + integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== + dependencies: + babel-plugin-jest-hoist "^29.2.0" + babel-preset-current-node-syntax "^1.0.0" + babel-preset-stage-0@^6.5.0: version "6.24.1" resolved "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz" @@ -4808,7 +5015,7 @@ babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^ core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0: +babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0: version "6.26.0" resolved "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz" integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= @@ -4819,7 +5026,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -4834,7 +5041,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -4854,6 +5061,11 @@ bail@^1.0.0: resolved "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz" integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -5019,15 +5231,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" @@ -5146,6 +5349,16 @@ browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.19.1, browserslist@^ node-releases "^2.0.6" update-browserslist-db "^1.0.5" +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== + dependencies: + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" @@ -5375,6 +5588,11 @@ caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001370: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz" integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== +caniuse-lite@^1.0.30001400: + version "1.0.30001419" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001419.tgz#3542722d57d567c8210d5e4d0f9f17336b776457" + integrity sha512-aFO1r+g6R7TW+PNQxKzjITwLOyDhVRLjW0LcwS/HCZGUUKTGNp9+IwLC4xyDSZBygVL/mxaFR3HIV6wEKQuSzw== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" @@ -5397,6 +5615,11 @@ ccount@^1.0.0: resolved "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" @@ -5448,6 +5671,11 @@ character-entities@^1.0.0: resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + character-reference-invalid@^1.0.0: version "1.1.4" resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" @@ -5721,6 +5949,11 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== +comma-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" + integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== + commander@^2.11.0, commander@^2.12.1, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" @@ -6257,6 +6490,13 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.0.0: + 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" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" @@ -6275,6 +6515,13 @@ decimal.js@^10.2.1: resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" @@ -6370,6 +6617,11 @@ depd@^1.1.2, depd@~1.1.1, depd@~1.1.2: resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" @@ -6445,6 +6697,11 @@ diff@^4.0.1: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" @@ -6603,6 +6860,11 @@ electron-to-chromium@^1.4.202: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.213.tgz" integrity sha512-+3DbGHGOCHTVB/Ms63bGqbyC1b8y7Fk86+7ltssB8NQrZtSCvZG6eooSl9U2Q0yw++fL2DpHKOdTU0NVEkFObg== +electron-to-chromium@^1.4.251: + version "1.4.282" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.282.tgz#02af3fd6051e97ac3388a4b11d455bc1ca49838f" + integrity sha512-Dki0WhHNh/br/Xi1vAkueU5mtIc9XLHcMKB6tNfQKk+kPG0TEUjRh5QEMAUbRp30/rYNMFD1zKKvbVzwq/4wmg== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" @@ -6985,6 +7247,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" @@ -7353,13 +7620,6 @@ exit@^0.1.2: resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" @@ -7373,13 +7633,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" @@ -7509,13 +7762,6 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" @@ -7589,7 +7835,7 @@ fast-json-parse@^1.0.3: resolved "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz" integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -7686,22 +7932,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" @@ -7861,13 +8091,6 @@ for-in@^1.0.1, for-in@^1.0.2: resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - for-own@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" @@ -8038,7 +8261,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.3.2: +fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -8179,21 +8402,6 @@ github-slugger@^1.0.0: resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz" integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" @@ -8574,6 +8782,11 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" + integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== + hastscript@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz" @@ -9240,18 +9453,6 @@ is-dom@^1.0.0: is-object "^1.0.1" is-window "^1.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - is-equal@^1.5.1: version "1.6.4" resolved "https://registry.npmjs.org/is-equal/-/is-equal-1.6.4.tgz" @@ -9291,11 +9492,6 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -9340,13 +9536,6 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - is-glob@^3.0.0, is-glob@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" @@ -9396,13 +9585,6 @@ is-number-object@^1.0.4, is-number-object@^1.0.6: dependencies: has-tostringtag "^1.0.0" -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - is-number@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" @@ -9410,11 +9592,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -9440,6 +9617,11 @@ is-plain-obj@^2.0.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" @@ -9452,21 +9634,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.1.2, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" @@ -9637,29 +9809,11 @@ isstream@~0.1.2: resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^1.10.1: - version "1.10.2" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" @@ -9876,6 +10030,25 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.2.0.tgz#2410f2ec93958e0bd894818de6c8056eb1b4d6fc" + integrity sha512-qu9lGFi7qJ8v37egS1phZZUJYiMyWnKwu83NlNT1qs50TbedIX2hFl+9ztsJ7U/ENaHwk1/Bs8fqOIQsScIRwg== + dependencies: + "@jest/types" "^29.2.0" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.2.0" + jest-util "^29.2.0" + jest-worker "^29.2.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-jasmine2@^26.6.3: version "26.6.3" resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz" @@ -9982,6 +10155,11 @@ jest-regex-util@^26.0.0: resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== + jest-resolve-dependencies@^26.6.3: version "26.6.3" resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz" @@ -10117,6 +10295,18 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" +jest-util@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.0.tgz#797935697e83a5722aeba401ed6cd01264295566" + integrity sha512-8M1dx12ujkBbnhwytrezWY0Ut79hbflwodE+qZKjxSRz5qt4xDp6dQQJaOCFvCmE0QJqp9KyEK33lpPNjnhevw== + dependencies: + "@jest/types" "^29.2.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^26.6.2: version "26.6.2" resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz" @@ -10160,6 +10350,16 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.2.0.tgz#b2bd1a81fc7a1ae79a500b05f5feb0d1c0b1a19e" + integrity sha512-mluOlMbRX1H59vGVzPcVg2ALfCausbBpxC8a2KWOzInhYHZibbHH8CB0C1JkmkpfurrkOYgF7FPmypuom1OM9A== + dependencies: + "@types/node" "*" + jest-util "^29.2.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" @@ -10412,6 +10612,11 @@ kleur@^3.0.3: resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + klona@^2.0.4: version "2.0.5" resolved "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" @@ -10632,6 +10837,11 @@ lolex@^5.0.0: dependencies: "@sinonjs/commons" "^1.7.0" +longest-streak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" + integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" @@ -10754,6 +10964,11 @@ markdown-escapes@^1.0.0: resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +markdown-table@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.2.tgz#9b59eb2c1b22fe71954a65ff512887065a7bb57c" + integrity sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA== + match-sorter@^6.0.2: version "6.3.1" resolved "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz" @@ -10762,11 +10977,6 @@ match-sorter@^6.0.2: "@babel/runtime" "^7.12.5" remove-accents "0.4.2" -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" @@ -10790,6 +11000,100 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-definitions@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz#2c1d684b28e53f84938bb06317944bee8efa79db" + integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-find-and-replace@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz#249901ef43c5f41d6e8a8d446b3b63b17e592d7c" + integrity sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw== + dependencies: + escape-string-regexp "^5.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" + integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-gfm-autolink-literal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz#4032dcbaddaef7d4f2f3768ed830475bb22d3970" + integrity sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg== + dependencies: + "@types/mdast" "^3.0.0" + ccount "^2.0.0" + mdast-util-find-and-replace "^2.0.0" + micromark-util-character "^1.0.0" + +mdast-util-gfm-footnote@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz#11d2d40a1a673a399c459e467fa85e00223191fe" + integrity sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + micromark-util-normalize-identifier "^1.0.0" + +mdast-util-gfm-strikethrough@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz#a4a74c36864ec6a6e3bbd31e1977f29beb475789" + integrity sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-table@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz#184e900979fe790745fc3dabf77a4114595fcd7f" + integrity sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag== + dependencies: + "@types/mdast" "^3.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-task-list-item@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz#6f35f09c6e2bcbe88af62fdea02ac199cc802c5c" + integrity sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz#16fcf70110ae689a06d77e8f4e346223b64a0ea6" + integrity sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ== + dependencies: + mdast-util-from-markdown "^1.0.0" + mdast-util-gfm-autolink-literal "^1.0.0" + mdast-util-gfm-footnote "^1.0.0" + mdast-util-gfm-strikethrough "^1.0.0" + mdast-util-gfm-table "^1.0.0" + mdast-util-gfm-task-list-item "^1.0.0" + mdast-util-to-markdown "^1.0.0" + mdast-util-to-hast@10.0.1: version "10.0.1" resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz" @@ -10804,11 +11108,46 @@ mdast-util-to-hast@10.0.1: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" +mdast-util-to-hast@^12.1.0: + version "12.2.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz#2bd8cf985a67c90c181eadcfdd8d31b8798ed9a1" + integrity sha512-lVkUttV9wqmdXFtEBXKcepvU/zfwbhjbkM5rxrquLW55dS1DfOrnAXCk5mg1be1sfY/WfMmayGy1NsbK1GLCYQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/mdurl" "^1.0.0" + mdast-util-definitions "^5.0.0" + mdurl "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + trim-lines "^3.0.0" + unist-builder "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz#38b6cdc8dc417de642a469c4fc2abdf8c931bd1e" + integrity sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + longest-streak "^3.0.0" + mdast-util-to-string "^3.0.0" + micromark-util-decode-string "^1.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + mdast-util-to-string@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" + integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== + mdurl@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" @@ -10923,24 +11262,280 @@ microevent.ts@~0.1.1: resolved "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= +micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" + integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-extension-gfm-autolink-literal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz#dc589f9c37eaff31a175bab49f12290edcf96058" + integrity sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-footnote@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz#cbfd8873b983e820c494498c6dac0105920818d5" + integrity sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg== + dependencies: + micromark-core-commonmark "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-strikethrough@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz#162232c284ffbedd8c74e59c1525bda217295e18" + integrity sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-table@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz#7b708b728f8dc4d95d486b9e7a2262f9cddbcbb4" + integrity sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-tagfilter@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz#fb2e303f7daf616db428bb6a26e18fda14a90a4d" + integrity sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-extension-gfm-task-list-item@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz#7683641df5d4a09795f353574d7f7f66e47b7fc4" + integrity sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz#40f3209216127a96297c54c67f5edc7ef2d1a2a2" + integrity sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA== + dependencies: + micromark-extension-gfm-autolink-literal "^1.0.0" + micromark-extension-gfm-footnote "^1.0.0" + micromark-extension-gfm-strikethrough "^1.0.0" + micromark-extension-gfm-table "^1.0.0" + micromark-extension-gfm-tagfilter "^1.0.0" + micromark-extension-gfm-task-list-item "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" + integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" + integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" + integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" + integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" + integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" + integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" + integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== + +micromark-util-html-tag-name@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497" + integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" + integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz#27dc875397cd15102274c6c6da5585d34d4f12b2" + integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" + integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" + integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== + +micromark@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.10.tgz#1eac156f0399d42736458a14b0ca2d86190b457c" + integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -11184,6 +11779,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -11412,7 +12012,7 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= @@ -11594,14 +12194,6 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" @@ -11883,16 +12475,6 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" @@ -12094,7 +12676,7 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.1, pirates@^4.0.5: +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -12296,11 +12878,6 @@ prepend-http@^1.0.0: resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" @@ -12438,6 +13015,11 @@ property-information@^5.0.0, property-information@^5.3.0: dependencies: xtend "^4.0.0" +property-information@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" + integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== + proxy-addr@~2.0.3, proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" @@ -12597,15 +13179,6 @@ ramda@^0.21.0: resolved "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz" integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -12771,6 +13344,32 @@ react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-markdown@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.3.tgz#e8aba0d2f5a1b2124d476ee1fff9448a2f57e4b3" + integrity sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + react-motion@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" @@ -13043,13 +13642,6 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" @@ -13137,6 +13729,16 @@ remark-footnotes@2.0.0: resolved "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz" integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== +remark-gfm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" + integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-gfm "^2.0.0" + micromark-extension-gfm "^2.0.0" + unified "^10.0.0" + remark-mdx@1.6.22: version "1.6.22" resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz" @@ -13173,6 +13775,25 @@ remark-parse@8.0.3: vfile-location "^3.0.0" xtend "^4.0.1" +remark-parse@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" + integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + remark-slug@^6.0.0: version "6.1.0" resolved "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz" @@ -13215,7 +13836,7 @@ repeat-element@^1.1.2: resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -13270,11 +13891,6 @@ require-from-string@^2.0.2: resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" @@ -13425,6 +14041,13 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" @@ -13955,6 +14578,11 @@ space-separated-tokens@^1.0.0: resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +space-separated-tokens@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" + integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== + spawn-wrap@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" @@ -14511,17 +15139,6 @@ terser@^5.3.4, terser@^5.7.2: source-map "~0.7.2" source-map-support "~0.5.20" -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz" - integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -14681,6 +15298,11 @@ trace-unhandled@2.0.1: dependencies: haxec "^2.0.1" +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" @@ -14711,6 +15333,11 @@ trough@^1.0.0: resolved "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + "true-case-path@^1.0.2": version "1.0.3" resolved "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz" @@ -14985,6 +15612,19 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" @@ -15014,21 +15654,45 @@ unist-builder@2.0.3, unist-builder@^2.0.0: resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz" integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== +unist-builder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" + integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-generated@^1.0.0: version "1.1.6" resolved "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz" integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== +unist-util-generated@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" + integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== + unist-util-is@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== +unist-util-is@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" + integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz" integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== +unist-util-position@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07" + integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-remove-position@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz" @@ -15050,6 +15714,13 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +unist-util-stringify-position@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" + integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-visit-parents@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz" @@ -15058,6 +15729,14 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" +unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz#868f353e6fce6bf8fa875b251b0f4fec3be709bb" + integrity sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit@2.0.3, unist-util-visit@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz" @@ -15067,6 +15746,15 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" +unist-util-visit@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.1.tgz#1c4842d70bd3df6cc545276f5164f933390a9aad" + integrity sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + universalify@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" @@ -15123,6 +15811,14 @@ update-browserslist-db@^1.0.5: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -15236,6 +15932,16 @@ uuid@^7.0.3: resolved "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz" integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + v8-compile-cache-lib@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz" @@ -15304,6 +16010,14 @@ vfile-message@^2.0.0: "@types/unist" "^2.0.0" unist-util-stringify-position "^2.0.0" +vfile-message@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" + integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile@^4.0.0: version "4.2.1" resolved "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" @@ -15314,6 +16028,16 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vfile@^5.0.0: + version "5.3.5" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.5.tgz#ec2e206b1414f561c85b7972bb1eeda8ab47ee61" + integrity sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" @@ -15333,7 +16057,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: version "1.0.8" resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -15756,6 +16480,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@^7.4.6: version "7.5.7" resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz" @@ -15920,3 +16652,8 @@ zwitch@^1.0.0: version "1.0.5" resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + +zwitch@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" + integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==