├── .npmrc
├── src
├── react-app-env.d.ts
├── setupTests.ts
├── index.tsx
├── demo
│ ├── CustomPreview.tsx
│ ├── Autosaving.tsx
│ ├── CleanupByButton.tsx
│ ├── CustomEventsAndCursorPosition.tsx
│ ├── UpdateableByHotKeys.tsx
│ ├── DynamicallyChangingEvents.tsx
│ ├── DynamicallyChangingOptions.tsx
│ ├── Demo.tsx
│ ├── UpdateUsingButtonWithAutofocus.tsx
│ └── GetInstance.tsx
├── index.test.tsx
└── SimpleMdeReact.tsx
├── favicon.ico
├── .editorconfig
├── netlify.toml
├── tsup.config.js
├── vite.config.ts
├── .gitignore
├── .github
└── workflows
│ └── playwright.yml
├── LICENSE
├── tests
└── smoke.spec.ts
├── tsconfig.json
├── package.json
├── playwright.config.ts
├── index.html
├── .pnpmfile.cjs
├── README.md
└── pnpm-lock.yaml
/.npmrc:
--------------------------------------------------------------------------------
1 | auto-install-peers=true
2 |
--------------------------------------------------------------------------------
/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RIP21/react-simplemde-editor/HEAD/favicon.ico
--------------------------------------------------------------------------------
/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | import "vitest-dom/extend-expect";
2 | // @ts-ignore
3 | globalThis.IS_REACT_ACT_ENVIRONMENT = true;
4 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*]
2 | indent_style = space
3 | end_of_line = lf
4 | indent_size = 2
5 | charset = utf-8
6 | trim_trailing_whitespace = true
7 |
8 | [*.md]
9 | max_line_length = 0
10 | trim_trailing_whitespace = false
11 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build.environment]
2 | NODE_VERSION = "16"
3 | NPM_FLAGS = "--version" # prevent Netlify npm install
4 | [build]
5 | publish = "./dist"
6 | command = "npm i pnpm -g && pnpm install && pnpm run build:demo"
7 |
--------------------------------------------------------------------------------
/tsup.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "tsup"
2 |
3 | // eslint-disable-next-line import/no-default-export
4 | export default defineConfig({
5 | entry: ["src/index.ts"],
6 | splitting: false,
7 | sourcemap: true,
8 | dts: true,
9 | format: ['cjs', "esm"]
10 | })
11 |
--------------------------------------------------------------------------------
/src/index.tsx:
--------------------------------------------------------------------------------
1 | import { createRoot } from "react-dom/client";
2 | import Demo from "./demo/Demo";
3 | import React, { StrictMode } from "react";
4 |
5 | const container = document.getElementById("root");
6 | const root = createRoot(container!);
7 |
8 | root.render(
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable import/no-default-export */
2 | import { defineConfig } from "vitest/config";
3 |
4 | export default defineConfig({
5 | server: {
6 | port: 3000
7 | },
8 | test: {
9 | globals: true,
10 | environment: "happy-dom",
11 | setupFiles: ["./src/setupTests.ts"],
12 | include: ["**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
13 | },
14 | });
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | *.log
3 | /lib
4 | /typings
5 | # See https://help.github.com/ignore-files/ for more about ignoring files.
6 |
7 | # dependencies
8 |
9 | # testing
10 | /coverage
11 |
12 | # production
13 | /build
14 |
15 | # misc
16 | .DS_Store
17 | .env.local
18 | .env.development.local
19 | .env.test.local
20 | .env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 | .idea
26 | /test-results/
27 | /playwright-report/
28 | /playwright/.cache/
29 | dist
30 |
--------------------------------------------------------------------------------
/src/demo/CustomPreview.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo } from "react";
2 | import SimpleMDE from "easymde";
3 | import SimpleMdeReact from "../SimpleMdeReact";
4 | import React from "react";
5 |
6 | export const CustomPreview = () => {
7 | const customRendererOptions = useMemo(() => {
8 | return {
9 | previewRender() {
10 | return `
Hello from preview renderer
`;
11 | },
12 | } as SimpleMDE.Options;
13 | }, []);
14 |
15 | return (
16 |
17 |
Custom preview
18 |
22 |
23 | );
24 | };
25 |
--------------------------------------------------------------------------------
/src/demo/Autosaving.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo } from "react";
2 | import SimpleMDEReact from "../SimpleMdeReact";
3 | import React from "react";
4 |
5 | export const Autosaving = () => {
6 | const delay = 1000;
7 | const autosavedValue = localStorage.getItem(`smde_demo`) || "Initial value";
8 | const anOptions = useMemo(() => {
9 | return {
10 | autosave: {
11 | enabled: true,
12 | uniqueId: "demo",
13 | delay,
14 | },
15 | };
16 | }, [delay]);
17 |
18 | return (
19 |
20 |
Autosaving after refresh (wait 1000ms after change)
21 |
22 |
23 | );
24 | };
25 |
--------------------------------------------------------------------------------
/src/demo/CleanupByButton.tsx:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | import { State } from "./UpdateUsingButtonWithAutofocus";
3 | import SimpleMdeReact from "../SimpleMdeReact";
4 | import React from "react";
5 |
6 | export const CleanupByButton = () => {
7 | const [value, setValue] = useState(
8 | "You can clean the input using button above."
9 | );
10 | const onChange = (value: string) => setValue(value);
11 |
12 | const handleCleanup = () => {
13 | setValue(``);
14 | };
15 |
16 | return (
17 |
18 |
Cleanup by button
19 |
23 | Click me to clean the editor below
24 |
25 |
26 |
27 |
28 | );
29 | };
30 |
--------------------------------------------------------------------------------
/src/demo/CustomEventsAndCursorPosition.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo, useState } from "react";
2 | import SimpleMdeReact, { SimpleMdeToCodemirrorEvents } from "../SimpleMdeReact";
3 | import { State } from "./UpdateUsingButtonWithAutofocus";
4 | import React from "react";
5 |
6 | export const CustomEventsAndCursorPosition = () => {
7 | const [cursorInfo, setCursorInfo] = useState({});
8 |
9 | const customEvents = useMemo(() => {
10 | return {
11 | cursorActivity: (instance) => {
12 | setCursorInfo(instance.getCursor());
13 | },
14 | } as SimpleMdeToCodemirrorEvents;
15 | }, []);
16 |
17 | return (
18 |
19 |
Custom events and cursor reading
20 |
21 |
25 |
26 | );
27 | };
28 |
--------------------------------------------------------------------------------
/.github/workflows/playwright.yml:
--------------------------------------------------------------------------------
1 | name: Playwright Tests
2 | on:
3 | push:
4 | branches: [ master ]
5 | pull_request:
6 | branches: [ master ]
7 | jobs:
8 | test:
9 | timeout-minutes: 10
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - uses: actions/setup-node@v2
14 | with:
15 | node-version: '16.x'
16 | - name: Install pnpm
17 | run: npm install pnpm -g
18 |
19 | - name: Install dependencies
20 | run: pnpm install
21 |
22 | - name: Install Playwright Browsers
23 | run: npx playwright install --with-deps
24 |
25 | - name: Run unit tests
26 | run: pnpm test
27 |
28 | - name: Run tsc
29 | run: pnpm tsc
30 |
31 | - name: Run Playwright tests
32 | run: pnpm test:e2e
33 |
34 | - uses: actions/upload-artifact@v2
35 | if: always()
36 | with:
37 | name: playwright-report
38 | path: playwright-report/
39 | retention-days: 5
40 |
41 |
--------------------------------------------------------------------------------
/src/demo/UpdateableByHotKeys.tsx:
--------------------------------------------------------------------------------
1 | import { useMemo, useState } from "react";
2 | import { KeyMap } from "codemirror";
3 | import { State } from "./UpdateUsingButtonWithAutofocus";
4 | import SimpleMdeReact from "../SimpleMdeReact";
5 | import React from "react";
6 |
7 | export const UpdateableByHotKeys = () => {
8 | const extraKeys = useMemo(() => {
9 | return {
10 | Up: function (cm) {
11 | cm.replaceSelection(" surprise. ");
12 | },
13 | Down: function (cm) {
14 | cm.replaceSelection(" surprise again! ");
15 | },
16 | };
17 | }, []);
18 |
19 | const [value, setValue] = useState(
20 | "Focus this text area and then use the Up and Down arrow keys to see the `extraKeys` prop in action"
21 | );
22 |
23 | const onChange = (value: string) => setValue(value);
24 |
25 | return (
26 |
27 |
Update by extra keys. E.g. arrow up and arrow down buttons
28 |
29 |
30 |
31 | );
32 | };
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Andrii Los
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/index.test.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @vitest-environment jsdom
3 | */
4 |
5 | import { act, render, screen } from "@testing-library/react";
6 | import React, { useState } from "react";
7 | import { SimpleMdeReact } from "./SimpleMdeReact";
8 | import userEvent from "@testing-library/user-event";
9 | import { expect, describe, it } from "vitest"
10 |
11 | // @ts-ignore
12 | Document.prototype.createRange = function () {
13 | return {
14 | setEnd: function () {},
15 | setStart: function () {},
16 | getBoundingClientRect: function () {
17 | return { right: 0 };
18 | },
19 | getClientRects: function () {
20 | return {
21 | length: 0,
22 | left: 0,
23 | right: 0,
24 | };
25 | },
26 | };
27 | };
28 |
29 | const Editor = () => {
30 | const [value, setValue] = useState("");
31 | return ;
32 | };
33 |
34 | describe("Renders", () => {
35 | it("successfully", async () => {
36 | act(() => {
37 | render( );
38 | });
39 | const editor = await screen.findByRole("textbox");
40 | await userEvent.type(editor, "hello");
41 | expect(screen.getByText("hello")).toBeDefined();
42 | });
43 | });
44 |
--------------------------------------------------------------------------------
/src/demo/DynamicallyChangingEvents.tsx:
--------------------------------------------------------------------------------
1 | import SimpleMdeReact, { SimpleMdeToCodemirrorEvents } from "../SimpleMdeReact";
2 | import { useState } from "react";
3 | import React from "react";
4 | import {State} from "./UpdateUsingButtonWithAutofocus";
5 |
6 | export const DynamicallyChangingEvents = () => {
7 | const [value, setValue] = useState(`Blur away to see initial event behavior`);
8 |
9 | const [events, setEvents] = useState({
10 | blur: (_) => {
11 | console.log("blur");
12 | setValue(`I'm initial event behavior`);
13 | },
14 | });
15 |
16 | return (
17 |
18 |
Dynamically changing event listeners
19 | {
21 | setEvents({
22 | blur: () => {
23 | setValue(
24 | "CHANGED"
25 | .split("")
26 | .reverse()
27 | .join(Math.ceil(Math.random() * 10).toString())
28 | );
29 | },
30 | });
31 | }}
32 | >
33 | Change event to a random one!
34 |
35 |
36 |
37 |
38 | );
39 | };
40 |
--------------------------------------------------------------------------------
/tests/smoke.spec.ts:
--------------------------------------------------------------------------------
1 | import { test as base } from "@playwright/test";
2 | import {
3 | locatorFixtures as fixtures,
4 | LocatorFixtures as TestingLibraryFixtures,
5 | } from "@playwright-testing-library/test/fixture";
6 |
7 | const test = base.extend(fixtures);
8 |
9 | const { expect } = test;
10 |
11 | test("Tests UpdateUsingButtonWithAutofocus behavior", async ({ screen, within }) => {
12 | await screen.goto("http://localhost:3000");
13 | const container = await screen.findByTestId("autofocus-no-spellchecker");
14 | const editor = await within(container).findByRole("textbox");
15 | await editor.fill("hello");
16 | const state = within(container).getByTestId("state")
17 | const editorContainer = within(container).getByTestId("autofocus-no-spellchecker-editor")
18 | expect(within(editorContainer).getByText("hello")).toBeDefined();
19 | expect(within(state).getByText("hello")).toBeDefined();
20 | const buttonToChangeValue = within(container).getByText("Click me to update the textValue outside of the editor")
21 | await buttonToChangeValue.click()
22 | expect(within(editorContainer).getByText("Changing text by setting new state.")).toBeDefined();
23 | expect(within(state).getByText("Changing text by setting new state.")).toBeDefined();
24 | });
25 |
--------------------------------------------------------------------------------
/src/demo/DynamicallyChangingOptions.tsx:
--------------------------------------------------------------------------------
1 | import SimpleMdeReact from "../SimpleMdeReact";
2 | import { useState } from "react";
3 | import { Options } from "easymde";
4 | import React from "react";
5 | import {State} from "./UpdateUsingButtonWithAutofocus";
6 |
7 | export const DynamicallyChangingOptions = () => {
8 | const [value, setValue] = useState(`Blur away to see initial event behavior`);
9 |
10 | const [options, setOptions] = useState({
11 | maxHeight: "50px",
12 | });
13 |
14 | return (
15 |
16 |
Dynamically changing options. Change max height
17 | {
19 | setOptions((it) => {
20 | return {
21 | maxHeight: Number(it.maxHeight?.split("px")[0]) + 10 + "px",
22 | };
23 | });
24 | }}
25 | >
26 | +
27 |
28 | {
30 | setOptions((it) => {
31 | return {
32 | maxHeight: Number(it.maxHeight?.split("px")[0]) - 10 + "px",
33 | };
34 | });
35 | }}
36 | >
37 | -
38 |
39 |
40 |
41 |
42 | );
43 | };
44 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs
3 | "include": ["src", "vite.config.ts"],
4 | "compilerOptions": {
5 | "module": "ES2020",
6 | "lib": ["dom", "esnext"],
7 | // output .d.ts declaration files for consumers
8 | "declaration": false,
9 | // output .js.map sourcemap files for consumers
10 | "sourceMap": true,
11 | // match output dir to input dir. e.g. dist/index instead of dist/src/index
12 | "baseUrl": "./src",
13 | // stricter type-checking for stronger correctness. Recommended by TS
14 | "strict": true,
15 | // linter checks for common issues
16 | "noImplicitReturns": true,
17 | "noFallthroughCasesInSwitch": true,
18 | // use Node's module resolution algorithm, instead of the legacy TS one
19 | "moduleResolution": "node",
20 | // transpile JSX to React.createElement
21 | "jsx": "react",
22 | // interop between ESM and CJS modules. Recommended by TS
23 | "esModuleInterop": true,
24 | // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS
25 | "skipLibCheck": true,
26 | // error out if import and file system have a casing mismatch. Recommended by TS
27 | "forceConsistentCasingInFileNames": true,
28 | "noEmit": true
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/demo/Demo.tsx:
--------------------------------------------------------------------------------
1 | import "easymde/dist/easymde.min.css";
2 | import { UpdateUsingButtonWithAutofocus } from "./UpdateUsingButtonWithAutofocus";
3 | import { Autosaving } from "./Autosaving";
4 | import { UpdateableByHotKeys } from "./UpdateableByHotKeys";
5 | import { CleanupByButton } from "./CleanupByButton";
6 | import { CustomPreview } from "./CustomPreview";
7 | import { CustomEventsAndCursorPosition } from "./CustomEventsAndCursorPosition";
8 | import { GetInstance } from "./GetInstance";
9 | import { DynamicallyChangingEvents } from "./DynamicallyChangingEvents";
10 | import { DynamicallyChangingOptions } from "./DynamicallyChangingOptions";
11 | import React from "react";
12 |
13 | const Demo = () => {
14 | return (
15 |
16 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | );
42 | };
43 |
44 | export default Demo;
45 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-simplemde-editor",
3 | "homepage": "https://react-simplemde-edtior.netlify.app/",
4 | "repository": "https://github.com/RIP21/react-simplemde-editor",
5 | "version": "5.2.0",
6 | "author": "Andrii Los",
7 | "contributors": [
8 | {
9 | "name": "Ben Lodge",
10 | "url": "https://github.com/benrlodge",
11 | "email": "benrlodge@gmail.com"
12 | }
13 | ],
14 | "license": "MIT",
15 | "main": "dist/SimpleMdeReact.js",
16 | "module": "dist/SimpleMdeReact.mjs",
17 | "typings": "dist/SimpleMdeReact.d.ts",
18 | "files": [
19 | "dist",
20 | "src"
21 | ],
22 | "scripts": {
23 | "build:lib": "tsup ./src/SimpleMdeReact.tsx",
24 | "prepare": "pnpm build:lib",
25 | "demo": "vite",
26 | "build:demo": "vite build",
27 | "test": "vitest",
28 | "test:e2e": "playwright test",
29 | "test:e2e:debug": "playwright test --debug",
30 | "tsc": "tsc"
31 | },
32 | "dependencies": {
33 | "@types/codemirror": "~5.60.5"
34 | },
35 | "peerDependencies": {
36 | "easymde": ">= 2.0.0 < 3.0.0",
37 | "react": ">=16.8.2",
38 | "react-dom": ">=16.8.2"
39 | },
40 | "devDependencies": {
41 | "@playwright-testing-library/test": "~4.5.0",
42 | "@playwright/test": "~1.26.1",
43 | "@testing-library/react": "~13.4.0",
44 | "@testing-library/user-event": "~14.4.3",
45 | "@types/codemirror": "~5.60.5",
46 | "@types/node": "~16.11.62",
47 | "@types/react": "~18.0.21",
48 | "@types/react-dom": "~18.0.6",
49 | "easymde": "~2.18.0",
50 | "happy-dom": "~6.0.4",
51 | "jsdom": "~20.0.0",
52 | "prettier": "~2.7.1",
53 | "react": "18.2.0",
54 | "react-dom": "18.2.0",
55 | "tsup": "~6.2.3",
56 | "typescript": "~4.8.4",
57 | "vite": "~3.1.4",
58 | "vitest": "0.23.4",
59 | "vitest-dom": "~0.0.4"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/demo/UpdateUsingButtonWithAutofocus.tsx:
--------------------------------------------------------------------------------
1 | import SimpleMdeReact, { SimpleMdeToCodemirrorEvents } from "../SimpleMdeReact";
2 | import { useMemo, useState } from "react";
3 | import SimpleMDE from "easymde";
4 | import React from "react";
5 |
6 | let counter = 1;
7 | export const State = (props: any) => {
8 | return (
9 |
10 | {JSON.stringify(props, null, 2)}
11 |
12 | );
13 | };
14 |
15 | const events = {
16 | focus: () => console.log("focus"),
17 | } as SimpleMdeToCodemirrorEvents;
18 |
19 | export const UpdateUsingButtonWithAutofocus = () => {
20 | const [value, setValue] = useState(
21 | "I am the initial value. Erase me, or try the button above."
22 | );
23 |
24 | const onChange = (value: string) => {
25 | setValue(value);
26 | };
27 |
28 | const handleTextChangeByButton = () => {
29 | setValue(`Changing text by setting new state. ${counter++}`);
30 | };
31 |
32 | const autofocusNoSpellcheckerOptions = useMemo(() => {
33 | return {
34 | autofocus: true,
35 | spellChecker: false,
36 | } as SimpleMDE.Options;
37 | }, []);
38 |
39 | return (
40 |
41 |
Autofocus spellchecker disabled, button updated, controlled
42 |
46 | Click me to update the textValue outside of the editor
47 |
48 |
49 | Update by button
50 |
57 |
58 | );
59 | };
60 |
--------------------------------------------------------------------------------
/src/demo/GetInstance.tsx:
--------------------------------------------------------------------------------
1 | import { useCallback, useEffect, useState } from "react";
2 | import SimpleMDE from "easymde";
3 | import SimpleMdeReact from "../SimpleMdeReact";
4 | import type { Editor, Position } from "codemirror";
5 | import React from "react";
6 |
7 | export const GetInstance = () => {
8 | // simple mde
9 | const [simpleMdeInstance, setMdeInstance] = useState(null);
10 |
11 | const getMdeInstanceCallback = useCallback((simpleMde: SimpleMDE) => {
12 | setMdeInstance(simpleMde);
13 | }, []);
14 |
15 | useEffect(() => {
16 | simpleMdeInstance &&
17 | console.info("Hey I'm editor instance!", simpleMdeInstance);
18 | }, [simpleMdeInstance]);
19 |
20 | // codemirror
21 | const [codemirrorInstance, setCodemirrorInstance] = useState(
22 | null
23 | );
24 | const getCmInstanceCallback = useCallback((editor: Editor) => {
25 | setCodemirrorInstance(editor);
26 | }, []);
27 |
28 | useEffect(() => {
29 | codemirrorInstance &&
30 | console.info("Hey I'm codemirror instance!", codemirrorInstance);
31 | }, [codemirrorInstance]);
32 |
33 | // line and cursor
34 | const [lineAndCursor, setLineAndCursor] = useState(null);
35 |
36 | const getLineAndCursorCallback = useCallback((position: Position) => {
37 | setLineAndCursor(position);
38 | }, []);
39 |
40 | useEffect(() => {
41 | lineAndCursor &&
42 | console.info("Hey I'm line and cursor info!", lineAndCursor);
43 | }, [lineAndCursor]);
44 |
45 | return (
46 |
47 |
Getting instance of Mde and codemirror and line and cursor info
48 |
54 |
55 | );
56 | };
57 |
--------------------------------------------------------------------------------
/playwright.config.ts:
--------------------------------------------------------------------------------
1 | import type { PlaywrightTestConfig } from '@playwright/test';
2 | import { devices } from '@playwright/test';
3 |
4 | /**
5 | * Read environment variables from file.
6 | * https://github.com/motdotla/dotenv
7 | */
8 | // require('dotenv').config();
9 |
10 | /**
11 | * See https://playwright.dev/docs/test-configuration.
12 | */
13 | const config: PlaywrightTestConfig = {
14 | testDir: './tests',
15 | /* Maximum time one test can run for. */
16 | timeout: 30 * 1000,
17 | expect: {
18 | /**
19 | * Maximum time expect() should wait for the condition to be met.
20 | * For example in `await expect(locator).toHaveText();`
21 | */
22 | timeout: 5000
23 | },
24 | /* Run tests in files in parallel */
25 | fullyParallel: true,
26 | /* Fail the build on CI if you accidentally left test.only in the source code. */
27 | forbidOnly: !!process.env.CI,
28 | /* Retry on CI only */
29 | retries: process.env.CI ? 2 : 0,
30 | /* Opt out of parallel tests on CI. */
31 | workers: process.env.CI ? 1 : undefined,
32 | /* Reporter to use. See https://playwright.dev/docs/test-reporters */
33 | reporter: 'html',
34 | /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
35 | use: {
36 | /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
37 | actionTimeout: 0,
38 | /* Base URL to use in actions like `await page.goto('/')`. */
39 | baseURL: 'http://localhost:3000',
40 |
41 | /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
42 | trace: 'on-first-retry',
43 | },
44 |
45 | /* Configure projects for major browsers */
46 | projects: [
47 | {
48 | name: 'chromium',
49 | use: {
50 | ...devices['Desktop Chrome'],
51 | },
52 | },
53 |
54 | {
55 | name: 'firefox',
56 | use: {
57 | ...devices['Desktop Firefox'],
58 | },
59 | },
60 |
61 | {
62 | name: 'webkit',
63 | use: {
64 | ...devices['Desktop Safari'],
65 | },
66 | },
67 | ],
68 |
69 | /* Folder for test artifacts such as screenshots, videos, traces, etc. */
70 | // outputDir: 'test-results/',
71 |
72 | /* Run your local dev server before starting the tests */
73 | webServer: {
74 | command: 'pnpm demo',
75 | port: 3000,
76 | },
77 | };
78 |
79 | export default config;
80 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 | react-simplemde-editor demo
13 |
14 |
15 |
24 |
33 |
34 |
35 | View the code
36 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/.pnpmfile.cjs:
--------------------------------------------------------------------------------
1 | "use strict"
2 |
3 | /**
4 | * When using the PNPM package manager, you can use pnpmfile.js to workaround
5 | * dependencies that have mistakes in their package.json file. (This feature is
6 | * functionally similar to Yarn's "resolutions".)
7 | *
8 | * For details, see the PNPM documentation:
9 | * https://pnpm.js.org/docs/en/hooks.html
10 | *
11 | * IMPORTANT: SINCE THIS FILE CONTAINS EXECUTABLE CODE, MODIFYING IT IS LIKELY TO INVALIDATE
12 | * ANY CACHED DEPENDENCY ANALYSIS. After any modification to pnpmfile.js, it's recommended to run
13 | * "rush update --full" so that PNPM will recalculate all version selections.
14 | * Or `pnpm install --fix-lockfile` for non Rush projects
15 | */
16 | module.exports = {
17 | hooks: {
18 | readPackage,
19 | },
20 | }
21 |
22 | /**
23 | * This hook is invoked during installation before a package's dependencies
24 | * are selected.
25 | * The `packageJson` parameter is the deserialized package.json
26 | * contents for the package that is about to be installed.
27 | * The `context` parameter provides a log() function.
28 | * The return value is the updated object.
29 | */
30 |
31 | const TYPES = {
32 | PEER: "peerDependencies",
33 | DEPS: "dependencies",
34 | }
35 |
36 | const prettyType = (type) => (type === TYPES.DEPS ? "dependency" : "peerDependency")
37 |
38 | function readPackage(packageJson, context) {
39 | function removeGlobal(type, name, noLog) {
40 | if (packageJson[type] && packageJson[type][name]) {
41 | !noLog &&
42 | context.log(`Removed "${name}" ${prettyType(type)} for ${packageJson.name}`)
43 | delete packageJson[type][name]
44 | }
45 | }
46 |
47 | function changeGlobal(type, name, ver, noLog) {
48 | if (packageJson[type] && packageJson[type][name]) {
49 | const originalVersion = packageJson[type][name]
50 | if (originalVersion !== ver) {
51 | !noLog &&
52 | context.log(
53 | `Changed "${name}" ${prettyType(
54 | type,
55 | )} from ${originalVersion} to ${ver} for ${packageJson.name}`,
56 | )
57 | packageJson[type][name] = ver
58 | }
59 | }
60 | }
61 |
62 | function add(type, forPackage, dep, ver, noLog) {
63 | if (packageJson.name === forPackage) {
64 | if (!packageJson[type]) {
65 | packageJson[type] = {}
66 | }
67 | !noLog && context.log(`Added "${dep}" ${prettyType(type)} for ${packageJson.name}`)
68 | packageJson[type][dep] = ver
69 | }
70 | }
71 |
72 | function remove(type, forPackage, dep, noLog) {
73 | if (packageJson.name === forPackage && !packageJson?.[type]?.[dep]) {
74 | context.log(
75 | `No ${type} "${dep}" in the package ${forPackage} to remove it. You sure about it?`,
76 | )
77 | } else if (packageJson.name === forPackage) {
78 | !noLog && context.log(`Removed "${dep}" dependency for "${packageJson.name}"`)
79 | delete packageJson[type][dep]
80 | }
81 | }
82 |
83 | function change(type, forPackage, dep, ver, noLog) {
84 | if (packageJson.name === forPackage && packageJson[type]) {
85 | if (!packageJson[type][dep]) {
86 | context.log(
87 | `No such ${type} in the package ${forPackage} to change it. You sure about it?`,
88 | )
89 | } else if (packageJson.name === forPackage) {
90 | const originalVersion = packageJson[type][dep]
91 | if (originalVersion !== ver) {
92 | !noLog &&
93 | context.log(
94 | `Changed "${dep}" ${prettyType(
95 | type,
96 | )} from ${originalVersion} to ${ver} for ${packageJson.name}`,
97 | )
98 | packageJson[type][dep] = ver
99 | }
100 | }
101 | }
102 | }
103 |
104 | change(TYPES.PEER, "vitest-dom", "vitest", "<1", true)
105 |
106 | return packageJson
107 | }
108 |
--------------------------------------------------------------------------------
/src/SimpleMdeReact.tsx:
--------------------------------------------------------------------------------
1 | import React, {
2 | useCallback,
3 | useEffect,
4 | useMemo,
5 | useRef,
6 | useState,
7 | } from "react";
8 | import SimpleMDE, { Options } from "easymde";
9 |
10 | import type { Editor, EditorEventMap, KeyMap, Position } from "codemirror";
11 | import { EditorChange } from "codemirror";
12 |
13 | let _id = 0;
14 |
15 | const generateId = () => `simplemde-editor-${++_id}`;
16 |
17 | export type DOMEvent =
18 | | "mousedown"
19 | | "dblclick"
20 | | "touchstart"
21 | | "contextmenu"
22 | | "keydown"
23 | | "keypress"
24 | | "keyup"
25 | | "cut"
26 | | "copy"
27 | | "paste"
28 | | "dragstart"
29 | | "dragenter"
30 | | "dragover"
31 | | "dragleave"
32 | | "drop";
33 |
34 | export type CopyEvents = {
35 | [TKey in string &
36 | DOMEvent &
37 | keyof DocumentAndElementEventHandlersEventMap as `${TKey}`]?: (
38 | instance: Editor,
39 | event: DocumentAndElementEventHandlersEventMap[TKey]
40 | ) => void;
41 | };
42 |
43 | export type GlobalEvents = {
44 | [TKey in string &
45 | DOMEvent &
46 | keyof GlobalEventHandlersEventMap as `${TKey}`]?: (
47 | instance: Editor,
48 | event: GlobalEventHandlersEventMap[TKey]
49 | ) => void;
50 | };
51 |
52 | export type DefaultEvent = (instance: Editor, ...args: any[]) => void;
53 |
54 | export type IndexEventsSignature = {
55 | [key: string]: DefaultEvent | undefined;
56 | };
57 |
58 | export interface SimpleMdeToCodemirrorEvents
59 | extends CopyEvents,
60 | GlobalEvents,
61 | IndexEventsSignature,
62 | Partial {}
63 |
64 | export type GetMdeInstance = (instance: SimpleMDE) => void;
65 | export type GetCodemirrorInstance = (instance: Editor) => void;
66 | export type GetLineAndCursor = (instance: Position) => void;
67 |
68 | export interface SimpleMDEReactProps
69 | extends Omit, "onChange"> {
70 | id?: string;
71 | onChange?: (value: string, changeObject?: EditorChange) => void;
72 | value?: string;
73 | extraKeys?: KeyMap;
74 | options?: SimpleMDE.Options;
75 | events?: SimpleMdeToCodemirrorEvents;
76 | getMdeInstance?: GetMdeInstance;
77 | getCodemirrorInstance?: GetCodemirrorInstance;
78 | getLineAndCursor?: GetLineAndCursor;
79 | placeholder?: string;
80 | textareaProps?: Omit<
81 | React.HTMLAttributes,
82 | "id" | "style" | "placeholder"
83 | >;
84 | }
85 |
86 | const useHandleEditorInstanceLifecycle = ({
87 | options,
88 | id,
89 | currentValueRef,
90 | textRef,
91 | }: {
92 | options?: Options;
93 | id: string;
94 | currentValueRef: React.MutableRefObject;
95 | textRef: HTMLTextAreaElement | null;
96 | }) => {
97 | const [editor, setEditor] = useState(null);
98 |
99 | const imageUploadCallback = useCallback(
100 | (
101 | file: File,
102 | onSuccess: (url: string) => void,
103 | onError: (error: string) => void
104 | ) => {
105 | const imageUpload = options?.imageUploadFunction;
106 | if (imageUpload) {
107 | const _onSuccess = (url: string) => {
108 | onSuccess(url);
109 | };
110 | imageUpload(file, _onSuccess, onError);
111 | }
112 | },
113 | [options?.imageUploadFunction]
114 | );
115 |
116 | const editorRef = useRef(editor);
117 | editorRef.current = editor;
118 |
119 | useEffect(() => {
120 | let editor: SimpleMDE;
121 | if (textRef) {
122 | const initialOptions = {
123 | element: textRef,
124 | initialValue: currentValueRef.current,
125 | };
126 | const imageUploadFunction = options?.imageUploadFunction
127 | ? imageUploadCallback
128 | : undefined;
129 | editor = new SimpleMDE(
130 | Object.assign({}, initialOptions, options, {
131 | imageUploadFunction,
132 | })
133 | );
134 | setEditor(editor);
135 | }
136 | return () => {
137 | editor?.toTextArea();
138 | editor?.cleanup();
139 | };
140 | }, [textRef, currentValueRef, id, imageUploadCallback, options]);
141 |
142 | const codemirror = useMemo(() => {
143 | return editor?.codemirror;
144 | }, [editor?.codemirror]) as Editor | undefined;
145 | return { editor, codemirror };
146 | };
147 |
148 | export const SimpleMdeReact = React.forwardRef<
149 | HTMLDivElement,
150 | SimpleMDEReactProps
151 | >((props, ref) => {
152 | const {
153 | events,
154 | value,
155 | options,
156 | children,
157 | extraKeys,
158 | getLineAndCursor,
159 | getMdeInstance,
160 | getCodemirrorInstance,
161 | onChange,
162 | id: anId,
163 | placeholder,
164 | textareaProps,
165 | ...rest
166 | } = props;
167 |
168 | const id = useMemo(() => anId ?? generateId(), [anId]);
169 |
170 | const elementWrapperRef = useRef(null);
171 | const nonEventChangeRef = useRef(true);
172 |
173 | // This is to not pass value as a dependency e.g. to keep event handlers referentially
174 | // stable and do not `off` and `on` on each value change
175 | // plus to avoid unnecessary EasyEde editor recreation on each value change while still, if it has to be remounted
176 | // due to options and other deps change, to preserve that last value and not the default one from the first render.
177 | const currentValueRef = useRef(value);
178 | currentValueRef.current = value;
179 |
180 | const [textRef, setTextRef] = useState(null);
181 | const { editor, codemirror } = useHandleEditorInstanceLifecycle({
182 | options,
183 | id,
184 | currentValueRef,
185 | textRef,
186 | });
187 |
188 | useEffect(() => {
189 | // If change comes from the event we don't need to update `SimpleMDE` value as it already has it
190 | // Otherwise we shall set it as it comes from `props` set from the outside. E.g. by some reset button and whatnot
191 | if (nonEventChangeRef.current) {
192 | editor?.value(value ?? "");
193 | }
194 | nonEventChangeRef.current = true;
195 | }, [editor, value]); // _: Editor | Event <===== is to please TS :)
196 | const onCodemirrorChangeHandler = useCallback(
197 | (_: Editor | Event, changeObject?: EditorChange) => {
198 | if (editor?.value() !== currentValueRef.current) {
199 | nonEventChangeRef.current = false;
200 | onChange?.(editor?.value() ?? "", changeObject);
201 | }
202 | },
203 | [editor, onChange]
204 | );
205 |
206 | useEffect(() => {
207 | // For some reason it doesn't work out of the box, this makes sure it's working correctly
208 | if (options?.autofocus) {
209 | codemirror?.focus();
210 | codemirror?.setCursor(codemirror?.lineCount(), 0);
211 | }
212 | }, [codemirror, options?.autofocus]);
213 |
214 | const getCursorCallback = useCallback(() => {
215 | // https://codemirror.net/doc/manual.html#api_selection
216 | codemirror && getLineAndCursor?.(codemirror.getDoc().getCursor());
217 | }, [codemirror, getLineAndCursor]);
218 |
219 | useEffect(() => {
220 | getCursorCallback();
221 | }, [getCursorCallback]);
222 |
223 | useEffect(() => {
224 | editor && getMdeInstance?.(editor);
225 | }, [editor, getMdeInstance]);
226 |
227 | useEffect(() => {
228 | codemirror && getCodemirrorInstance?.(codemirror);
229 | }, [codemirror, getCodemirrorInstance, getMdeInstance]);
230 |
231 | useEffect(() => {
232 | // https://codemirror.net/doc/manual.html#option_extraKeys
233 | if (extraKeys && codemirror) {
234 | codemirror.setOption(
235 | "extraKeys",
236 | Object.assign({}, codemirror.getOption("extraKeys"), extraKeys)
237 | );
238 | }
239 | }, [codemirror, extraKeys]);
240 |
241 | useEffect(() => {
242 | const toolbarNode =
243 | elementWrapperRef.current?.getElementsByClassName(
244 | "editor-toolbarNode"
245 | )[0];
246 | const handler = codemirror && onCodemirrorChangeHandler;
247 | if (handler) {
248 | toolbarNode?.addEventListener("click", handler);
249 | return () => {
250 | toolbarNode?.removeEventListener("click", handler);
251 | };
252 | }
253 | return () => {};
254 | }, [codemirror, onCodemirrorChangeHandler]);
255 |
256 | useEffect(() => {
257 | codemirror?.on("change", onCodemirrorChangeHandler);
258 | codemirror?.on("cursorActivity", getCursorCallback);
259 | return () => {
260 | codemirror?.off("change", onCodemirrorChangeHandler);
261 | codemirror?.off("cursorActivity", getCursorCallback);
262 | };
263 | }, [codemirror, getCursorCallback, onCodemirrorChangeHandler]);
264 |
265 | const prevEvents = useRef(events);
266 |
267 | useEffect(() => {
268 | const isNotFirstEffectRun = events !== prevEvents.current;
269 | isNotFirstEffectRun &&
270 | prevEvents.current &&
271 | Object.entries(prevEvents.current).forEach(([event, handler]) => {
272 | handler && codemirror?.off(event as keyof EditorEventMap, handler);
273 | });
274 |
275 | events &&
276 | Object.entries(events).forEach(([event, handler]) => {
277 | handler && codemirror?.on(event as keyof EditorEventMap, handler);
278 | });
279 | prevEvents.current = events;
280 | return () => {
281 | events &&
282 | Object.entries(events).forEach(([event, handler]) => {
283 | handler && codemirror?.off(event as keyof EditorEventMap, handler);
284 | });
285 | };
286 | }, [codemirror, events]);
287 |
288 | return (
289 | {
293 | if (typeof ref === "function") {
294 | ref(aRef);
295 | } else if (ref) {
296 | ref.current = aRef;
297 | }
298 | elementWrapperRef.current = aRef;
299 | }}
300 | >
301 |
308 |
309 | );
310 | });
311 |
312 | SimpleMdeReact.displayName = "SimpleMdeReact";
313 |
314 | export default SimpleMdeReact;
315 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React SimpleMDE (EasyMDE) Markdown Editor
2 |
3 | [![NPM version][npm-badge]][npm]
4 |
5 | React component wrapper for
6 | [EasyMDE (the most fresh SimpleMDE fork)](https://github.com/Ionaru/easy-markdown-editor).
7 |
8 | Only two dependencies, React (peer) and EasyMDE (peer).
9 |
10 | Built by [@RIP21](https://twitter.com/rip212) 👨💻
11 |
12 | - [New in v5](#new-in-v5)
13 | - [Install](#install)
14 | - [Demo](#demo)
15 | - [Usage](#usage)
16 | - [Controlled usage](#controlled-usage)
17 | - [Options](#options)
18 | - [Hotkeys](#hotkeys)
19 | - [Custom preview rendering example](#custom-preview-rendering-example)
20 | - [Events / Additional event listeners for events of CodeMirror](#events--additional-event-listeners-for-events-of-codemirror)
21 | - [Autosaving](#autosaving)
22 | - [Retrieve `easymde`, `codemirror` or `cursor` info to be able to manipulate it.](#retrieve-easymde-codemirror-or-cursor-info-to-be-able-to-manipulate-it)
23 | - [Basic testing](#basic-testing)
24 | - [API](#api)
25 | - [Props](#props)
26 | - [All exports list](#all-exports-list)
27 | - [Changelog](#changelog)
28 | - [New in v4](#new-in-v4)
29 | - [New in v3](#new-in-v3)
30 | - [New in v2](#new-in-v2)
31 |
32 | Table of contents generated with markdown-toc
33 |
34 | ## New in v5
35 |
36 | - [breaking] Full rewrite to hooks. Means more reactive so, probably, less bugs related with updates. Minimum React version required `>=16.8.2`
37 | - [breaking] `easymde` now a peer dependency, please install it manually
38 | - [breaking] `label` prop has been removed
39 | - [breaking] SSR safe nets removed, please make sure to import it dynamically
40 | - [breaking] `options` shall be memoized to prevent new instances from being created on each render and other related to that bugs (more on that below)
41 | - [potentially-breaking] Forwards `ref`, so you can easily get access to `div` wrapper by using `ref` prop.
42 | - [potentially-breaking] Lots of bugs fixed, examples updated
43 | - [potentially-breaking] `@babel/runtime` helpers are no longer inlined but imported.
44 |
45 | ## Install
46 |
47 | ```
48 | npm install --save react-simplemde-editor easymde
49 | ```
50 |
51 | Note: Possibly you may need to install `@babel/runtime`, try without it, but if you don't have any issues, then you shouldn't.
52 |
53 | ## Demo
54 |
55 | [Hosted demo](https://react-simplemde-edtior.netlify.com/)
56 |
57 | or to see it locally:
58 |
59 | ```
60 | git clone https://github.com/RIP21/react-simplemde-editor.git
61 | cd react-simplemde-editor
62 | yarn install
63 | yarn demo
64 | open browser at localhost:3000
65 | ```
66 |
67 | ## Usage
68 |
69 | View the [demo code](https://github.com/rip21/react-simplemde-editor/tree/master/src/demo) for more examples.
70 |
71 | All examples below are in TypeScript
72 |
73 | Uncontrolled usage
74 |
75 | ```tsx
76 | import React from "react";
77 | import SimpleMDE from "react-simplemde-editor";
78 | import "easymde/dist/easymde.min.css";
79 |
80 | ;
81 | ```
82 |
83 | ### Controlled usage
84 |
85 | ```tsx
86 | export const ControlledUsage = () => {
87 | const [value, setValue] = useState("Initial value");
88 |
89 | const onChange = useCallback((value: string) => {
90 | setValue(value);
91 | }, []);
92 |
93 | return ;
94 | };
95 | ```
96 |
97 | ### Options
98 |
99 | You can set API of [SimpleMDE options](https://github.com/Ionaru/easy-markdown-editor#configuration) which you pass down as a `options` prop.
100 | If you're using TypeScript it will be inferred by compiler.
101 |
102 | Note: if you don't specify a custom id it will automatically generate an id for you.
103 |
104 | Note that you need to `useMemo` to memoize `options` so they do not change on each rerender! It will affect behavior and performance
105 | because then on each render of the parent that renders `SimpleMdeReact` you'll get a new instance of the editor, which you definitely want to avoid!
106 | Also, if you change `options` on each `value` change you will lose focus.
107 | So, put `options` as a `const` outside of the component, or if `options` shall be partially or fully set by `props` make sure to `useMemo` in
108 | case of functional/hooks components, or class field for `class` based components.
109 | Slightly more on that here: [#164](https://github.com/RIP21/react-simplemde-editor/issues/164)
110 |
111 | ```tsx
112 | export const UsingOptions = () => {
113 | const [value, setValue] = useState("Initial");
114 |
115 | const onChange = useCallback((value: string) => {
116 | setValue(value);
117 | }, []);
118 |
119 | const autofocusNoSpellcheckerOptions = useMemo(() => {
120 | return {
121 | autofocus: true,
122 | spellChecker: false,
123 | } as SimpleMDE.Options;
124 | }, []);
125 |
126 | return (
127 |
132 | );
133 | };
134 | ```
135 |
136 | ### Hotkeys
137 |
138 | You can include key maps using the `extraKeys` prop.
139 | Read more at [CodeMirror extra keys](https://codemirror.net/doc/manual.html#option_extraKeys)
140 |
141 | ```tsx
142 | export const UpdateableByHotKeys = () => {
143 | const extraKeys = useMemo(() => {
144 | return {
145 | Up: function (cm) {
146 | cm.replaceSelection(" surprise. ");
147 | },
148 | Down: function (cm) {
149 | cm.replaceSelection(" surprise again! ");
150 | },
151 | };
152 | }, []);
153 |
154 | const [value, setValue] = useState("initial");
155 | const onChange = (value: string) => setValue(value);
156 |
157 | return (
158 |
159 | );
160 | };
161 | ```
162 |
163 | ### Custom preview rendering example
164 |
165 | ```tsx
166 | import ReactDOMServer from "react-dom/server";
167 |
168 | export const CustomPreview = () => {
169 | const customRendererOptions = useMemo(() => {
170 | return {
171 | previewRender() {
172 | return ReactDOMServer.renderToString(
173 |
180 | );
181 | },
182 | } as SimpleMDE.Options;
183 | }, []);
184 |
185 | return (
186 |
187 |
Custom preview
188 |
189 |
190 | );
191 | };
192 | ```
193 |
194 | ### Events / Additional event listeners for events of CodeMirror
195 |
196 | See full list of events [here](https://codemirror.net/doc/manual.html#events)
197 |
198 | ```tsx
199 | import { SimpleMdeReact } from "react-simplemde-editor";
200 | import type { SimpleMdeToCodemirrorEvents } from "react-simplemde-editor";
201 |
202 | export const CustomEventListeners = () => {
203 | const [value, setValue] = useState("Initial value");
204 |
205 | const onChange = useCallback((value: string) => {
206 | setValue(value);
207 | }, []);
208 |
209 | // Make sure to always `useMemo` all the `options` and `events` props to ensure best performance!
210 | const events = useMemo(() => {
211 | return {
212 | focus: () => console.log(value),
213 | } as SimpleMdeToCodemirrorEvents;
214 | }, []);
215 |
216 | return ;
217 | };
218 | ```
219 |
220 | ### Autosaving
221 |
222 | ```tsx
223 | export const Autosaving = () => {
224 | const delay = 1000;
225 | const autosavedValue = localStorage.getItem(`smde_demo`) || "Initial value";
226 | const anOptions = useMemo(() => {
227 | return {
228 | autosave: {
229 | enabled: true,
230 | uniqueId: "demo",
231 | delay,
232 | },
233 | };
234 | }, [delay]);
235 |
236 | return (
237 |
238 | );
239 | };
240 | ```
241 |
242 | ### Retrieve `easymde`, `codemirror` or `cursor` info to be able to manipulate it.
243 |
244 | ```tsx
245 | export const GetDifferentInstances = () => {
246 | // simple mde
247 | const [simpleMdeInstance, setMdeInstance] = useState(null);
248 |
249 | const getMdeInstanceCallback = useCallback((simpleMde: SimpleMDE) => {
250 | setMdeInstance(simpleMde);
251 | }, []);
252 |
253 | useEffect(() => {
254 | simpleMdeInstance &&
255 | console.info("Hey I'm editor instance!", simpleMdeInstance);
256 | }, [simpleMdeInstance]);
257 |
258 | // codemirror
259 | const [codemirrorInstance, setCodemirrorInstance] = useState(
260 | null
261 | );
262 | const getCmInstanceCallback = useCallback((editor: Editor) => {
263 | setCodemirrorInstance(editor);
264 | }, []);
265 |
266 | useEffect(() => {
267 | codemirrorInstance &&
268 | console.info("Hey I'm codemirror instance!", codemirrorInstance);
269 | }, [codemirrorInstance]);
270 |
271 | // line and cursor
272 | const [lineAndCursor, setLineAndCursor] = useState(null);
273 |
274 | const getLineAndCursorCallback = useCallback((position: Position) => {
275 | setLineAndCursor(position);
276 | }, []);
277 |
278 | useEffect(() => {
279 | lineAndCursor &&
280 | console.info("Hey I'm line and cursor info!", lineAndCursor);
281 | }, [lineAndCursor]);
282 |
283 | return (
284 |
285 |
Getting instance of Mde and codemirror and line and cursor info
286 |
292 |
293 | );
294 | };
295 | ```
296 |
297 | ### Basic testing
298 |
299 | Here is how you do it. It requires mock of certain browser pieces to work, but this is whole example.
300 |
301 | ```tsx
302 | import { act, render, screen } from "@testing-library/react";
303 | import { useState } from "react";
304 | import { SimpleMdeReact } from "react-simplemde-editor";
305 | import userEvent from "@testing-library/user-event";
306 |
307 | // @ts-ignore
308 | Document.prototype.createRange = function () {
309 | return {
310 | setEnd: function () {},
311 | setStart: function () {},
312 | getBoundingClientRect: function () {
313 | return { right: 0 };
314 | },
315 | getClientRects: function () {
316 | return {
317 | length: 0,
318 | left: 0,
319 | right: 0,
320 | };
321 | },
322 | };
323 | };
324 |
325 | const Editor = () => {
326 | const [value, setValue] = useState("");
327 | return ;
328 | };
329 |
330 | describe("Renders", () => {
331 | it("succesfully", async () => {
332 | act(() => {
333 | render( );
334 | });
335 | const editor = await screen.findByRole("textbox");
336 | userEvent.type(editor, "hello");
337 | expect(screen.getByText("hello")).toBeDefined();
338 | });
339 | });
340 | ```
341 |
342 | ## API
343 |
344 | ### Props
345 |
346 | ```tsx
347 | export interface SimpleMDEReactProps
348 | extends Omit, "onChange"> {
349 | id?: string;
350 | onChange?: (value: string, changeObject?: EditorChange) => void;
351 | value?: string;
352 | extraKeys?: KeyMap;
353 | options?: SimpleMDE.Options;
354 | events?: SimpleMdeToCodemirrorEvents;
355 | getMdeInstance?: GetMdeInstance;
356 | getCodemirrorInstance?: GetCodemirrorInstance;
357 | getLineAndCursor?: GetLineAndCursor;
358 | placeholder?: string;
359 | textareaProps?: Omit<
360 | React.HTMLAttributes,
361 | "id" | "style" | "placeholder"
362 | >;
363 | }
364 | ```
365 |
366 | ### All exports list
367 |
368 | `default` - SimpleMdeReact
369 | `SimpleMdeReact` - same as `default` but named
370 | **Types:**
371 | `SimpleMdeReactProps` - props of the component
372 | `DOMEvent` - certain events that are used to get events exported below
373 | `CopyEvents` - only copy codemirror events
374 | `GlobalEvents` - some other global codemirror events
375 | `DefaultEvent` - default codemirror event handler function
376 | `IndexEventsSignature` - index signature that expects string as key and returns `DefaultEvent`
377 | `SimpleMdeToCodemirrorEvents` - manually crafted events (based off `@types/codemirror@0.0.109` that `easymde` uses internally) +
378 | all the above merged together into whole mapping between Codemirror event names and actual handlers for
379 | `events` prop
380 | `GetMdeInstance` - signature of the callback function that retrieves mde instance
381 | `GetCodemirrorInstance` - signature of the callback function that retrieves codemirror instance
382 | `GetLineAndCursor` - signature of the callback function that retrieves line and cursor info
383 |
384 | ## Changelog
385 |
386 | ## New in v4
387 |
388 | - Now uses [EasyMDE (the most fresh SimpleMDE fork)](https://github.com/Ionaru/easy-markdown-editor)
389 | instead of `simplemde` itself. Possible breaking changes, so I bumped version to v4.
390 | - One obvious breaking change. Is how CSS is have to be imported. It used to be `simplemde/dist/simplemde.min.css` now it will be `easymde/dist/easymde.min.css`
391 |
392 | ## New in v3
393 |
394 | - The `initialValue` prop has been removed and replaced with a `value` prop, allowing direct changes to the value to be made after the component mounts.
395 | - v3.6.8 if rendering server-side, you can set static ids to avoid errors in rendering synchronization.
396 | - v3.6.17 TypeScript typings added.
397 | - v3.6.19 All props will be passed to the wrapper now (except a id, onChange and few others that are ignored)
398 | - v3.6.21 React 17 support (UNSAFE methods are no longer used)
399 |
400 | ## New in v2
401 |
402 | Version 1.0 did not have SimpleMDE options configured well, this readme reflects the changes made to better include options.
403 | This is still a very new project. Testing, feedback and PRs are welcome and appreciated.
404 |
405 | [npm-badge]: http://badge.fury.io/js/react-simplemde-editor.svg
406 | [npm]: http://badge.fury.io/js/react-simplemde-editor
407 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@playwright-testing-library/test': ~4.5.0
5 | '@playwright/test': ~1.26.1
6 | '@testing-library/react': ~13.4.0
7 | '@testing-library/user-event': ~14.4.3
8 | '@types/codemirror': ~5.60.5
9 | '@types/node': ~16.11.62
10 | '@types/react': ~18.0.21
11 | '@types/react-dom': ~18.0.6
12 | easymde: ~2.18.0
13 | happy-dom: ~6.0.4
14 | jsdom: ~20.0.0
15 | prettier: ~2.7.1
16 | react: 18.2.0
17 | react-dom: 18.2.0
18 | tsup: ~6.2.3
19 | typescript: ~4.8.4
20 | vite: ~3.1.4
21 | vitest: 0.23.4
22 | vitest-dom: ~0.0.4
23 |
24 | dependencies:
25 | '@types/codemirror': 5.60.5
26 |
27 | devDependencies:
28 | '@playwright-testing-library/test': 4.5.0_@playwright+test@1.26.1
29 | '@playwright/test': 1.26.1
30 | '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y
31 | '@testing-library/user-event': 14.4.3_znccgeejomvff3jrsk3ljovfpu
32 | '@types/node': 16.11.62
33 | '@types/react': 18.0.21
34 | '@types/react-dom': 18.0.6
35 | easymde: 2.18.0
36 | happy-dom: 6.0.4
37 | jsdom: 20.0.0
38 | prettier: 2.7.1
39 | react: 18.2.0
40 | react-dom: 18.2.0_react@18.2.0
41 | tsup: 6.2.3_typescript@4.8.4
42 | typescript: 4.8.4
43 | vite: 3.1.4
44 | vitest: 0.23.4_e3y3tk5wocdgktiwrgnxpnd3nq
45 | vitest-dom: 0.0.4_vitest@0.23.4
46 |
47 | packages:
48 |
49 | /@babel/code-frame/7.18.6:
50 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
51 | engines: {node: '>=6.9.0'}
52 | dependencies:
53 | '@babel/highlight': 7.18.6
54 | dev: true
55 |
56 | /@babel/helper-validator-identifier/7.19.1:
57 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
58 | engines: {node: '>=6.9.0'}
59 | dev: true
60 |
61 | /@babel/highlight/7.18.6:
62 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
63 | engines: {node: '>=6.9.0'}
64 | dependencies:
65 | '@babel/helper-validator-identifier': 7.19.1
66 | chalk: 2.4.2
67 | js-tokens: 4.0.0
68 | dev: true
69 |
70 | /@babel/runtime-corejs3/7.19.1:
71 | resolution: {integrity: sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==}
72 | engines: {node: '>=6.9.0'}
73 | dependencies:
74 | core-js-pure: 3.25.3
75 | regenerator-runtime: 0.13.9
76 | dev: true
77 |
78 | /@babel/runtime/7.19.0:
79 | resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==}
80 | engines: {node: '>=6.9.0'}
81 | dependencies:
82 | regenerator-runtime: 0.13.9
83 | dev: true
84 |
85 | /@esbuild/android-arm/0.15.10:
86 | resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==}
87 | engines: {node: '>=12'}
88 | cpu: [arm]
89 | os: [android]
90 | requiresBuild: true
91 | dev: true
92 | optional: true
93 |
94 | /@esbuild/linux-loong64/0.15.10:
95 | resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==}
96 | engines: {node: '>=12'}
97 | cpu: [loong64]
98 | os: [linux]
99 | requiresBuild: true
100 | dev: true
101 | optional: true
102 |
103 | /@jest/types/26.6.2:
104 | resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==}
105 | engines: {node: '>= 10.14.2'}
106 | dependencies:
107 | '@types/istanbul-lib-coverage': 2.0.4
108 | '@types/istanbul-reports': 3.0.1
109 | '@types/node': 16.11.62
110 | '@types/yargs': 15.0.14
111 | chalk: 4.1.2
112 | dev: true
113 |
114 | /@nodelib/fs.scandir/2.1.5:
115 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
116 | engines: {node: '>= 8'}
117 | dependencies:
118 | '@nodelib/fs.stat': 2.0.5
119 | run-parallel: 1.2.0
120 | dev: true
121 |
122 | /@nodelib/fs.stat/2.0.5:
123 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
124 | engines: {node: '>= 8'}
125 | dev: true
126 |
127 | /@nodelib/fs.walk/1.2.8:
128 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
129 | engines: {node: '>= 8'}
130 | dependencies:
131 | '@nodelib/fs.scandir': 2.1.5
132 | fastq: 1.13.0
133 | dev: true
134 |
135 | /@playwright-testing-library/test/4.5.0_@playwright+test@1.26.1:
136 | resolution: {integrity: sha512-jdGlDJyRhQ/fD10EuQr5D65aNzLn6rQIoVj6jVwXP6ebdr2PFiftf/zBF/rmCAcLo6XjHpE2MkSX59JvY+CCWA==}
137 | engines: {node: '>=12'}
138 | peerDependencies:
139 | '@playwright/test': ^1.12.0
140 | playwright: ^1.12.0
141 | peerDependenciesMeta:
142 | '@playwright/test':
143 | optional: true
144 | playwright:
145 | optional: true
146 | dependencies:
147 | '@playwright/test': 1.26.1
148 | '@testing-library/dom': 7.31.2
149 | wait-for-expect: 3.0.2
150 | dev: true
151 |
152 | /@playwright/test/1.26.1:
153 | resolution: {integrity: sha512-bNxyZASVt2adSZ9gbD7NCydzcb5JaI0OR9hc7s+nmPeH604gwp0zp17NNpwXY4c8nvuBGQQ9oGDx72LE+cUWvw==}
154 | engines: {node: '>=14'}
155 | hasBin: true
156 | dependencies:
157 | '@types/node': 16.11.62
158 | playwright-core: 1.26.1
159 | dev: true
160 |
161 | /@testing-library/dom/7.31.2:
162 | resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==}
163 | engines: {node: '>=10'}
164 | dependencies:
165 | '@babel/code-frame': 7.18.6
166 | '@babel/runtime': 7.19.0
167 | '@types/aria-query': 4.2.2
168 | aria-query: 4.2.2
169 | chalk: 4.1.2
170 | dom-accessibility-api: 0.5.14
171 | lz-string: 1.4.4
172 | pretty-format: 26.6.2
173 | dev: true
174 |
175 | /@testing-library/dom/8.18.1:
176 | resolution: {integrity: sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg==}
177 | engines: {node: '>=12'}
178 | dependencies:
179 | '@babel/code-frame': 7.18.6
180 | '@babel/runtime': 7.19.0
181 | '@types/aria-query': 4.2.2
182 | aria-query: 5.0.2
183 | chalk: 4.1.2
184 | dom-accessibility-api: 0.5.14
185 | lz-string: 1.4.4
186 | pretty-format: 27.5.1
187 | dev: true
188 |
189 | /@testing-library/react/13.4.0_biqbaboplfbrettd7655fr4n2y:
190 | resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==}
191 | engines: {node: '>=12'}
192 | peerDependencies:
193 | react: ^18.0.0
194 | react-dom: ^18.0.0
195 | dependencies:
196 | '@babel/runtime': 7.19.0
197 | '@testing-library/dom': 8.18.1
198 | '@types/react-dom': 18.0.6
199 | react: 18.2.0
200 | react-dom: 18.2.0_react@18.2.0
201 | dev: true
202 |
203 | /@testing-library/user-event/14.4.3_znccgeejomvff3jrsk3ljovfpu:
204 | resolution: {integrity: sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==}
205 | engines: {node: '>=12', npm: '>=6'}
206 | peerDependencies:
207 | '@testing-library/dom': '>=7.21.4'
208 | dependencies:
209 | '@testing-library/dom': 8.18.1
210 | dev: true
211 |
212 | /@tootallnate/once/2.0.0:
213 | resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
214 | engines: {node: '>= 10'}
215 | dev: true
216 |
217 | /@types/aria-query/4.2.2:
218 | resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==}
219 | dev: true
220 |
221 | /@types/chai-subset/1.3.3:
222 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
223 | dependencies:
224 | '@types/chai': 4.3.3
225 | dev: true
226 |
227 | /@types/chai/4.3.3:
228 | resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==}
229 | dev: true
230 |
231 | /@types/codemirror/5.60.5:
232 | resolution: {integrity: sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==}
233 | dependencies:
234 | '@types/tern': 0.23.4
235 |
236 | /@types/concat-stream/1.6.1:
237 | resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==}
238 | dependencies:
239 | '@types/node': 16.11.62
240 | dev: true
241 |
242 | /@types/estree/1.0.0:
243 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
244 |
245 | /@types/form-data/0.0.33:
246 | resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==}
247 | dependencies:
248 | '@types/node': 16.11.62
249 | dev: true
250 |
251 | /@types/istanbul-lib-coverage/2.0.4:
252 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
253 | dev: true
254 |
255 | /@types/istanbul-lib-report/3.0.0:
256 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
257 | dependencies:
258 | '@types/istanbul-lib-coverage': 2.0.4
259 | dev: true
260 |
261 | /@types/istanbul-reports/3.0.1:
262 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
263 | dependencies:
264 | '@types/istanbul-lib-report': 3.0.0
265 | dev: true
266 |
267 | /@types/marked/4.0.7:
268 | resolution: {integrity: sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==}
269 | dev: true
270 |
271 | /@types/node/10.17.60:
272 | resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
273 | dev: true
274 |
275 | /@types/node/16.11.62:
276 | resolution: {integrity: sha512-K/ggecSdwAAy2NUW4WKmF4Rc03GKbsfP+k326UWgckoS+Rzd2PaWbjk76dSmqdLQvLTJAO9axiTUJ6488mFsYQ==}
277 | dev: true
278 |
279 | /@types/node/8.10.66:
280 | resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==}
281 | dev: true
282 |
283 | /@types/prop-types/15.7.5:
284 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
285 | dev: true
286 |
287 | /@types/qs/6.9.7:
288 | resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
289 | dev: true
290 |
291 | /@types/react-dom/18.0.6:
292 | resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==}
293 | dependencies:
294 | '@types/react': 18.0.21
295 | dev: true
296 |
297 | /@types/react/18.0.21:
298 | resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==}
299 | dependencies:
300 | '@types/prop-types': 15.7.5
301 | '@types/scheduler': 0.16.2
302 | csstype: 3.1.1
303 | dev: true
304 |
305 | /@types/scheduler/0.16.2:
306 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
307 | dev: true
308 |
309 | /@types/tern/0.23.4:
310 | resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==}
311 | dependencies:
312 | '@types/estree': 1.0.0
313 |
314 | /@types/yargs-parser/21.0.0:
315 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
316 | dev: true
317 |
318 | /@types/yargs/15.0.14:
319 | resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==}
320 | dependencies:
321 | '@types/yargs-parser': 21.0.0
322 | dev: true
323 |
324 | /abab/2.0.6:
325 | resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
326 | dev: true
327 |
328 | /acorn-globals/6.0.0:
329 | resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==}
330 | dependencies:
331 | acorn: 7.4.1
332 | acorn-walk: 7.2.0
333 | dev: true
334 |
335 | /acorn-walk/7.2.0:
336 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
337 | engines: {node: '>=0.4.0'}
338 | dev: true
339 |
340 | /acorn/7.4.1:
341 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
342 | engines: {node: '>=0.4.0'}
343 | hasBin: true
344 | dev: true
345 |
346 | /acorn/8.8.0:
347 | resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==}
348 | engines: {node: '>=0.4.0'}
349 | hasBin: true
350 | dev: true
351 |
352 | /agent-base/6.0.2:
353 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
354 | engines: {node: '>= 6.0.0'}
355 | dependencies:
356 | debug: 4.3.4
357 | transitivePeerDependencies:
358 | - supports-color
359 | dev: true
360 |
361 | /ansi-regex/5.0.1:
362 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
363 | engines: {node: '>=8'}
364 | dev: true
365 |
366 | /ansi-styles/3.2.1:
367 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
368 | engines: {node: '>=4'}
369 | dependencies:
370 | color-convert: 1.9.3
371 | dev: true
372 |
373 | /ansi-styles/4.3.0:
374 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
375 | engines: {node: '>=8'}
376 | dependencies:
377 | color-convert: 2.0.1
378 | dev: true
379 |
380 | /ansi-styles/5.2.0:
381 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
382 | engines: {node: '>=10'}
383 | dev: true
384 |
385 | /any-promise/1.3.0:
386 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
387 | dev: true
388 |
389 | /anymatch/3.1.2:
390 | resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
391 | engines: {node: '>= 8'}
392 | dependencies:
393 | normalize-path: 3.0.0
394 | picomatch: 2.3.1
395 | dev: true
396 |
397 | /aria-query/4.2.2:
398 | resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
399 | engines: {node: '>=6.0'}
400 | dependencies:
401 | '@babel/runtime': 7.19.0
402 | '@babel/runtime-corejs3': 7.19.1
403 | dev: true
404 |
405 | /aria-query/5.0.2:
406 | resolution: {integrity: sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==}
407 | engines: {node: '>=6.0'}
408 | dev: true
409 |
410 | /array-union/2.1.0:
411 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
412 | engines: {node: '>=8'}
413 | dev: true
414 |
415 | /asap/2.0.6:
416 | resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
417 | dev: true
418 |
419 | /assertion-error/1.1.0:
420 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
421 | dev: true
422 |
423 | /asynckit/0.4.0:
424 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
425 | dev: true
426 |
427 | /balanced-match/1.0.2:
428 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
429 | dev: true
430 |
431 | /binary-extensions/2.2.0:
432 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
433 | engines: {node: '>=8'}
434 | dev: true
435 |
436 | /brace-expansion/1.1.11:
437 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
438 | dependencies:
439 | balanced-match: 1.0.2
440 | concat-map: 0.0.1
441 | dev: true
442 |
443 | /braces/3.0.2:
444 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
445 | engines: {node: '>=8'}
446 | dependencies:
447 | fill-range: 7.0.1
448 | dev: true
449 |
450 | /browser-process-hrtime/1.0.0:
451 | resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==}
452 | dev: true
453 |
454 | /buffer-from/1.1.2:
455 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
456 | dev: true
457 |
458 | /bundle-require/3.1.0_esbuild@0.15.10:
459 | resolution: {integrity: sha512-IIXtAO7fKcwPHNPt9kY/WNVJqy7NDy6YqJvv6ENH0TOZoJ+yjpEsn1w40WKZbR2ibfu5g1rfgJTvmFHpm5aOMA==}
460 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
461 | peerDependencies:
462 | esbuild: '>=0.13'
463 | dependencies:
464 | esbuild: 0.15.10
465 | load-tsconfig: 0.2.3
466 | dev: true
467 |
468 | /cac/6.7.14:
469 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
470 | engines: {node: '>=8'}
471 | dev: true
472 |
473 | /call-bind/1.0.2:
474 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
475 | dependencies:
476 | function-bind: 1.1.1
477 | get-intrinsic: 1.1.3
478 | dev: true
479 |
480 | /caseless/0.12.0:
481 | resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
482 | dev: true
483 |
484 | /chai/4.3.6:
485 | resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==}
486 | engines: {node: '>=4'}
487 | dependencies:
488 | assertion-error: 1.1.0
489 | check-error: 1.0.2
490 | deep-eql: 3.0.1
491 | get-func-name: 2.0.0
492 | loupe: 2.3.4
493 | pathval: 1.1.1
494 | type-detect: 4.0.8
495 | dev: true
496 |
497 | /chalk/2.4.2:
498 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
499 | engines: {node: '>=4'}
500 | dependencies:
501 | ansi-styles: 3.2.1
502 | escape-string-regexp: 1.0.5
503 | supports-color: 5.5.0
504 | dev: true
505 |
506 | /chalk/4.1.2:
507 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
508 | engines: {node: '>=10'}
509 | dependencies:
510 | ansi-styles: 4.3.0
511 | supports-color: 7.2.0
512 | dev: true
513 |
514 | /chalk/5.0.1:
515 | resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==}
516 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
517 | dev: true
518 |
519 | /check-error/1.0.2:
520 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
521 | dev: true
522 |
523 | /chokidar/3.5.3:
524 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
525 | engines: {node: '>= 8.10.0'}
526 | requiresBuild: true
527 | dependencies:
528 | anymatch: 3.1.2
529 | braces: 3.0.2
530 | glob-parent: 5.1.2
531 | is-binary-path: 2.1.0
532 | is-glob: 4.0.3
533 | normalize-path: 3.0.0
534 | readdirp: 3.6.0
535 | optionalDependencies:
536 | fsevents: 2.3.2
537 | dev: true
538 |
539 | /codemirror-spell-checker/1.1.2:
540 | resolution: {integrity: sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ==}
541 | dependencies:
542 | typo-js: 1.2.2
543 | dev: true
544 |
545 | /codemirror/5.65.9:
546 | resolution: {integrity: sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==}
547 | dev: true
548 |
549 | /color-convert/1.9.3:
550 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
551 | dependencies:
552 | color-name: 1.1.3
553 | dev: true
554 |
555 | /color-convert/2.0.1:
556 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
557 | engines: {node: '>=7.0.0'}
558 | dependencies:
559 | color-name: 1.1.4
560 | dev: true
561 |
562 | /color-name/1.1.3:
563 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
564 | dev: true
565 |
566 | /color-name/1.1.4:
567 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
568 | dev: true
569 |
570 | /combined-stream/1.0.8:
571 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
572 | engines: {node: '>= 0.8'}
573 | dependencies:
574 | delayed-stream: 1.0.0
575 | dev: true
576 |
577 | /commander/4.1.1:
578 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
579 | engines: {node: '>= 6'}
580 | dev: true
581 |
582 | /concat-map/0.0.1:
583 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
584 | dev: true
585 |
586 | /concat-stream/1.6.2:
587 | resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
588 | engines: {'0': node >= 0.8}
589 | dependencies:
590 | buffer-from: 1.1.2
591 | inherits: 2.0.4
592 | readable-stream: 2.3.7
593 | typedarray: 0.0.6
594 | dev: true
595 |
596 | /core-js-pure/3.25.3:
597 | resolution: {integrity: sha512-T/7qvgv70MEvRkZ8p6BasLZmOVYKzOaWNBEHAU8FmveCJkl4nko2quqPQOmy6AJIp5MBanhz9no3A94NoRb0XA==}
598 | requiresBuild: true
599 | dev: true
600 |
601 | /core-util-is/1.0.3:
602 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
603 | dev: true
604 |
605 | /cross-spawn/7.0.3:
606 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
607 | engines: {node: '>= 8'}
608 | dependencies:
609 | path-key: 3.1.1
610 | shebang-command: 2.0.0
611 | which: 2.0.2
612 | dev: true
613 |
614 | /css.escape/1.5.1:
615 | resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
616 | dev: true
617 |
618 | /cssom/0.3.8:
619 | resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
620 | dev: true
621 |
622 | /cssom/0.5.0:
623 | resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
624 | dev: true
625 |
626 | /cssstyle/2.3.0:
627 | resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
628 | engines: {node: '>=8'}
629 | dependencies:
630 | cssom: 0.3.8
631 | dev: true
632 |
633 | /csstype/3.1.1:
634 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
635 | dev: true
636 |
637 | /data-urls/3.0.2:
638 | resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
639 | engines: {node: '>=12'}
640 | dependencies:
641 | abab: 2.0.6
642 | whatwg-mimetype: 3.0.0
643 | whatwg-url: 11.0.0
644 | dev: true
645 |
646 | /debug/4.3.4:
647 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
648 | engines: {node: '>=6.0'}
649 | peerDependencies:
650 | supports-color: '*'
651 | peerDependenciesMeta:
652 | supports-color:
653 | optional: true
654 | dependencies:
655 | ms: 2.1.2
656 | dev: true
657 |
658 | /decimal.js/10.4.1:
659 | resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==}
660 | dev: true
661 |
662 | /deep-eql/3.0.1:
663 | resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==}
664 | engines: {node: '>=0.12'}
665 | dependencies:
666 | type-detect: 4.0.8
667 | dev: true
668 |
669 | /deep-is/0.1.4:
670 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
671 | dev: true
672 |
673 | /delayed-stream/1.0.0:
674 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
675 | engines: {node: '>=0.4.0'}
676 | dev: true
677 |
678 | /dir-glob/3.0.1:
679 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
680 | engines: {node: '>=8'}
681 | dependencies:
682 | path-type: 4.0.0
683 | dev: true
684 |
685 | /dom-accessibility-api/0.5.14:
686 | resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==}
687 | dev: true
688 |
689 | /domexception/4.0.0:
690 | resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
691 | engines: {node: '>=12'}
692 | dependencies:
693 | webidl-conversions: 7.0.0
694 | dev: true
695 |
696 | /easymde/2.18.0:
697 | resolution: {integrity: sha512-IxVVUxNWIoXLeqtBU4BLc+eS/ScYhT1Dcb6yF5Wchoj1iXAV+TIIDWx+NCaZhY7RcSHqDPKllbYq7nwGKILnoA==}
698 | dependencies:
699 | '@types/codemirror': 5.60.5
700 | '@types/marked': 4.0.7
701 | codemirror: 5.65.9
702 | codemirror-spell-checker: 1.1.2
703 | marked: 4.1.1
704 | dev: true
705 |
706 | /entities/4.4.0:
707 | resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==}
708 | engines: {node: '>=0.12'}
709 | dev: true
710 |
711 | /esbuild-android-64/0.15.10:
712 | resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==}
713 | engines: {node: '>=12'}
714 | cpu: [x64]
715 | os: [android]
716 | requiresBuild: true
717 | dev: true
718 | optional: true
719 |
720 | /esbuild-android-arm64/0.15.10:
721 | resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==}
722 | engines: {node: '>=12'}
723 | cpu: [arm64]
724 | os: [android]
725 | requiresBuild: true
726 | dev: true
727 | optional: true
728 |
729 | /esbuild-darwin-64/0.15.10:
730 | resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==}
731 | engines: {node: '>=12'}
732 | cpu: [x64]
733 | os: [darwin]
734 | requiresBuild: true
735 | dev: true
736 | optional: true
737 |
738 | /esbuild-darwin-arm64/0.15.10:
739 | resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==}
740 | engines: {node: '>=12'}
741 | cpu: [arm64]
742 | os: [darwin]
743 | requiresBuild: true
744 | dev: true
745 | optional: true
746 |
747 | /esbuild-freebsd-64/0.15.10:
748 | resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==}
749 | engines: {node: '>=12'}
750 | cpu: [x64]
751 | os: [freebsd]
752 | requiresBuild: true
753 | dev: true
754 | optional: true
755 |
756 | /esbuild-freebsd-arm64/0.15.10:
757 | resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==}
758 | engines: {node: '>=12'}
759 | cpu: [arm64]
760 | os: [freebsd]
761 | requiresBuild: true
762 | dev: true
763 | optional: true
764 |
765 | /esbuild-linux-32/0.15.10:
766 | resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==}
767 | engines: {node: '>=12'}
768 | cpu: [ia32]
769 | os: [linux]
770 | requiresBuild: true
771 | dev: true
772 | optional: true
773 |
774 | /esbuild-linux-64/0.15.10:
775 | resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==}
776 | engines: {node: '>=12'}
777 | cpu: [x64]
778 | os: [linux]
779 | requiresBuild: true
780 | dev: true
781 | optional: true
782 |
783 | /esbuild-linux-arm/0.15.10:
784 | resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==}
785 | engines: {node: '>=12'}
786 | cpu: [arm]
787 | os: [linux]
788 | requiresBuild: true
789 | dev: true
790 | optional: true
791 |
792 | /esbuild-linux-arm64/0.15.10:
793 | resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==}
794 | engines: {node: '>=12'}
795 | cpu: [arm64]
796 | os: [linux]
797 | requiresBuild: true
798 | dev: true
799 | optional: true
800 |
801 | /esbuild-linux-mips64le/0.15.10:
802 | resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==}
803 | engines: {node: '>=12'}
804 | cpu: [mips64el]
805 | os: [linux]
806 | requiresBuild: true
807 | dev: true
808 | optional: true
809 |
810 | /esbuild-linux-ppc64le/0.15.10:
811 | resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==}
812 | engines: {node: '>=12'}
813 | cpu: [ppc64]
814 | os: [linux]
815 | requiresBuild: true
816 | dev: true
817 | optional: true
818 |
819 | /esbuild-linux-riscv64/0.15.10:
820 | resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==}
821 | engines: {node: '>=12'}
822 | cpu: [riscv64]
823 | os: [linux]
824 | requiresBuild: true
825 | dev: true
826 | optional: true
827 |
828 | /esbuild-linux-s390x/0.15.10:
829 | resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==}
830 | engines: {node: '>=12'}
831 | cpu: [s390x]
832 | os: [linux]
833 | requiresBuild: true
834 | dev: true
835 | optional: true
836 |
837 | /esbuild-netbsd-64/0.15.10:
838 | resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==}
839 | engines: {node: '>=12'}
840 | cpu: [x64]
841 | os: [netbsd]
842 | requiresBuild: true
843 | dev: true
844 | optional: true
845 |
846 | /esbuild-openbsd-64/0.15.10:
847 | resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==}
848 | engines: {node: '>=12'}
849 | cpu: [x64]
850 | os: [openbsd]
851 | requiresBuild: true
852 | dev: true
853 | optional: true
854 |
855 | /esbuild-sunos-64/0.15.10:
856 | resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==}
857 | engines: {node: '>=12'}
858 | cpu: [x64]
859 | os: [sunos]
860 | requiresBuild: true
861 | dev: true
862 | optional: true
863 |
864 | /esbuild-windows-32/0.15.10:
865 | resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==}
866 | engines: {node: '>=12'}
867 | cpu: [ia32]
868 | os: [win32]
869 | requiresBuild: true
870 | dev: true
871 | optional: true
872 |
873 | /esbuild-windows-64/0.15.10:
874 | resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==}
875 | engines: {node: '>=12'}
876 | cpu: [x64]
877 | os: [win32]
878 | requiresBuild: true
879 | dev: true
880 | optional: true
881 |
882 | /esbuild-windows-arm64/0.15.10:
883 | resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==}
884 | engines: {node: '>=12'}
885 | cpu: [arm64]
886 | os: [win32]
887 | requiresBuild: true
888 | dev: true
889 | optional: true
890 |
891 | /esbuild/0.15.10:
892 | resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==}
893 | engines: {node: '>=12'}
894 | hasBin: true
895 | requiresBuild: true
896 | optionalDependencies:
897 | '@esbuild/android-arm': 0.15.10
898 | '@esbuild/linux-loong64': 0.15.10
899 | esbuild-android-64: 0.15.10
900 | esbuild-android-arm64: 0.15.10
901 | esbuild-darwin-64: 0.15.10
902 | esbuild-darwin-arm64: 0.15.10
903 | esbuild-freebsd-64: 0.15.10
904 | esbuild-freebsd-arm64: 0.15.10
905 | esbuild-linux-32: 0.15.10
906 | esbuild-linux-64: 0.15.10
907 | esbuild-linux-arm: 0.15.10
908 | esbuild-linux-arm64: 0.15.10
909 | esbuild-linux-mips64le: 0.15.10
910 | esbuild-linux-ppc64le: 0.15.10
911 | esbuild-linux-riscv64: 0.15.10
912 | esbuild-linux-s390x: 0.15.10
913 | esbuild-netbsd-64: 0.15.10
914 | esbuild-openbsd-64: 0.15.10
915 | esbuild-sunos-64: 0.15.10
916 | esbuild-windows-32: 0.15.10
917 | esbuild-windows-64: 0.15.10
918 | esbuild-windows-arm64: 0.15.10
919 | dev: true
920 |
921 | /escape-string-regexp/1.0.5:
922 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
923 | engines: {node: '>=0.8.0'}
924 | dev: true
925 |
926 | /escodegen/2.0.0:
927 | resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
928 | engines: {node: '>=6.0'}
929 | hasBin: true
930 | dependencies:
931 | esprima: 4.0.1
932 | estraverse: 5.3.0
933 | esutils: 2.0.3
934 | optionator: 0.8.3
935 | optionalDependencies:
936 | source-map: 0.6.1
937 | dev: true
938 |
939 | /esprima/4.0.1:
940 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
941 | engines: {node: '>=4'}
942 | hasBin: true
943 | dev: true
944 |
945 | /estraverse/5.3.0:
946 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
947 | engines: {node: '>=4.0'}
948 | dev: true
949 |
950 | /esutils/2.0.3:
951 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
952 | engines: {node: '>=0.10.0'}
953 | dev: true
954 |
955 | /execa/5.1.1:
956 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
957 | engines: {node: '>=10'}
958 | dependencies:
959 | cross-spawn: 7.0.3
960 | get-stream: 6.0.1
961 | human-signals: 2.1.0
962 | is-stream: 2.0.1
963 | merge-stream: 2.0.0
964 | npm-run-path: 4.0.1
965 | onetime: 5.1.2
966 | signal-exit: 3.0.7
967 | strip-final-newline: 2.0.0
968 | dev: true
969 |
970 | /fast-glob/3.2.12:
971 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
972 | engines: {node: '>=8.6.0'}
973 | dependencies:
974 | '@nodelib/fs.stat': 2.0.5
975 | '@nodelib/fs.walk': 1.2.8
976 | glob-parent: 5.1.2
977 | merge2: 1.4.1
978 | micromatch: 4.0.5
979 | dev: true
980 |
981 | /fast-levenshtein/2.0.6:
982 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
983 | dev: true
984 |
985 | /fastq/1.13.0:
986 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
987 | dependencies:
988 | reusify: 1.0.4
989 | dev: true
990 |
991 | /fill-range/7.0.1:
992 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
993 | engines: {node: '>=8'}
994 | dependencies:
995 | to-regex-range: 5.0.1
996 | dev: true
997 |
998 | /form-data/2.5.1:
999 | resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
1000 | engines: {node: '>= 0.12'}
1001 | dependencies:
1002 | asynckit: 0.4.0
1003 | combined-stream: 1.0.8
1004 | mime-types: 2.1.35
1005 | dev: true
1006 |
1007 | /form-data/4.0.0:
1008 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
1009 | engines: {node: '>= 6'}
1010 | dependencies:
1011 | asynckit: 0.4.0
1012 | combined-stream: 1.0.8
1013 | mime-types: 2.1.35
1014 | dev: true
1015 |
1016 | /fs.realpath/1.0.0:
1017 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1018 | dev: true
1019 |
1020 | /fsevents/2.3.2:
1021 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1022 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1023 | os: [darwin]
1024 | requiresBuild: true
1025 | dev: true
1026 | optional: true
1027 |
1028 | /function-bind/1.1.1:
1029 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1030 | dev: true
1031 |
1032 | /get-func-name/2.0.0:
1033 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
1034 | dev: true
1035 |
1036 | /get-intrinsic/1.1.3:
1037 | resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
1038 | dependencies:
1039 | function-bind: 1.1.1
1040 | has: 1.0.3
1041 | has-symbols: 1.0.3
1042 | dev: true
1043 |
1044 | /get-port/3.2.0:
1045 | resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==}
1046 | engines: {node: '>=4'}
1047 | dev: true
1048 |
1049 | /get-stream/6.0.1:
1050 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1051 | engines: {node: '>=10'}
1052 | dev: true
1053 |
1054 | /glob-parent/5.1.2:
1055 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1056 | engines: {node: '>= 6'}
1057 | dependencies:
1058 | is-glob: 4.0.3
1059 | dev: true
1060 |
1061 | /glob/7.1.6:
1062 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
1063 | dependencies:
1064 | fs.realpath: 1.0.0
1065 | inflight: 1.0.6
1066 | inherits: 2.0.4
1067 | minimatch: 3.1.2
1068 | once: 1.4.0
1069 | path-is-absolute: 1.0.1
1070 | dev: true
1071 |
1072 | /globby/11.1.0:
1073 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1074 | engines: {node: '>=10'}
1075 | dependencies:
1076 | array-union: 2.1.0
1077 | dir-glob: 3.0.1
1078 | fast-glob: 3.2.12
1079 | ignore: 5.2.0
1080 | merge2: 1.4.1
1081 | slash: 3.0.0
1082 | dev: true
1083 |
1084 | /happy-dom/6.0.4:
1085 | resolution: {integrity: sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==}
1086 | dependencies:
1087 | css.escape: 1.5.1
1088 | he: 1.2.0
1089 | node-fetch: 2.6.7
1090 | sync-request: 6.1.0
1091 | webidl-conversions: 7.0.0
1092 | whatwg-encoding: 2.0.0
1093 | whatwg-mimetype: 3.0.0
1094 | transitivePeerDependencies:
1095 | - encoding
1096 | dev: true
1097 |
1098 | /has-flag/3.0.0:
1099 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1100 | engines: {node: '>=4'}
1101 | dev: true
1102 |
1103 | /has-flag/4.0.0:
1104 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1105 | engines: {node: '>=8'}
1106 | dev: true
1107 |
1108 | /has-symbols/1.0.3:
1109 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1110 | engines: {node: '>= 0.4'}
1111 | dev: true
1112 |
1113 | /has/1.0.3:
1114 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1115 | engines: {node: '>= 0.4.0'}
1116 | dependencies:
1117 | function-bind: 1.1.1
1118 | dev: true
1119 |
1120 | /he/1.2.0:
1121 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
1122 | hasBin: true
1123 | dev: true
1124 |
1125 | /html-encoding-sniffer/3.0.0:
1126 | resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
1127 | engines: {node: '>=12'}
1128 | dependencies:
1129 | whatwg-encoding: 2.0.0
1130 | dev: true
1131 |
1132 | /http-basic/8.1.3:
1133 | resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==}
1134 | engines: {node: '>=6.0.0'}
1135 | dependencies:
1136 | caseless: 0.12.0
1137 | concat-stream: 1.6.2
1138 | http-response-object: 3.0.2
1139 | parse-cache-control: 1.0.1
1140 | dev: true
1141 |
1142 | /http-proxy-agent/5.0.0:
1143 | resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
1144 | engines: {node: '>= 6'}
1145 | dependencies:
1146 | '@tootallnate/once': 2.0.0
1147 | agent-base: 6.0.2
1148 | debug: 4.3.4
1149 | transitivePeerDependencies:
1150 | - supports-color
1151 | dev: true
1152 |
1153 | /http-response-object/3.0.2:
1154 | resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==}
1155 | dependencies:
1156 | '@types/node': 10.17.60
1157 | dev: true
1158 |
1159 | /https-proxy-agent/5.0.1:
1160 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
1161 | engines: {node: '>= 6'}
1162 | dependencies:
1163 | agent-base: 6.0.2
1164 | debug: 4.3.4
1165 | transitivePeerDependencies:
1166 | - supports-color
1167 | dev: true
1168 |
1169 | /human-signals/2.1.0:
1170 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1171 | engines: {node: '>=10.17.0'}
1172 | dev: true
1173 |
1174 | /iconv-lite/0.6.3:
1175 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1176 | engines: {node: '>=0.10.0'}
1177 | dependencies:
1178 | safer-buffer: 2.1.2
1179 | dev: true
1180 |
1181 | /ignore/5.2.0:
1182 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
1183 | engines: {node: '>= 4'}
1184 | dev: true
1185 |
1186 | /indent-string/4.0.0:
1187 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
1188 | engines: {node: '>=8'}
1189 | dev: true
1190 |
1191 | /inflight/1.0.6:
1192 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1193 | dependencies:
1194 | once: 1.4.0
1195 | wrappy: 1.0.2
1196 | dev: true
1197 |
1198 | /inherits/2.0.4:
1199 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1200 | dev: true
1201 |
1202 | /is-binary-path/2.1.0:
1203 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1204 | engines: {node: '>=8'}
1205 | dependencies:
1206 | binary-extensions: 2.2.0
1207 | dev: true
1208 |
1209 | /is-core-module/2.10.0:
1210 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
1211 | dependencies:
1212 | has: 1.0.3
1213 | dev: true
1214 |
1215 | /is-extglob/2.1.1:
1216 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1217 | engines: {node: '>=0.10.0'}
1218 | dev: true
1219 |
1220 | /is-glob/4.0.3:
1221 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1222 | engines: {node: '>=0.10.0'}
1223 | dependencies:
1224 | is-extglob: 2.1.1
1225 | dev: true
1226 |
1227 | /is-number/7.0.0:
1228 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1229 | engines: {node: '>=0.12.0'}
1230 | dev: true
1231 |
1232 | /is-potential-custom-element-name/1.0.1:
1233 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
1234 | dev: true
1235 |
1236 | /is-stream/2.0.1:
1237 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1238 | engines: {node: '>=8'}
1239 | dev: true
1240 |
1241 | /isarray/1.0.0:
1242 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1243 | dev: true
1244 |
1245 | /isexe/2.0.0:
1246 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1247 | dev: true
1248 |
1249 | /joycon/3.1.1:
1250 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
1251 | engines: {node: '>=10'}
1252 | dev: true
1253 |
1254 | /js-tokens/4.0.0:
1255 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1256 | dev: true
1257 |
1258 | /jsdom/20.0.0:
1259 | resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==}
1260 | engines: {node: '>=14'}
1261 | peerDependencies:
1262 | canvas: ^2.5.0
1263 | peerDependenciesMeta:
1264 | canvas:
1265 | optional: true
1266 | dependencies:
1267 | abab: 2.0.6
1268 | acorn: 8.8.0
1269 | acorn-globals: 6.0.0
1270 | cssom: 0.5.0
1271 | cssstyle: 2.3.0
1272 | data-urls: 3.0.2
1273 | decimal.js: 10.4.1
1274 | domexception: 4.0.0
1275 | escodegen: 2.0.0
1276 | form-data: 4.0.0
1277 | html-encoding-sniffer: 3.0.0
1278 | http-proxy-agent: 5.0.0
1279 | https-proxy-agent: 5.0.1
1280 | is-potential-custom-element-name: 1.0.1
1281 | nwsapi: 2.2.2
1282 | parse5: 7.1.1
1283 | saxes: 6.0.0
1284 | symbol-tree: 3.2.4
1285 | tough-cookie: 4.1.2
1286 | w3c-hr-time: 1.0.2
1287 | w3c-xmlserializer: 3.0.0
1288 | webidl-conversions: 7.0.0
1289 | whatwg-encoding: 2.0.0
1290 | whatwg-mimetype: 3.0.0
1291 | whatwg-url: 11.0.0
1292 | ws: 8.9.0
1293 | xml-name-validator: 4.0.0
1294 | transitivePeerDependencies:
1295 | - bufferutil
1296 | - supports-color
1297 | - utf-8-validate
1298 | dev: true
1299 |
1300 | /levn/0.3.0:
1301 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
1302 | engines: {node: '>= 0.8.0'}
1303 | dependencies:
1304 | prelude-ls: 1.1.2
1305 | type-check: 0.3.2
1306 | dev: true
1307 |
1308 | /lilconfig/2.0.6:
1309 | resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
1310 | engines: {node: '>=10'}
1311 | dev: true
1312 |
1313 | /lines-and-columns/1.2.4:
1314 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1315 | dev: true
1316 |
1317 | /load-tsconfig/0.2.3:
1318 | resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==}
1319 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1320 | dev: true
1321 |
1322 | /local-pkg/0.4.2:
1323 | resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==}
1324 | engines: {node: '>=14'}
1325 | dev: true
1326 |
1327 | /lodash-es/4.17.21:
1328 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
1329 | dev: true
1330 |
1331 | /lodash.sortby/4.7.0:
1332 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
1333 | dev: true
1334 |
1335 | /loose-envify/1.4.0:
1336 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1337 | hasBin: true
1338 | dependencies:
1339 | js-tokens: 4.0.0
1340 | dev: true
1341 |
1342 | /loupe/2.3.4:
1343 | resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==}
1344 | dependencies:
1345 | get-func-name: 2.0.0
1346 | dev: true
1347 |
1348 | /lz-string/1.4.4:
1349 | resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==}
1350 | hasBin: true
1351 | dev: true
1352 |
1353 | /marked/4.1.1:
1354 | resolution: {integrity: sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw==}
1355 | engines: {node: '>= 12'}
1356 | hasBin: true
1357 | dev: true
1358 |
1359 | /merge-stream/2.0.0:
1360 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1361 | dev: true
1362 |
1363 | /merge2/1.4.1:
1364 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1365 | engines: {node: '>= 8'}
1366 | dev: true
1367 |
1368 | /micromatch/4.0.5:
1369 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1370 | engines: {node: '>=8.6'}
1371 | dependencies:
1372 | braces: 3.0.2
1373 | picomatch: 2.3.1
1374 | dev: true
1375 |
1376 | /mime-db/1.52.0:
1377 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1378 | engines: {node: '>= 0.6'}
1379 | dev: true
1380 |
1381 | /mime-types/2.1.35:
1382 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1383 | engines: {node: '>= 0.6'}
1384 | dependencies:
1385 | mime-db: 1.52.0
1386 | dev: true
1387 |
1388 | /mimic-fn/2.1.0:
1389 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1390 | engines: {node: '>=6'}
1391 | dev: true
1392 |
1393 | /min-indent/1.0.1:
1394 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1395 | engines: {node: '>=4'}
1396 | dev: true
1397 |
1398 | /minimatch/3.1.2:
1399 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1400 | dependencies:
1401 | brace-expansion: 1.1.11
1402 | dev: true
1403 |
1404 | /ms/2.1.2:
1405 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1406 | dev: true
1407 |
1408 | /mz/2.7.0:
1409 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
1410 | dependencies:
1411 | any-promise: 1.3.0
1412 | object-assign: 4.1.1
1413 | thenify-all: 1.6.0
1414 | dev: true
1415 |
1416 | /nanoid/3.3.4:
1417 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
1418 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1419 | hasBin: true
1420 | dev: true
1421 |
1422 | /node-fetch/2.6.7:
1423 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
1424 | engines: {node: 4.x || >=6.0.0}
1425 | peerDependencies:
1426 | encoding: ^0.1.0
1427 | peerDependenciesMeta:
1428 | encoding:
1429 | optional: true
1430 | dependencies:
1431 | whatwg-url: 5.0.0
1432 | dev: true
1433 |
1434 | /normalize-path/3.0.0:
1435 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1436 | engines: {node: '>=0.10.0'}
1437 | dev: true
1438 |
1439 | /npm-run-path/4.0.1:
1440 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
1441 | engines: {node: '>=8'}
1442 | dependencies:
1443 | path-key: 3.1.1
1444 | dev: true
1445 |
1446 | /nwsapi/2.2.2:
1447 | resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==}
1448 | dev: true
1449 |
1450 | /object-assign/4.1.1:
1451 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1452 | engines: {node: '>=0.10.0'}
1453 | dev: true
1454 |
1455 | /object-inspect/1.12.2:
1456 | resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
1457 | dev: true
1458 |
1459 | /once/1.4.0:
1460 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1461 | dependencies:
1462 | wrappy: 1.0.2
1463 | dev: true
1464 |
1465 | /onetime/5.1.2:
1466 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1467 | engines: {node: '>=6'}
1468 | dependencies:
1469 | mimic-fn: 2.1.0
1470 | dev: true
1471 |
1472 | /optionator/0.8.3:
1473 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
1474 | engines: {node: '>= 0.8.0'}
1475 | dependencies:
1476 | deep-is: 0.1.4
1477 | fast-levenshtein: 2.0.6
1478 | levn: 0.3.0
1479 | prelude-ls: 1.1.2
1480 | type-check: 0.3.2
1481 | word-wrap: 1.2.3
1482 | dev: true
1483 |
1484 | /parse-cache-control/1.0.1:
1485 | resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==}
1486 | dev: true
1487 |
1488 | /parse5/7.1.1:
1489 | resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==}
1490 | dependencies:
1491 | entities: 4.4.0
1492 | dev: true
1493 |
1494 | /path-is-absolute/1.0.1:
1495 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1496 | engines: {node: '>=0.10.0'}
1497 | dev: true
1498 |
1499 | /path-key/3.1.1:
1500 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1501 | engines: {node: '>=8'}
1502 | dev: true
1503 |
1504 | /path-parse/1.0.7:
1505 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1506 | dev: true
1507 |
1508 | /path-type/4.0.0:
1509 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1510 | engines: {node: '>=8'}
1511 | dev: true
1512 |
1513 | /pathval/1.1.1:
1514 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
1515 | dev: true
1516 |
1517 | /picocolors/1.0.0:
1518 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
1519 | dev: true
1520 |
1521 | /picomatch/2.3.1:
1522 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1523 | engines: {node: '>=8.6'}
1524 | dev: true
1525 |
1526 | /pirates/4.0.5:
1527 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
1528 | engines: {node: '>= 6'}
1529 | dev: true
1530 |
1531 | /playwright-core/1.26.1:
1532 | resolution: {integrity: sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA==}
1533 | engines: {node: '>=14'}
1534 | hasBin: true
1535 | dev: true
1536 |
1537 | /postcss-load-config/3.1.4:
1538 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1539 | engines: {node: '>= 10'}
1540 | peerDependencies:
1541 | postcss: '>=8.0.9'
1542 | ts-node: '>=9.0.0'
1543 | peerDependenciesMeta:
1544 | postcss:
1545 | optional: true
1546 | ts-node:
1547 | optional: true
1548 | dependencies:
1549 | lilconfig: 2.0.6
1550 | yaml: 1.10.2
1551 | dev: true
1552 |
1553 | /postcss/8.4.17:
1554 | resolution: {integrity: sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==}
1555 | engines: {node: ^10 || ^12 || >=14}
1556 | dependencies:
1557 | nanoid: 3.3.4
1558 | picocolors: 1.0.0
1559 | source-map-js: 1.0.2
1560 | dev: true
1561 |
1562 | /prelude-ls/1.1.2:
1563 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
1564 | engines: {node: '>= 0.8.0'}
1565 | dev: true
1566 |
1567 | /prettier/2.7.1:
1568 | resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==}
1569 | engines: {node: '>=10.13.0'}
1570 | hasBin: true
1571 | dev: true
1572 |
1573 | /pretty-format/26.6.2:
1574 | resolution: {integrity: sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==}
1575 | engines: {node: '>= 10'}
1576 | dependencies:
1577 | '@jest/types': 26.6.2
1578 | ansi-regex: 5.0.1
1579 | ansi-styles: 4.3.0
1580 | react-is: 17.0.2
1581 | dev: true
1582 |
1583 | /pretty-format/27.5.1:
1584 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
1585 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
1586 | dependencies:
1587 | ansi-regex: 5.0.1
1588 | ansi-styles: 5.2.0
1589 | react-is: 17.0.2
1590 | dev: true
1591 |
1592 | /process-nextick-args/2.0.1:
1593 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1594 | dev: true
1595 |
1596 | /promise/8.2.0:
1597 | resolution: {integrity: sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==}
1598 | dependencies:
1599 | asap: 2.0.6
1600 | dev: true
1601 |
1602 | /psl/1.9.0:
1603 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
1604 | dev: true
1605 |
1606 | /punycode/2.1.1:
1607 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1608 | engines: {node: '>=6'}
1609 | dev: true
1610 |
1611 | /qs/6.10.3:
1612 | resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
1613 | engines: {node: '>=0.6'}
1614 | dependencies:
1615 | side-channel: 1.0.4
1616 | dev: true
1617 |
1618 | /querystringify/2.2.0:
1619 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
1620 | dev: true
1621 |
1622 | /queue-microtask/1.2.3:
1623 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1624 | dev: true
1625 |
1626 | /react-dom/18.2.0_react@18.2.0:
1627 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
1628 | peerDependencies:
1629 | react: ^18.2.0
1630 | dependencies:
1631 | loose-envify: 1.4.0
1632 | react: 18.2.0
1633 | scheduler: 0.23.0
1634 | dev: true
1635 |
1636 | /react-is/17.0.2:
1637 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
1638 | dev: true
1639 |
1640 | /react/18.2.0:
1641 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
1642 | engines: {node: '>=0.10.0'}
1643 | dependencies:
1644 | loose-envify: 1.4.0
1645 | dev: true
1646 |
1647 | /readable-stream/2.3.7:
1648 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1649 | dependencies:
1650 | core-util-is: 1.0.3
1651 | inherits: 2.0.4
1652 | isarray: 1.0.0
1653 | process-nextick-args: 2.0.1
1654 | safe-buffer: 5.1.2
1655 | string_decoder: 1.1.1
1656 | util-deprecate: 1.0.2
1657 | dev: true
1658 |
1659 | /readdirp/3.6.0:
1660 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1661 | engines: {node: '>=8.10.0'}
1662 | dependencies:
1663 | picomatch: 2.3.1
1664 | dev: true
1665 |
1666 | /redent/3.0.0:
1667 | resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
1668 | engines: {node: '>=8'}
1669 | dependencies:
1670 | indent-string: 4.0.0
1671 | strip-indent: 3.0.0
1672 | dev: true
1673 |
1674 | /regenerator-runtime/0.13.9:
1675 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==}
1676 | dev: true
1677 |
1678 | /requires-port/1.0.0:
1679 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
1680 | dev: true
1681 |
1682 | /resolve-from/5.0.0:
1683 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1684 | engines: {node: '>=8'}
1685 | dev: true
1686 |
1687 | /resolve/1.22.1:
1688 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
1689 | hasBin: true
1690 | dependencies:
1691 | is-core-module: 2.10.0
1692 | path-parse: 1.0.7
1693 | supports-preserve-symlinks-flag: 1.0.0
1694 | dev: true
1695 |
1696 | /reusify/1.0.4:
1697 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1698 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1699 | dev: true
1700 |
1701 | /rollup/2.78.1:
1702 | resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==}
1703 | engines: {node: '>=10.0.0'}
1704 | hasBin: true
1705 | optionalDependencies:
1706 | fsevents: 2.3.2
1707 | dev: true
1708 |
1709 | /rollup/2.79.1:
1710 | resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
1711 | engines: {node: '>=10.0.0'}
1712 | hasBin: true
1713 | optionalDependencies:
1714 | fsevents: 2.3.2
1715 | dev: true
1716 |
1717 | /run-parallel/1.2.0:
1718 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1719 | dependencies:
1720 | queue-microtask: 1.2.3
1721 | dev: true
1722 |
1723 | /safe-buffer/5.1.2:
1724 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1725 | dev: true
1726 |
1727 | /safer-buffer/2.1.2:
1728 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1729 | dev: true
1730 |
1731 | /saxes/6.0.0:
1732 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
1733 | engines: {node: '>=v12.22.7'}
1734 | dependencies:
1735 | xmlchars: 2.2.0
1736 | dev: true
1737 |
1738 | /scheduler/0.23.0:
1739 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1740 | dependencies:
1741 | loose-envify: 1.4.0
1742 | dev: true
1743 |
1744 | /shebang-command/2.0.0:
1745 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1746 | engines: {node: '>=8'}
1747 | dependencies:
1748 | shebang-regex: 3.0.0
1749 | dev: true
1750 |
1751 | /shebang-regex/3.0.0:
1752 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1753 | engines: {node: '>=8'}
1754 | dev: true
1755 |
1756 | /side-channel/1.0.4:
1757 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1758 | dependencies:
1759 | call-bind: 1.0.2
1760 | get-intrinsic: 1.1.3
1761 | object-inspect: 1.12.2
1762 | dev: true
1763 |
1764 | /signal-exit/3.0.7:
1765 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1766 | dev: true
1767 |
1768 | /slash/3.0.0:
1769 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1770 | engines: {node: '>=8'}
1771 | dev: true
1772 |
1773 | /source-map-js/1.0.2:
1774 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1775 | engines: {node: '>=0.10.0'}
1776 | dev: true
1777 |
1778 | /source-map/0.6.1:
1779 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1780 | engines: {node: '>=0.10.0'}
1781 | requiresBuild: true
1782 | dev: true
1783 | optional: true
1784 |
1785 | /source-map/0.8.0-beta.0:
1786 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
1787 | engines: {node: '>= 8'}
1788 | dependencies:
1789 | whatwg-url: 7.1.0
1790 | dev: true
1791 |
1792 | /string_decoder/1.1.1:
1793 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1794 | dependencies:
1795 | safe-buffer: 5.1.2
1796 | dev: true
1797 |
1798 | /strip-final-newline/2.0.0:
1799 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
1800 | engines: {node: '>=6'}
1801 | dev: true
1802 |
1803 | /strip-indent/3.0.0:
1804 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1805 | engines: {node: '>=8'}
1806 | dependencies:
1807 | min-indent: 1.0.1
1808 | dev: true
1809 |
1810 | /strip-literal/0.4.2:
1811 | resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==}
1812 | dependencies:
1813 | acorn: 8.8.0
1814 | dev: true
1815 |
1816 | /sucrase/3.27.0:
1817 | resolution: {integrity: sha512-IjpEeFzOWCGrB/e2DnPawkFajW6ONFFgs+lQT1+Ts5Z5ZM9gPnxpDh0q8tu7HVLt6IfRiUTbSsjfhqjHOP/cwQ==}
1818 | engines: {node: '>=8'}
1819 | hasBin: true
1820 | dependencies:
1821 | commander: 4.1.1
1822 | glob: 7.1.6
1823 | lines-and-columns: 1.2.4
1824 | mz: 2.7.0
1825 | pirates: 4.0.5
1826 | ts-interface-checker: 0.1.13
1827 | dev: true
1828 |
1829 | /supports-color/5.5.0:
1830 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1831 | engines: {node: '>=4'}
1832 | dependencies:
1833 | has-flag: 3.0.0
1834 | dev: true
1835 |
1836 | /supports-color/7.2.0:
1837 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1838 | engines: {node: '>=8'}
1839 | dependencies:
1840 | has-flag: 4.0.0
1841 | dev: true
1842 |
1843 | /supports-preserve-symlinks-flag/1.0.0:
1844 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1845 | engines: {node: '>= 0.4'}
1846 | dev: true
1847 |
1848 | /symbol-tree/3.2.4:
1849 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
1850 | dev: true
1851 |
1852 | /sync-request/6.1.0:
1853 | resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==}
1854 | engines: {node: '>=8.0.0'}
1855 | dependencies:
1856 | http-response-object: 3.0.2
1857 | sync-rpc: 1.3.6
1858 | then-request: 6.0.2
1859 | dev: true
1860 |
1861 | /sync-rpc/1.3.6:
1862 | resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==}
1863 | dependencies:
1864 | get-port: 3.2.0
1865 | dev: true
1866 |
1867 | /then-request/6.0.2:
1868 | resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==}
1869 | engines: {node: '>=6.0.0'}
1870 | dependencies:
1871 | '@types/concat-stream': 1.6.1
1872 | '@types/form-data': 0.0.33
1873 | '@types/node': 8.10.66
1874 | '@types/qs': 6.9.7
1875 | caseless: 0.12.0
1876 | concat-stream: 1.6.2
1877 | form-data: 2.5.1
1878 | http-basic: 8.1.3
1879 | http-response-object: 3.0.2
1880 | promise: 8.2.0
1881 | qs: 6.10.3
1882 | dev: true
1883 |
1884 | /thenify-all/1.6.0:
1885 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
1886 | engines: {node: '>=0.8'}
1887 | dependencies:
1888 | thenify: 3.3.1
1889 | dev: true
1890 |
1891 | /thenify/3.3.1:
1892 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
1893 | dependencies:
1894 | any-promise: 1.3.0
1895 | dev: true
1896 |
1897 | /tinybench/2.2.1:
1898 | resolution: {integrity: sha512-VxB1P8DUhpCC1j2WtKgFYpv3SwU7vtnfmG29cK7hXcqyD7lLiq6SYCVpDceoAT99mvTN+V8Ay4OdtZQbB72+Sw==}
1899 | dev: true
1900 |
1901 | /tinypool/0.3.0:
1902 | resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==}
1903 | engines: {node: '>=14.0.0'}
1904 | dev: true
1905 |
1906 | /tinyspy/1.0.2:
1907 | resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==}
1908 | engines: {node: '>=14.0.0'}
1909 | dev: true
1910 |
1911 | /to-regex-range/5.0.1:
1912 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1913 | engines: {node: '>=8.0'}
1914 | dependencies:
1915 | is-number: 7.0.0
1916 | dev: true
1917 |
1918 | /tough-cookie/4.1.2:
1919 | resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==}
1920 | engines: {node: '>=6'}
1921 | dependencies:
1922 | psl: 1.9.0
1923 | punycode: 2.1.1
1924 | universalify: 0.2.0
1925 | url-parse: 1.5.10
1926 | dev: true
1927 |
1928 | /tr46/0.0.3:
1929 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
1930 | dev: true
1931 |
1932 | /tr46/1.0.1:
1933 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
1934 | dependencies:
1935 | punycode: 2.1.1
1936 | dev: true
1937 |
1938 | /tr46/3.0.0:
1939 | resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
1940 | engines: {node: '>=12'}
1941 | dependencies:
1942 | punycode: 2.1.1
1943 | dev: true
1944 |
1945 | /tree-kill/1.2.2:
1946 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
1947 | hasBin: true
1948 | dev: true
1949 |
1950 | /ts-interface-checker/0.1.13:
1951 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
1952 | dev: true
1953 |
1954 | /tsup/6.2.3_typescript@4.8.4:
1955 | resolution: {integrity: sha512-J5Pu2Dx0E1wlpIEsVFv9ryzP1pZ1OYsJ2cBHZ7GrKteytNdzaSz5hmLX7/nAxtypq+jVkVvA79d7S83ETgHQ5w==}
1956 | engines: {node: '>=14'}
1957 | hasBin: true
1958 | peerDependencies:
1959 | '@swc/core': ^1
1960 | postcss: ^8.4.12
1961 | typescript: ^4.1.0
1962 | peerDependenciesMeta:
1963 | '@swc/core':
1964 | optional: true
1965 | postcss:
1966 | optional: true
1967 | typescript:
1968 | optional: true
1969 | dependencies:
1970 | bundle-require: 3.1.0_esbuild@0.15.10
1971 | cac: 6.7.14
1972 | chokidar: 3.5.3
1973 | debug: 4.3.4
1974 | esbuild: 0.15.10
1975 | execa: 5.1.1
1976 | globby: 11.1.0
1977 | joycon: 3.1.1
1978 | postcss-load-config: 3.1.4
1979 | resolve-from: 5.0.0
1980 | rollup: 2.79.1
1981 | source-map: 0.8.0-beta.0
1982 | sucrase: 3.27.0
1983 | tree-kill: 1.2.2
1984 | typescript: 4.8.4
1985 | transitivePeerDependencies:
1986 | - supports-color
1987 | - ts-node
1988 | dev: true
1989 |
1990 | /type-check/0.3.2:
1991 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
1992 | engines: {node: '>= 0.8.0'}
1993 | dependencies:
1994 | prelude-ls: 1.1.2
1995 | dev: true
1996 |
1997 | /type-detect/4.0.8:
1998 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
1999 | engines: {node: '>=4'}
2000 | dev: true
2001 |
2002 | /typedarray/0.0.6:
2003 | resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
2004 | dev: true
2005 |
2006 | /typescript/4.8.4:
2007 | resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
2008 | engines: {node: '>=4.2.0'}
2009 | hasBin: true
2010 | dev: true
2011 |
2012 | /typo-js/1.2.2:
2013 | resolution: {integrity: sha512-C7pYBQK17EjSg8tVNY91KHdUt5Nf6FMJ+c3js076quPmBML57PmNMzAcIq/2kf/hSYtFABNDIYNYlJRl5BJhGw==}
2014 | dev: true
2015 |
2016 | /universalify/0.2.0:
2017 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
2018 | engines: {node: '>= 4.0.0'}
2019 | dev: true
2020 |
2021 | /url-parse/1.5.10:
2022 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
2023 | dependencies:
2024 | querystringify: 2.2.0
2025 | requires-port: 1.0.0
2026 | dev: true
2027 |
2028 | /util-deprecate/1.0.2:
2029 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
2030 | dev: true
2031 |
2032 | /vite/3.1.4:
2033 | resolution: {integrity: sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==}
2034 | engines: {node: ^14.18.0 || >=16.0.0}
2035 | hasBin: true
2036 | peerDependencies:
2037 | less: '*'
2038 | sass: '*'
2039 | stylus: '*'
2040 | terser: ^5.4.0
2041 | peerDependenciesMeta:
2042 | less:
2043 | optional: true
2044 | sass:
2045 | optional: true
2046 | stylus:
2047 | optional: true
2048 | terser:
2049 | optional: true
2050 | dependencies:
2051 | esbuild: 0.15.10
2052 | postcss: 8.4.17
2053 | resolve: 1.22.1
2054 | rollup: 2.78.1
2055 | optionalDependencies:
2056 | fsevents: 2.3.2
2057 | dev: true
2058 |
2059 | /vitest-dom/0.0.4_vitest@0.23.4:
2060 | resolution: {integrity: sha512-xZqjd+97Y0lc1Rgs9COpsBR34gTfMn/hzoT985NPiJyMGT3Miu5jhtmZ5r+1SKJUXjMfIrHofL+udfa926NUfA==}
2061 | peerDependencies:
2062 | vitest: <1
2063 | dependencies:
2064 | aria-query: 5.0.2
2065 | chalk: 5.0.1
2066 | dom-accessibility-api: 0.5.14
2067 | lodash-es: 4.17.21
2068 | redent: 3.0.0
2069 | vitest: 0.23.4_e3y3tk5wocdgktiwrgnxpnd3nq
2070 | dev: true
2071 |
2072 | /vitest/0.23.4_e3y3tk5wocdgktiwrgnxpnd3nq:
2073 | resolution: {integrity: sha512-iukBNWqQAv8EKDBUNntspLp9SfpaVFbmzmM0sNcnTxASQZMzRw3PsM6DMlsHiI+I6GeO5/sYDg3ecpC+SNFLrQ==}
2074 | engines: {node: '>=v14.16.0'}
2075 | hasBin: true
2076 | peerDependencies:
2077 | '@edge-runtime/vm': '*'
2078 | '@vitest/browser': '*'
2079 | '@vitest/ui': '*'
2080 | happy-dom: '*'
2081 | jsdom: '*'
2082 | peerDependenciesMeta:
2083 | '@edge-runtime/vm':
2084 | optional: true
2085 | '@vitest/browser':
2086 | optional: true
2087 | '@vitest/ui':
2088 | optional: true
2089 | happy-dom:
2090 | optional: true
2091 | jsdom:
2092 | optional: true
2093 | dependencies:
2094 | '@types/chai': 4.3.3
2095 | '@types/chai-subset': 1.3.3
2096 | '@types/node': 16.11.62
2097 | chai: 4.3.6
2098 | debug: 4.3.4
2099 | happy-dom: 6.0.4
2100 | jsdom: 20.0.0
2101 | local-pkg: 0.4.2
2102 | strip-literal: 0.4.2
2103 | tinybench: 2.2.1
2104 | tinypool: 0.3.0
2105 | tinyspy: 1.0.2
2106 | vite: 3.1.4
2107 | transitivePeerDependencies:
2108 | - less
2109 | - sass
2110 | - stylus
2111 | - supports-color
2112 | - terser
2113 | dev: true
2114 |
2115 | /w3c-hr-time/1.0.2:
2116 | resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
2117 | dependencies:
2118 | browser-process-hrtime: 1.0.0
2119 | dev: true
2120 |
2121 | /w3c-xmlserializer/3.0.0:
2122 | resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==}
2123 | engines: {node: '>=12'}
2124 | dependencies:
2125 | xml-name-validator: 4.0.0
2126 | dev: true
2127 |
2128 | /wait-for-expect/3.0.2:
2129 | resolution: {integrity: sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==}
2130 | dev: true
2131 |
2132 | /webidl-conversions/3.0.1:
2133 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
2134 | dev: true
2135 |
2136 | /webidl-conversions/4.0.2:
2137 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
2138 | dev: true
2139 |
2140 | /webidl-conversions/7.0.0:
2141 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
2142 | engines: {node: '>=12'}
2143 | dev: true
2144 |
2145 | /whatwg-encoding/2.0.0:
2146 | resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
2147 | engines: {node: '>=12'}
2148 | dependencies:
2149 | iconv-lite: 0.6.3
2150 | dev: true
2151 |
2152 | /whatwg-mimetype/3.0.0:
2153 | resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
2154 | engines: {node: '>=12'}
2155 | dev: true
2156 |
2157 | /whatwg-url/11.0.0:
2158 | resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
2159 | engines: {node: '>=12'}
2160 | dependencies:
2161 | tr46: 3.0.0
2162 | webidl-conversions: 7.0.0
2163 | dev: true
2164 |
2165 | /whatwg-url/5.0.0:
2166 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
2167 | dependencies:
2168 | tr46: 0.0.3
2169 | webidl-conversions: 3.0.1
2170 | dev: true
2171 |
2172 | /whatwg-url/7.1.0:
2173 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
2174 | dependencies:
2175 | lodash.sortby: 4.7.0
2176 | tr46: 1.0.1
2177 | webidl-conversions: 4.0.2
2178 | dev: true
2179 |
2180 | /which/2.0.2:
2181 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2182 | engines: {node: '>= 8'}
2183 | hasBin: true
2184 | dependencies:
2185 | isexe: 2.0.0
2186 | dev: true
2187 |
2188 | /word-wrap/1.2.3:
2189 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
2190 | engines: {node: '>=0.10.0'}
2191 | dev: true
2192 |
2193 | /wrappy/1.0.2:
2194 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2195 | dev: true
2196 |
2197 | /ws/8.9.0:
2198 | resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==}
2199 | engines: {node: '>=10.0.0'}
2200 | peerDependencies:
2201 | bufferutil: ^4.0.1
2202 | utf-8-validate: ^5.0.2
2203 | peerDependenciesMeta:
2204 | bufferutil:
2205 | optional: true
2206 | utf-8-validate:
2207 | optional: true
2208 | dev: true
2209 |
2210 | /xml-name-validator/4.0.0:
2211 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
2212 | engines: {node: '>=12'}
2213 | dev: true
2214 |
2215 | /xmlchars/2.2.0:
2216 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
2217 | dev: true
2218 |
2219 | /yaml/1.10.2:
2220 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
2221 | engines: {node: '>= 6'}
2222 | dev: true
2223 |
--------------------------------------------------------------------------------