├── .gitignore ├── .prettierrc.json ├── LICENSE.md ├── README.md ├── jest.config.js ├── package.json ├── rollup.config.js ├── src └── index.ts ├── tests ├── common.ts ├── dom-interactions.test.ts ├── extenders.test.ts ├── helpers.test.ts └── user-interactions.test.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .tern-port 3 | dist/ 4 | .DS_Store -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright © 2021 Pablo Berganza 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # svelte-editorjs 2 | 3 | A wrapper for EditorJS in Svelte 4 | 5 | ## Installation 6 | 7 | ```sh 8 | # yarn 9 | yarn add @editorjs/editorjs svelte-editorjs 10 | 11 | # npm 12 | npm i -S @editorjs/editorjs svelte-editorjs 13 | ``` 14 | 15 | ## Usage 16 | 17 | To use it import the `createEditor` function from `svelte-editorjs`. 18 | 19 | ```html 20 | 25 | 26 |
27 | ``` 28 | 29 | - `editor` is an action to use in your element that will contain the editor. It can also be used as a readable store that contains the following props: 30 | - `instance`: the editor's instance as shown in [their docs](https://editorjs.io/api). 31 | - `save`: a shortcut to `instance.save` that also updates the `data` store. 32 | - `clear`: a shortcut to `instance.clear` that also updates the `data` store. 33 | - `render`: a shortcut to `instance.render`. 34 | - `data` is a writable store containing the data from the editor. It'll only be updated on save. Mutating this store will also mutate the editors content. 35 | - `isReady` is a readable store containing a single boolean indicating if the editor is ready to be used. 36 | 37 | ## Configuration 38 | 39 | The `createEditor` accepts the same properties that [EditorjS accepts as options](https://github.com/codex-team/editor.js/blob/master/types/configs/editor-config.d.ts) except for holderId and holder, since that's determined by the action. 40 | 41 | ## License 42 | 43 | MIT 44 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | collectCoverageFrom: ['./src/**'], 5 | }; 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-editorjs", 3 | "version": "0.1.0", 4 | "description": "An EditorJS wrapper for Svelte", 5 | "main": "dist/cjs/index.js", 6 | "module": "dist/esm/index.js", 7 | "types": "dist/index.d.ts", 8 | "author": "Pablo Berganza ", 9 | "license": "MIT", 10 | "homepage": "https://github.com/pablo-abc/svelte-editorjs", 11 | "repository": "github:pablo-abc/svelte-editorjs", 12 | "funding": "https://www.buymeacoffee.com/pablo.abc", 13 | "keywords": ["svelte", "WYSWYG", "editor", "editorjs"], 14 | "scripts": { 15 | "prebuild": "rimraf ./dist", 16 | "build": "cross-env NODE_ENV=production rollup -c", 17 | "dev": "rollup -cw", 18 | "prepublishOnly": "yarn build", 19 | "test": "jest", 20 | "test:ci": "jest --ci --coverage" 21 | }, 22 | "peerDependencies": { 23 | "@editorjs/editorjs": "^2.19.3", 24 | "svelte": "3.31.0" 25 | }, 26 | "files": ["dist"], 27 | "dependencies": {}, 28 | "publishConfig": { 29 | "access": "public" 30 | }, 31 | "devDependencies": { 32 | "@editorjs/editorjs": "^2.19.3", 33 | "@rollup/plugin-commonjs": "^17.1.0", 34 | "@rollup/plugin-node-resolve": "^11.2.0", 35 | "@rollup/plugin-replace": "^2.4.1", 36 | "@wessberg/rollup-plugin-ts": "^1.3.11", 37 | "cross-env": "^7.0.3", 38 | "prettier": "^2.2.1", 39 | "rimraf": "^3.0.2", 40 | "rollup": "^2.42.4", 41 | "rollup-plugin-terser": "^7.0.2", 42 | "svelte": "3.31.0", 43 | "typescript": "^4.2.3" 44 | }, 45 | "exports": { 46 | ".": { 47 | "import": "./dist/esm/index.js", 48 | "require": "./dist/cjs/index.js" 49 | }, 50 | "./package.json": "./package.json" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from '@wessberg/rollup-plugin-ts'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import replace from '@rollup/plugin-replace'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import pkg from './package.json'; 7 | 8 | const prod = process.env.NODE_ENV === 'production'; 9 | const name = pkg.name 10 | .replace(/^(@\S+\/)?(svelte-)?(\S+)/, '$3') 11 | .replace(/^\w/, (m) => m.toUpperCase()) 12 | .replace(/-\w/g, (m) => m[1].toUpperCase()); 13 | 14 | export default { 15 | input: './src/index.ts', 16 | external: ['svelte'], 17 | output: [ 18 | { dir: 'dist/cjs', format: 'cjs', sourcemap: prod, name }, 19 | { dir: 'dist/esm', format: 'es', sourcemap: prod }, 20 | ], 21 | plugins: [ 22 | replace({ 23 | preventAssignment: true, 24 | 'process.env.NODE_ENV': JSON.stringify( 25 | prod ? 'production' : 'development' 26 | ), 27 | }), 28 | resolve({ browser: true }), 29 | commonjs(), 30 | typescript(), 31 | prod && terser(), 32 | ], 33 | }; 34 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type EditorJS from '@editorjs/editorjs'; 2 | import type { EditorConfig, OutputData } from '@editorjs/editorjs'; 3 | import { writable } from 'svelte/store'; 4 | import type { Readable, Writable } from 'svelte/store'; 5 | 6 | export type EditorStore = { 7 | instance?: EditorJS; 8 | save?: () => void; 9 | render?: (data: OutputData) => void; 10 | clear?: () => void; 11 | }; 12 | 13 | export type EditorStoreAction = (( 14 | node: HTMLElement, 15 | parameters?: EditorConfig 16 | ) => { 17 | destroy?: () => void; 18 | }) & 19 | Readable; 20 | 21 | export type EditorResponse = { 22 | editor: EditorStoreAction; 23 | isReady: Readable; 24 | data: Writable; 25 | }; 26 | 27 | export type SvelteEditorConfig = Omit; 28 | 29 | export function createEditor( 30 | configuration: SvelteEditorConfig = {} 31 | ): EditorResponse { 32 | const initialData = configuration.data ?? { 33 | time: new Date().getTime(), 34 | blocks: [], 35 | }; 36 | let editorInstance: EditorJS | undefined; 37 | const { subscribe: subscribeEditor, set: setEditor } = writable( 38 | {} 39 | ); 40 | const { subscribe: subscribeIsReady, set: setIsReady } = writable( 41 | false 42 | ); 43 | const { 44 | subscribe: subscribeData, 45 | set: setData, 46 | update: updateData, 47 | } = writable(initialData); 48 | 49 | let newSetData = (data: OutputData) => { 50 | updateData((oldData) => ({ ...oldData, ...data })); 51 | editorInstance?.render(data); 52 | }; 53 | 54 | function editor(node: HTMLElement, parameters: SvelteEditorConfig = {}) { 55 | async function setup() { 56 | if (typeof window === 'undefined') return; 57 | const Editor = await import('@editorjs/editorjs'); 58 | const instance = new Editor.default({ 59 | ...configuration, 60 | ...parameters, 61 | holder: node, 62 | }); 63 | 64 | instance.isReady 65 | .then(() => { 66 | editorInstance = instance; 67 | if (parameters.data) setData(parameters.data); 68 | 69 | const save = async () => { 70 | const data = await instance.save(); 71 | setData(data); 72 | }; 73 | 74 | const clear = async () => { 75 | instance.clear(); 76 | updateData((data) => ({ 77 | ...data, 78 | time: new Date().getTime(), 79 | blocks: [], 80 | })); 81 | }; 82 | 83 | const render = async (data: OutputData) => { 84 | instance.render(data); 85 | }; 86 | 87 | setEditor({ 88 | instance, 89 | save, 90 | render, 91 | clear, 92 | }); 93 | setIsReady(true); 94 | }) 95 | .catch(console.error); 96 | } 97 | setup(); 98 | return { 99 | destroy() { 100 | editorInstance?.destroy(); 101 | }, 102 | }; 103 | } 104 | 105 | editor.subscribe = subscribeEditor; 106 | 107 | return { 108 | editor, 109 | isReady: { subscribe: subscribeIsReady }, 110 | data: { subscribe: subscribeData, set: newSetData, update: updateData }, 111 | }; 112 | } 113 | -------------------------------------------------------------------------------- /tests/common.ts: -------------------------------------------------------------------------------- 1 | export function createDOM(): void { 2 | const formElement = document.createElement('form'); 3 | formElement.name = 'test-form'; 4 | document.body.appendChild(formElement); 5 | } 6 | 7 | export function cleanupDOM(): void { 8 | removeAllChildren(document.body); 9 | } 10 | 11 | export type InputAttributes = { 12 | type?: string; 13 | required?: boolean; 14 | name?: string; 15 | value?: string; 16 | checked?: boolean; 17 | }; 18 | 19 | export function createInputElement(attrs: InputAttributes): HTMLInputElement { 20 | const inputElement = document.createElement('input'); 21 | if (attrs.name) inputElement.name = attrs.name; 22 | if (attrs.type) inputElement.type = attrs.type; 23 | if (attrs.value) inputElement.value = attrs.value; 24 | if (attrs.checked) inputElement.checked = attrs.checked; 25 | inputElement.required = !!attrs.required; 26 | return inputElement; 27 | } 28 | 29 | export function removeAllChildren(parent: Node): void { 30 | while (parent.firstChild) { 31 | parent.removeChild(parent.firstChild); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/dom-interactions.test.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/extend-expect'; 2 | import { screen, waitFor } from '@testing-library/dom'; 3 | import { createForm } from '../src'; 4 | import { cleanupDOM, createInputElement, createDOM } from './common'; 5 | import { get } from 'svelte/store'; 6 | 7 | describe('Form action DOM mutations', () => { 8 | beforeEach(createDOM); 9 | 10 | afterEach(cleanupDOM); 11 | 12 | test('Adds novalidate to form when using a validate function', () => { 13 | const { form } = createForm({ 14 | validate: jest.fn(), 15 | onSubmit: jest.fn(), 16 | }); 17 | const formElement = screen.getByRole('form') as HTMLFormElement; 18 | expect(formElement).not.toHaveAttribute('novalidate'); 19 | 20 | form(formElement); 21 | 22 | expect(formElement).toHaveAttribute('novalidate'); 23 | }); 24 | 25 | test('Adds data-felte-fieldset to children of fieldset', () => { 26 | const { form } = createForm({ 27 | onSubmit: jest.fn(), 28 | }); 29 | const formElement = screen.getByRole('form') as HTMLFormElement; 30 | const fieldsetElement = document.createElement('fieldset'); 31 | fieldsetElement.name = 'user'; 32 | const inputElement = document.createElement('input'); 33 | inputElement.name = 'email'; 34 | fieldsetElement.appendChild(inputElement); 35 | formElement.appendChild(fieldsetElement); 36 | form(formElement); 37 | expect(inputElement).toHaveAttribute('data-felte-fieldset'); 38 | }); 39 | 40 | test('Fieldsets can be nested', () => { 41 | const { form } = createForm({ onSubmit: jest.fn() }); 42 | const userFieldset = document.createElement('fieldset'); 43 | userFieldset.name = 'user'; 44 | const profileFieldset = document.createElement('fieldset'); 45 | profileFieldset.name = 'profile'; 46 | const emailInput = createInputElement({ type: 'email', name: 'email' }); 47 | const passwordInput = createInputElement({ 48 | type: 'password', 49 | name: 'password', 50 | }); 51 | const nameInput = createInputElement({ name: 'name' }); 52 | const bioInput = createInputElement({ name: 'bio' }); 53 | profileFieldset.append(nameInput, bioInput); 54 | userFieldset.append(emailInput, passwordInput, profileFieldset); 55 | const formElement = screen.getByRole('form') as HTMLFormElement; 56 | formElement.appendChild(userFieldset); 57 | form(formElement); 58 | [emailInput, passwordInput, profileFieldset].forEach((el) => { 59 | expect(el).toHaveAttribute('data-felte-fieldset', 'user'); 60 | }); 61 | [nameInput, bioInput].forEach((el) => { 62 | expect(el).toHaveAttribute('data-felte-fieldset', 'user.profile'); 63 | }); 64 | }); 65 | 66 | test('Propagates felte-unset-on-remove attribute respecting specificity', () => { 67 | const { form } = createForm({ onSubmit: jest.fn() }); 68 | const outerFieldset = document.createElement('fieldset'); 69 | outerFieldset.dataset.felteUnsetOnRemove = 'true'; 70 | const outerTextInput = createInputElement({ name: 'outerText' }); 71 | const outerSecondaryInput = createInputElement({ name: 'outerSecondary' }); 72 | outerSecondaryInput.dataset.felteUnsetOnRemove = 'false'; 73 | const innerFieldset = document.createElement('fieldset'); 74 | const innerTextInput = createInputElement({ name: 'innerText' }); 75 | const innerSecondaryinput = createInputElement({ name: 'innerSecondary' }); 76 | innerSecondaryinput.dataset.felteUnsetOnRemove = 'false'; 77 | innerFieldset.append(innerTextInput, innerSecondaryinput); 78 | outerFieldset.append(outerTextInput, outerSecondaryInput, innerFieldset); 79 | const formElement = screen.getByRole('form') as HTMLFormElement; 80 | formElement.appendChild(outerFieldset); 81 | form(formElement); 82 | [outerFieldset, outerTextInput, innerFieldset, innerTextInput].forEach( 83 | (el) => { 84 | expect(el).toHaveAttribute('data-felte-unset-on-remove', 'true'); 85 | } 86 | ); 87 | [outerSecondaryInput, innerSecondaryinput].forEach((el) => { 88 | expect(el).toHaveAttribute('data-felte-unset-on-remove', 'false'); 89 | }); 90 | }); 91 | 92 | test('Unsets fields tagged with felte-unset-on-remove', async () => { 93 | const { form, data } = createForm({ onSubmit: jest.fn() }); 94 | const outerFieldset = document.createElement('fieldset'); 95 | outerFieldset.dataset.felteUnsetOnRemove = 'true'; 96 | const outerTextInput = createInputElement({ name: 'outerText' }); 97 | const outerSecondaryInput = createInputElement({ name: 'outerSecondary' }); 98 | outerSecondaryInput.dataset.felteUnsetOnRemove = 'false'; 99 | const innerFieldset = document.createElement('fieldset'); 100 | innerFieldset.name = 'inner'; 101 | const innerTextInput = createInputElement({ name: 'innerText' }); 102 | const innerSecondaryinput = createInputElement({ name: 'innerSecondary' }); 103 | innerSecondaryinput.dataset.felteUnsetOnRemove = 'false'; 104 | innerFieldset.append(innerTextInput, innerSecondaryinput); 105 | outerFieldset.append(outerTextInput, outerSecondaryInput, innerFieldset); 106 | const formElement = screen.getByRole('form') as HTMLFormElement; 107 | formElement.appendChild(outerFieldset); 108 | form(formElement); 109 | expect(get(data)).toEqual({ 110 | outerText: '', 111 | outerSecondary: '', 112 | inner: { 113 | innerText: '', 114 | innerSecondary: '', 115 | }, 116 | }); 117 | formElement.removeChild(outerFieldset); 118 | await waitFor(() => { 119 | expect(get(data)).toEqual({ 120 | outerSecondary: '', 121 | inner: { 122 | innerSecondary: '', 123 | }, 124 | }); 125 | }); 126 | }); 127 | 128 | test('Handles fields added after form load', async () => { 129 | const { form, data } = createForm({ onSubmit: jest.fn() }); 130 | const outerFieldset = document.createElement('fieldset'); 131 | outerFieldset.dataset.felteUnsetOnRemove = 'true'; 132 | const outerTextInput = createInputElement({ name: 'outerText' }); 133 | const outerSecondaryInput = createInputElement({ name: 'outerSecondary' }); 134 | outerSecondaryInput.dataset.felteUnsetOnRemove = 'false'; 135 | const innerFieldset = document.createElement('fieldset'); 136 | innerFieldset.name = 'inner'; 137 | const innerTextInput = createInputElement({ name: 'innerText' }); 138 | const innerSecondaryinput = createInputElement({ name: 'innerSecondary' }); 139 | innerSecondaryinput.dataset.felteUnsetOnRemove = 'false'; 140 | innerFieldset.append(innerTextInput, innerSecondaryinput); 141 | outerFieldset.append(outerTextInput, outerSecondaryInput); 142 | const formElement = screen.getByRole('form') as HTMLFormElement; 143 | formElement.appendChild(outerFieldset); 144 | form(formElement); 145 | expect(get(data)).toEqual({ 146 | outerText: '', 147 | outerSecondary: '', 148 | }); 149 | 150 | formElement.appendChild(innerFieldset); 151 | 152 | await waitFor(() => { 153 | expect(get(data)).toEqual({ 154 | outerText: '', 155 | outerSecondary: '', 156 | inner: { 157 | innerText: '', 158 | innerSecondary: '', 159 | }, 160 | }); 161 | }); 162 | }); 163 | 164 | test('Adds and removes event listeners', () => { 165 | const formElement = screen.getByRole('form') as HTMLFormElement; 166 | const { form } = createForm({ onSubmit: jest.fn() }); 167 | const addEventListener = jest.fn(); 168 | const removeEventListener = jest.fn(); 169 | formElement.addEventListener = addEventListener; 170 | formElement.removeEventListener = removeEventListener; 171 | expect(addEventListener).not.toHaveBeenCalled(); 172 | expect(removeEventListener).not.toHaveBeenCalled(); 173 | const { destroy } = form(formElement); 174 | expect(addEventListener).toHaveBeenCalledTimes(4); 175 | expect(removeEventListener).not.toHaveBeenCalled(); 176 | destroy(); 177 | expect(removeEventListener).toHaveBeenCalledTimes(4); 178 | }); 179 | }); 180 | -------------------------------------------------------------------------------- /tests/extenders.test.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/extend-expect'; 2 | import { screen, waitFor } from '@testing-library/dom'; 3 | import { createForm } from '../src'; 4 | import { cleanupDOM, createDOM, createInputElement } from './common'; 5 | import { get } from 'svelte/store'; 6 | 7 | describe('Extenders', () => { 8 | beforeEach(createDOM); 9 | 10 | afterEach(cleanupDOM); 11 | 12 | test('calls extender', async () => { 13 | const formElement = screen.getByRole('form') as HTMLFormElement; 14 | const mockExtenderHandler = { 15 | destroy: jest.fn(), 16 | }; 17 | const mockExtender = jest.fn(() => mockExtenderHandler); 18 | const { 19 | form, 20 | data: { set, ...data }, 21 | errors, 22 | touched, 23 | } = createForm({ 24 | onSubmit: jest.fn(), 25 | extend: mockExtender, 26 | }); 27 | 28 | expect(mockExtender).toHaveBeenLastCalledWith( 29 | expect.objectContaining({ 30 | data: expect.objectContaining(data), 31 | errors, 32 | touched, 33 | }) 34 | ); 35 | 36 | expect(mockExtender).toHaveBeenCalledTimes(1); 37 | 38 | form(formElement); 39 | 40 | expect(mockExtender).toHaveBeenLastCalledWith( 41 | expect.objectContaining({ 42 | data: expect.objectContaining(data), 43 | errors, 44 | touched, 45 | form: formElement, 46 | controls: expect.arrayContaining([]), 47 | }) 48 | ); 49 | 50 | expect(mockExtender).toHaveBeenCalledTimes(2); 51 | 52 | const inputElement = createInputElement({ 53 | name: 'test', 54 | type: 'text', 55 | }); 56 | 57 | formElement.appendChild(inputElement); 58 | 59 | await waitFor(() => { 60 | expect(mockExtender).toHaveBeenLastCalledWith( 61 | expect.objectContaining({ 62 | data: expect.objectContaining(data), 63 | errors, 64 | touched, 65 | form: formElement, 66 | controls: expect.arrayContaining([inputElement]), 67 | }) 68 | ); 69 | 70 | expect(mockExtender).toHaveBeenCalledTimes(3); 71 | 72 | expect(mockExtenderHandler.destroy).toHaveBeenCalledTimes(1); 73 | }); 74 | 75 | formElement.removeChild(inputElement); 76 | 77 | await waitFor(() => { 78 | expect(mockExtender).toHaveBeenLastCalledWith( 79 | expect.objectContaining({ 80 | data: expect.objectContaining(data), 81 | errors, 82 | touched, 83 | form: formElement, 84 | controls: expect.arrayContaining([]), 85 | }) 86 | ); 87 | 88 | expect(mockExtender).toHaveBeenCalledTimes(4); 89 | 90 | expect(mockExtenderHandler.destroy).toHaveBeenCalledTimes(2); 91 | }); 92 | }); 93 | 94 | test('calls multiple extenders', async () => { 95 | const formElement = screen.getByRole('form') as HTMLFormElement; 96 | const mockExtenderHandler = { 97 | destroy: jest.fn(), 98 | }; 99 | const mockExtender = jest.fn(() => mockExtenderHandler); 100 | const { 101 | form, 102 | data: { set, ...data }, 103 | errors, 104 | touched, 105 | } = createForm({ 106 | onSubmit: jest.fn(), 107 | extend: [mockExtender, mockExtender], 108 | }); 109 | 110 | expect(mockExtender).toHaveBeenLastCalledWith( 111 | expect.objectContaining({ 112 | data: expect.objectContaining(data), 113 | errors, 114 | touched, 115 | }) 116 | ); 117 | 118 | expect(mockExtender).toHaveBeenCalledTimes(2); 119 | 120 | form(formElement); 121 | 122 | expect(mockExtender).toHaveBeenLastCalledWith( 123 | expect.objectContaining({ 124 | data: expect.objectContaining(data), 125 | errors, 126 | touched, 127 | form: formElement, 128 | controls: expect.arrayContaining([]), 129 | }) 130 | ); 131 | 132 | expect(mockExtender).toHaveBeenCalledTimes(4); 133 | 134 | const inputElement = createInputElement({ 135 | name: 'test', 136 | type: 'text', 137 | }); 138 | 139 | formElement.appendChild(inputElement); 140 | 141 | await waitFor(() => { 142 | expect(mockExtender).toHaveBeenLastCalledWith( 143 | expect.objectContaining({ 144 | data: expect.objectContaining(data), 145 | errors, 146 | touched, 147 | form: formElement, 148 | controls: expect.arrayContaining([inputElement]), 149 | }) 150 | ); 151 | 152 | expect(mockExtender).toHaveBeenCalledTimes(6); 153 | 154 | expect(mockExtenderHandler.destroy).toHaveBeenCalledTimes(2); 155 | }); 156 | 157 | formElement.removeChild(inputElement); 158 | 159 | await waitFor(() => { 160 | expect(mockExtender).toHaveBeenLastCalledWith( 161 | expect.objectContaining({ 162 | data: expect.objectContaining(data), 163 | errors, 164 | touched, 165 | form: formElement, 166 | controls: expect.arrayContaining([]), 167 | }) 168 | ); 169 | 170 | expect(mockExtender).toHaveBeenCalledTimes(8); 171 | 172 | expect(mockExtenderHandler.destroy).toHaveBeenCalledTimes(4); 173 | }); 174 | }); 175 | 176 | test('calls onSubmitError', async () => { 177 | const formElement = screen.getByRole('form') as HTMLFormElement; 178 | const mockExtenderHandler = { 179 | onSubmitError: jest.fn(), 180 | }; 181 | const mockExtender = jest.fn(() => mockExtenderHandler); 182 | const mockErrors = { account: { email: 'Not email' } }; 183 | 184 | const { form, data } = createForm({ 185 | onSubmit: jest.fn(() => { 186 | throw mockErrors; 187 | }), 188 | onError: () => mockErrors, 189 | extend: mockExtender, 190 | }); 191 | 192 | form(formElement); 193 | 194 | formElement.submit(); 195 | 196 | await waitFor(() => { 197 | expect(mockExtenderHandler.onSubmitError).toHaveBeenCalledWith( 198 | expect.objectContaining({ 199 | data: get(data), 200 | errors: mockErrors, 201 | }) 202 | ); 203 | }); 204 | }); 205 | 206 | test('calls onSubmitError on multiple extenders', async () => { 207 | const formElement = screen.getByRole('form') as HTMLFormElement; 208 | const mockExtenderHandler = { 209 | onSubmitError: jest.fn(), 210 | }; 211 | const mockExtender = jest.fn(() => mockExtenderHandler); 212 | const validate = jest.fn(); 213 | const mockErrors = { account: { email: 'Not email' } }; 214 | const onSubmit = jest.fn(() => { 215 | throw mockErrors; 216 | }); 217 | 218 | const { form, data } = createForm({ 219 | onSubmit, 220 | onError: () => mockErrors, 221 | validate, 222 | extend: [mockExtender, mockExtender], 223 | }); 224 | 225 | form(formElement); 226 | 227 | formElement.submit(); 228 | 229 | await waitFor(() => { 230 | expect(mockExtenderHandler.onSubmitError).toHaveBeenNthCalledWith( 231 | 1, 232 | expect.objectContaining({ 233 | data: get(data), 234 | errors: mockErrors, 235 | }) 236 | ); 237 | expect(mockExtenderHandler.onSubmitError).toHaveBeenNthCalledWith( 238 | 2, 239 | expect.objectContaining({ 240 | data: get(data), 241 | errors: mockErrors, 242 | }) 243 | ); 244 | expect(mockExtenderHandler.onSubmitError).toHaveBeenCalledTimes(2); 245 | expect(onSubmit).toHaveBeenCalledTimes(1); 246 | }); 247 | 248 | validate.mockImplementation(() => mockErrors); 249 | 250 | formElement.submit(); 251 | 252 | await waitFor(() => { 253 | expect(mockExtenderHandler.onSubmitError).toHaveBeenNthCalledWith( 254 | 3, 255 | expect.objectContaining({ 256 | data: get(data), 257 | errors: mockErrors, 258 | }) 259 | ); 260 | expect(mockExtenderHandler.onSubmitError).toHaveBeenNthCalledWith( 261 | 4, 262 | expect.objectContaining({ 263 | data: get(data), 264 | errors: mockErrors, 265 | }) 266 | ); 267 | expect(mockExtenderHandler.onSubmitError).toHaveBeenCalledTimes(4); 268 | expect(onSubmit).toHaveBeenCalledTimes(1); 269 | }); 270 | }); 271 | }); 272 | -------------------------------------------------------------------------------- /tests/helpers.test.ts: -------------------------------------------------------------------------------- 1 | import { waitFor, screen } from '@testing-library/dom'; 2 | import userEvent from '@testing-library/user-event'; 3 | import { createForm } from '../src'; 4 | import { createInputElement, createDOM } from './common'; 5 | import { get } from 'svelte/store'; 6 | 7 | describe('Helpers', () => { 8 | test('setField should update and touch field', () => { 9 | type Data = { 10 | account: { 11 | email: string; 12 | }; 13 | }; 14 | const { data, touched, setField } = createForm({ 15 | initialValues: { 16 | account: { 17 | email: '', 18 | }, 19 | }, 20 | onSubmit: jest.fn(), 21 | }); 22 | 23 | expect(get(data).account.email).toBe(''); 24 | expect(get(touched).account.email).toBe(false); 25 | setField('account.email', 'jacek@soplica.com'); 26 | expect(get(data)).toEqual({ 27 | account: { 28 | email: 'jacek@soplica.com', 29 | }, 30 | }); 31 | expect(get(touched)).toEqual({ 32 | account: { 33 | email: true, 34 | }, 35 | }); 36 | }); 37 | 38 | test('setField should update without touching field', () => { 39 | type Data = { 40 | account: { 41 | email: string; 42 | }; 43 | }; 44 | const { data, touched, setField } = createForm({ 45 | initialValues: { 46 | account: { 47 | email: '', 48 | }, 49 | }, 50 | onSubmit: jest.fn(), 51 | }); 52 | 53 | expect(get(data).account.email).toBe(''); 54 | expect(get(touched).account.email).toBe(false); 55 | setField('account.email', 'jacek@soplica.com', false); 56 | expect(get(data)).toEqual({ 57 | account: { 58 | email: 'jacek@soplica.com', 59 | }, 60 | }); 61 | expect(get(touched)).toEqual({ 62 | account: { 63 | email: false, 64 | }, 65 | }); 66 | }); 67 | 68 | test('setTouched should touch field', () => { 69 | type Data = { 70 | account: { 71 | email: string; 72 | }; 73 | }; 74 | const { touched, setTouched } = createForm({ 75 | initialValues: { 76 | account: { 77 | email: '', 78 | }, 79 | }, 80 | onSubmit: jest.fn(), 81 | }); 82 | 83 | expect(get(touched).account.email).toBe(false); 84 | setTouched('account.email'); 85 | expect(get(touched)).toEqual({ 86 | account: { 87 | email: true, 88 | }, 89 | }); 90 | }); 91 | 92 | test('setError should set a field error when touched', () => { 93 | type Data = { 94 | account: { 95 | email: string; 96 | }; 97 | }; 98 | const { errors, touched, setError, setTouched } = createForm({ 99 | initialValues: { 100 | account: { 101 | email: '', 102 | }, 103 | }, 104 | onSubmit: jest.fn(), 105 | }); 106 | 107 | expect(get(errors)?.account?.email).toBeFalsy(); 108 | setError('account.email', 'Not an email'); 109 | expect(get(errors)).toEqual({ 110 | account: { 111 | email: null, 112 | }, 113 | }); 114 | setTouched('account.email'); 115 | expect(get(touched).account.email).toBe(true); 116 | expect(get(errors)).toEqual({ 117 | account: { 118 | email: 'Not an email', 119 | }, 120 | }); 121 | }); 122 | 123 | test('validate should force validation', async () => { 124 | type Data = { 125 | account: { 126 | email: string; 127 | }; 128 | }; 129 | const mockErrors = { account: { email: 'Not email' } }; 130 | const mockValidate = jest.fn(() => mockErrors); 131 | const { errors, touched, validate } = createForm({ 132 | initialValues: { 133 | account: { 134 | email: '', 135 | }, 136 | }, 137 | validate: mockValidate, 138 | onSubmit: jest.fn(), 139 | }); 140 | 141 | expect(mockValidate).not.toHaveBeenCalled(); 142 | validate(); 143 | expect(mockValidate).toHaveBeenCalled(); 144 | await waitFor(() => { 145 | expect(get(errors)).toEqual(mockErrors); 146 | expect(get(touched)).toEqual({ 147 | account: { 148 | email: true, 149 | }, 150 | }); 151 | }); 152 | 153 | mockValidate.mockImplementation(() => ({} as any)); 154 | validate(); 155 | expect(mockValidate).toHaveBeenCalledTimes(4); 156 | await waitFor(() => { 157 | expect(get(errors)).toEqual({ account: { email: null } }); 158 | expect(get(touched)).toEqual({ 159 | account: { 160 | email: true, 161 | }, 162 | }); 163 | }); 164 | }); 165 | 166 | test('setting directly to data should touch value', () => { 167 | type Data = { 168 | account: { 169 | email: string; 170 | password: string; 171 | }; 172 | }; 173 | const { data, touched } = createForm({ 174 | initialValues: { 175 | account: { 176 | email: '', 177 | password: '', 178 | }, 179 | }, 180 | onSubmit: jest.fn(), 181 | }); 182 | 183 | expect(get(data).account.email).toBe(''); 184 | expect(get(data).account.password).toBe(''); 185 | 186 | data.set({ 187 | account: { email: 'jacek@soplica.com', password: '' }, 188 | }); 189 | 190 | expect(get(data).account.email).toBe('jacek@soplica.com'); 191 | expect(get(data).account.password).toBe(''); 192 | 193 | expect(get(touched)).toEqual({ 194 | account: { 195 | email: true, 196 | password: false, 197 | }, 198 | }); 199 | }); 200 | 201 | test('reset should reset form to default values', () => { 202 | createDOM(); 203 | const formElement = screen.getByRole('form') as HTMLFormElement; 204 | const accountFieldset = document.createElement('fieldset'); 205 | accountFieldset.name = 'account'; 206 | const emailInput = createInputElement({ 207 | name: 'email', 208 | type: 'text', 209 | value: '', 210 | }); 211 | accountFieldset.appendChild(emailInput); 212 | formElement.appendChild(accountFieldset); 213 | type Data = { 214 | account: { 215 | email: string; 216 | }; 217 | }; 218 | const { data, touched, reset, form } = createForm({ 219 | initialValues: { 220 | account: { 221 | email: '', 222 | }, 223 | }, 224 | onSubmit: jest.fn(), 225 | }); 226 | 227 | expect(get(data).account.email).toBe(''); 228 | 229 | data.set({ 230 | account: { email: 'jacek@soplica.com' }, 231 | }); 232 | 233 | expect(get(data).account.email).toBe('jacek@soplica.com'); 234 | 235 | reset(); 236 | 237 | expect(get(data)).toEqual({ 238 | account: { 239 | email: '', 240 | }, 241 | }); 242 | 243 | expect(get(touched)).toEqual({ 244 | account: { 245 | email: false, 246 | }, 247 | }); 248 | 249 | form(formElement); 250 | 251 | expect(get(data)).toEqual({ 252 | account: { 253 | email: '', 254 | }, 255 | }); 256 | 257 | userEvent.type(emailInput, 'jacek@soplica.com'); 258 | expect(get(data).account.email).toBe('jacek@soplica.com'); 259 | 260 | reset(); 261 | 262 | expect(get(data)).toEqual({ 263 | account: { 264 | email: '', 265 | }, 266 | }); 267 | 268 | expect(get(touched)).toEqual({ 269 | account: { 270 | email: false, 271 | }, 272 | }); 273 | }); 274 | }); 275 | -------------------------------------------------------------------------------- /tests/user-interactions.test.ts: -------------------------------------------------------------------------------- 1 | import { screen, waitFor } from '@testing-library/dom'; 2 | import { cleanupDOM, createInputElement, createDOM } from './common'; 3 | import { createForm } from '../src'; 4 | import userEvent from '@testing-library/user-event'; 5 | import { get } from 'svelte/store'; 6 | 7 | function createLoginForm() { 8 | const formElement = screen.getByRole('form') as HTMLFormElement; 9 | const emailInput = createInputElement({ name: 'email', type: 'email' }); 10 | const passwordInput = createInputElement({ 11 | name: 'password', 12 | type: 'password', 13 | }); 14 | const submitInput = createInputElement({ type: 'submit' }); 15 | const accountFieldset = document.createElement('fieldset'); 16 | accountFieldset.name = 'account'; 17 | accountFieldset.append(emailInput, passwordInput); 18 | formElement.append(accountFieldset, submitInput); 19 | return { formElement, emailInput, passwordInput, submitInput }; 20 | } 21 | 22 | function createSignupForm() { 23 | const formElement = screen.getByRole('form') as HTMLFormElement; 24 | const emailInput = createInputElement({ name: 'email', type: 'email' }); 25 | const passwordInput = createInputElement({ 26 | name: 'password', 27 | type: 'password', 28 | }); 29 | const showPasswordInput = createInputElement({ 30 | name: 'showPassword', 31 | type: 'checkbox', 32 | }); 33 | const confirmPasswordInput = createInputElement({ 34 | name: 'confirmPassword', 35 | type: 'password', 36 | }); 37 | const publicEmailYesRadio = createInputElement({ 38 | name: 'publicEmail', 39 | value: 'yes', 40 | type: 'radio', 41 | }); 42 | const publicEmailNoRadio = createInputElement({ 43 | name: 'publicEmail', 44 | value: 'no', 45 | type: 'radio', 46 | }); 47 | const accountFieldset = document.createElement('fieldset'); 48 | accountFieldset.name = 'account'; 49 | accountFieldset.append( 50 | emailInput, 51 | passwordInput, 52 | showPasswordInput, 53 | publicEmailYesRadio, 54 | publicEmailNoRadio, 55 | confirmPasswordInput 56 | ); 57 | formElement.appendChild(accountFieldset); 58 | const profileFieldset = document.createElement('fieldset'); 59 | profileFieldset.name = 'profile'; 60 | const firstNameInput = createInputElement({ name: 'firstName' }); 61 | const lastNameInput = createInputElement({ name: 'lastName' }); 62 | const bioInput = createInputElement({ name: 'bio' }); 63 | profileFieldset.append(firstNameInput, lastNameInput, bioInput); 64 | formElement.appendChild(profileFieldset); 65 | const pictureInput = createInputElement({ 66 | name: 'profile.picture', 67 | type: 'file', 68 | }); 69 | formElement.appendChild(pictureInput); 70 | const extraPicsInput = createInputElement({ 71 | name: 'extra.pictures', 72 | type: 'file', 73 | }); 74 | extraPicsInput.multiple = true; 75 | formElement.appendChild(extraPicsInput); 76 | const submitInput = createInputElement({ type: 'submit' }); 77 | const techCheckbox = createInputElement({ 78 | type: 'checkbox', 79 | name: 'preferences', 80 | value: 'technology', 81 | }); 82 | const filmsCheckbox = createInputElement({ 83 | type: 'checkbox', 84 | name: 'preferences', 85 | value: 'films', 86 | }); 87 | formElement.append(techCheckbox, filmsCheckbox, submitInput); 88 | return { 89 | formElement, 90 | emailInput, 91 | passwordInput, 92 | confirmPasswordInput, 93 | showPasswordInput, 94 | publicEmailYesRadio, 95 | publicEmailNoRadio, 96 | firstNameInput, 97 | lastNameInput, 98 | bioInput, 99 | pictureInput, 100 | extraPicsInput, 101 | techCheckbox, 102 | filmsCheckbox, 103 | submitInput, 104 | }; 105 | } 106 | 107 | describe('User interactions with form', () => { 108 | beforeEach(createDOM); 109 | 110 | afterEach(cleanupDOM); 111 | 112 | test('Sets default data correctly', () => { 113 | const { form, data } = createForm({ 114 | onSubmit: jest.fn(), 115 | }); 116 | const { formElement } = createSignupForm(); 117 | form(formElement); 118 | const $data = get(data); 119 | expect($data).toEqual( 120 | expect.objectContaining({ 121 | account: { 122 | email: '', 123 | password: '', 124 | confirmPassword: '', 125 | showPassword: false, 126 | publicEmail: undefined, 127 | }, 128 | profile: { 129 | firstName: '', 130 | lastName: '', 131 | bio: '', 132 | picture: undefined, 133 | }, 134 | extra: { 135 | pictures: expect.arrayContaining([]), 136 | }, 137 | preferences: expect.arrayContaining([]), 138 | }) 139 | ); 140 | }); 141 | 142 | test('Sets custom default data correctly', () => { 143 | const { form, data, isValid } = createForm({ 144 | onSubmit: jest.fn(), 145 | }); 146 | const { 147 | formElement, 148 | emailInput, 149 | bioInput, 150 | publicEmailYesRadio, 151 | showPasswordInput, 152 | techCheckbox, 153 | } = createSignupForm(); 154 | emailInput.value = 'jacek@soplica.com'; 155 | const bioTest = 'Litwo! Ojczyzno moja! ty jesteś jak zdrowie'; 156 | bioInput.value = bioTest; 157 | publicEmailYesRadio.checked = true; 158 | showPasswordInput.checked = true; 159 | techCheckbox.checked = true; 160 | form(formElement); 161 | const $data = get(data); 162 | expect($data).toEqual( 163 | expect.objectContaining({ 164 | account: { 165 | email: 'jacek@soplica.com', 166 | password: '', 167 | confirmPassword: '', 168 | showPassword: true, 169 | publicEmail: 'yes', 170 | }, 171 | profile: { 172 | firstName: '', 173 | lastName: '', 174 | bio: bioTest, 175 | picture: undefined, 176 | }, 177 | extra: { 178 | pictures: expect.arrayContaining([]), 179 | }, 180 | preferences: expect.arrayContaining(['technology']), 181 | }) 182 | ); 183 | expect(get(isValid)).toBeTruthy(); 184 | }); 185 | 186 | test('Input and data object get same value', () => { 187 | const { form, data } = createForm({ 188 | onSubmit: jest.fn(), 189 | }); 190 | const { formElement, emailInput, passwordInput } = createLoginForm(); 191 | form(formElement); 192 | userEvent.type(emailInput, 'jacek@soplica.com'); 193 | userEvent.type(passwordInput, 'password'); 194 | const $data = get(data); 195 | expect($data).toEqual( 196 | expect.objectContaining({ 197 | account: { 198 | email: 'jacek@soplica.com', 199 | password: 'password', 200 | }, 201 | }) 202 | ); 203 | }); 204 | 205 | test('Calls validation function on submit', async () => { 206 | const validate = jest.fn(() => ({})); 207 | const onSubmit = jest.fn(); 208 | const { form, isSubmitting } = createForm({ 209 | onSubmit, 210 | validate, 211 | }); 212 | const { formElement } = createLoginForm(); 213 | form(formElement); 214 | formElement.submit(); 215 | expect(validate).toHaveBeenCalled(); 216 | await waitFor(() => { 217 | expect(onSubmit).toHaveBeenCalledWith( 218 | expect.objectContaining({ 219 | account: { 220 | email: '', 221 | password: '', 222 | }, 223 | }) 224 | ); 225 | expect(get(isSubmitting)).toBeFalsy(); 226 | }); 227 | }); 228 | 229 | test('Calls validation function on submit without calling onSubmit', async () => { 230 | const validate = jest.fn(() => ({ account: { email: 'Not email' } })); 231 | const onSubmit = jest.fn(); 232 | const { form, isValid, isSubmitting } = createForm({ 233 | onSubmit, 234 | validate, 235 | }); 236 | const { formElement } = createLoginForm(); 237 | form(formElement); 238 | formElement.submit(); 239 | expect(validate).toHaveBeenCalled(); 240 | await waitFor(() => expect(onSubmit).not.toHaveBeenCalled()); 241 | expect(get(isValid)).toBeFalsy(); 242 | expect(get(isSubmitting)).toBeFalsy(); 243 | }); 244 | 245 | test('Calls validate on input', async () => { 246 | const validate = jest.fn(() => ({})); 247 | const onSubmit = jest.fn(); 248 | const { form, errors, isValid } = createForm({ 249 | onSubmit, 250 | validate, 251 | }); 252 | const { formElement, emailInput } = createLoginForm(); 253 | form(formElement); 254 | userEvent.type(emailInput, 'jacek@soplica.com'); 255 | get(errors); 256 | await waitFor(() => expect(validate).toHaveBeenCalled()); 257 | expect(get(isValid)).toBeTruthy(); 258 | }); 259 | 260 | test('Handles user events', () => { 261 | const { form, data } = createForm({ 262 | onSubmit: jest.fn(), 263 | }); 264 | const { 265 | formElement, 266 | emailInput, 267 | passwordInput, 268 | confirmPasswordInput, 269 | showPasswordInput, 270 | publicEmailYesRadio, 271 | firstNameInput, 272 | lastNameInput, 273 | bioInput, 274 | techCheckbox, 275 | pictureInput, 276 | extraPicsInput, 277 | } = createSignupForm(); 278 | 279 | form(formElement); 280 | 281 | expect(get(data)).toEqual( 282 | expect.objectContaining({ 283 | account: { 284 | email: '', 285 | password: '', 286 | confirmPassword: '', 287 | showPassword: false, 288 | publicEmail: undefined, 289 | }, 290 | profile: { 291 | firstName: '', 292 | lastName: '', 293 | bio: '', 294 | picture: undefined, 295 | }, 296 | extra: { 297 | pictures: expect.arrayContaining([]), 298 | }, 299 | preferences: expect.arrayContaining([]), 300 | }) 301 | ); 302 | 303 | const mockFile = new File(['test file'], 'test.png', { type: 'image/png' }); 304 | userEvent.type(emailInput, 'jacek@soplica.com'); 305 | userEvent.type(passwordInput, 'password'); 306 | userEvent.type(confirmPasswordInput, 'password'); 307 | userEvent.click(showPasswordInput); 308 | userEvent.click(publicEmailYesRadio); 309 | userEvent.type(firstNameInput, 'Jacek'); 310 | userEvent.type(lastNameInput, 'Soplica'); 311 | const bioTest = 'Litwo! Ojczyzno moja! ty jesteś jak zdrowie'; 312 | userEvent.type(bioInput, bioTest); 313 | userEvent.click(techCheckbox); 314 | userEvent.upload(pictureInput, mockFile); 315 | userEvent.upload(extraPicsInput, [mockFile, mockFile]); 316 | 317 | expect(get(data)).toEqual( 318 | expect.objectContaining({ 319 | account: { 320 | email: 'jacek@soplica.com', 321 | password: 'password', 322 | confirmPassword: 'password', 323 | showPassword: true, 324 | publicEmail: 'yes', 325 | }, 326 | profile: { 327 | firstName: 'Jacek', 328 | lastName: 'Soplica', 329 | bio: bioTest, 330 | picture: mockFile, 331 | }, 332 | extra: { 333 | pictures: expect.arrayContaining([mockFile, mockFile]), 334 | }, 335 | preferences: expect.arrayContaining(['technology']), 336 | }) 337 | ); 338 | }); 339 | 340 | test('Sets default data with initialValues', () => { 341 | const { data } = createForm({ 342 | onSubmit: jest.fn(), 343 | initialValues: { 344 | account: { 345 | email: 'jacek@soplica.com', 346 | password: 'password', 347 | }, 348 | }, 349 | }); 350 | expect(get(data)).toEqual( 351 | expect.objectContaining({ 352 | account: { 353 | email: 'jacek@soplica.com', 354 | password: 'password', 355 | }, 356 | }) 357 | ); 358 | }); 359 | 360 | test('calls onError', async () => { 361 | const formElement = screen.getByRole('form') as HTMLFormElement; 362 | const onError = jest.fn(); 363 | const mockErrors = { account: { email: 'Not email' } }; 364 | const onSubmit = jest.fn(() => { 365 | throw mockErrors; 366 | }); 367 | 368 | const { form, isSubmitting } = createForm({ 369 | onSubmit, 370 | onError, 371 | }); 372 | 373 | form(formElement); 374 | 375 | expect(onError).not.toHaveBeenCalled(); 376 | 377 | formElement.submit(); 378 | 379 | await waitFor(() => { 380 | expect(onSubmit).toHaveBeenCalled(); 381 | expect(onError).toHaveBeenCalledWith(mockErrors); 382 | expect(get(isSubmitting)).toBeFalsy(); 383 | }); 384 | }); 385 | 386 | test('use createSubmitHandler to override submit', async () => { 387 | const mockOnSubmit = jest.fn(); 388 | const mockValidate = jest.fn(); 389 | const mockOnError = jest.fn(); 390 | const formElement = screen.getByRole('form') as HTMLFormElement; 391 | const defaultConfig = { 392 | onSubmit: jest.fn(), 393 | validate: jest.fn(), 394 | onError: jest.fn(), 395 | }; 396 | const { form, createSubmitHandler, isSubmitting } = createForm( 397 | defaultConfig 398 | ); 399 | const altOnSubmit = createSubmitHandler({ 400 | onSubmit: mockOnSubmit, 401 | onError: mockOnError, 402 | validate: mockValidate, 403 | }); 404 | 405 | form(formElement); 406 | 407 | const submitInput = createInputElement({ 408 | type: 'submit', 409 | value: 'Alt Submit', 410 | }); 411 | 412 | submitInput.addEventListener('click', altOnSubmit); 413 | 414 | formElement.appendChild(submitInput); 415 | 416 | userEvent.click(submitInput); 417 | 418 | await waitFor(() => { 419 | expect(mockValidate).toHaveBeenCalledTimes(1); 420 | expect(defaultConfig.onSubmit).not.toHaveBeenCalled(); 421 | expect(mockOnSubmit).toHaveBeenCalledTimes(1); 422 | expect(defaultConfig.onError).not.toHaveBeenCalled(); 423 | expect(mockOnError).not.toHaveBeenCalled(); 424 | expect(get(isSubmitting)).toBeFalsy(); 425 | }); 426 | 427 | const mockErrors = { account: { email: 'Not email' } }; 428 | mockOnSubmit.mockImplementationOnce(() => { 429 | throw mockErrors; 430 | }); 431 | 432 | userEvent.click(submitInput); 433 | 434 | await waitFor(() => { 435 | expect(mockOnError).toHaveBeenCalled(); 436 | expect(mockValidate).toHaveBeenCalledTimes(2); 437 | expect(mockOnSubmit).toHaveBeenCalledTimes(2); 438 | expect(get(isSubmitting)).toBeFalsy(); 439 | }); 440 | }); 441 | 442 | test('calls submit handler without event', async () => { 443 | const { createSubmitHandler, isSubmitting } = createForm({ 444 | onSubmit: jest.fn(), 445 | }); 446 | const mockOnSubmit = jest.fn(); 447 | const altOnSubmit = createSubmitHandler({ onSubmit: mockOnSubmit }); 448 | altOnSubmit(); 449 | await waitFor(() => { 450 | expect(mockOnSubmit).toHaveBeenCalled(); 451 | expect(get(isSubmitting)).toBeFalsy(); 452 | }); 453 | }); 454 | }); 455 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "node", 4 | "target": "es2017", 5 | "isolatedModules": true, 6 | "strict": true, 7 | "module": "es2020", 8 | "esModuleInterop": true, 9 | "skipLibCheck": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "declaration": true, 12 | "declarationMap": true, 13 | "declarationDir": "./dist" 14 | }, 15 | "typedocOptions": { 16 | "entryPoints": ["src/index.ts"], 17 | "out": "docs", 18 | "categoryOrder": ["Main", "Helper", "*"] 19 | }, 20 | "include": ["src"] 21 | } 22 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": 6 | version "7.12.13" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" 8 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== 9 | dependencies: 10 | "@babel/highlight" "^7.12.13" 11 | 12 | "@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": 13 | version "7.13.12" 14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" 15 | integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== 16 | 17 | "@babel/core@^7.13.10": 18 | version "7.13.10" 19 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" 20 | integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== 21 | dependencies: 22 | "@babel/code-frame" "^7.12.13" 23 | "@babel/generator" "^7.13.9" 24 | "@babel/helper-compilation-targets" "^7.13.10" 25 | "@babel/helper-module-transforms" "^7.13.0" 26 | "@babel/helpers" "^7.13.10" 27 | "@babel/parser" "^7.13.10" 28 | "@babel/template" "^7.12.13" 29 | "@babel/traverse" "^7.13.0" 30 | "@babel/types" "^7.13.0" 31 | convert-source-map "^1.7.0" 32 | debug "^4.1.0" 33 | gensync "^1.0.0-beta.2" 34 | json5 "^2.1.2" 35 | lodash "^4.17.19" 36 | semver "^6.3.0" 37 | source-map "^0.5.0" 38 | 39 | "@babel/generator@^7.13.0", "@babel/generator@^7.13.9": 40 | version "7.13.9" 41 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" 42 | integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== 43 | dependencies: 44 | "@babel/types" "^7.13.0" 45 | jsesc "^2.5.1" 46 | source-map "^0.5.0" 47 | 48 | "@babel/helper-annotate-as-pure@^7.12.13": 49 | version "7.12.13" 50 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" 51 | integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== 52 | dependencies: 53 | "@babel/types" "^7.12.13" 54 | 55 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": 56 | version "7.12.13" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" 58 | integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== 59 | dependencies: 60 | "@babel/helper-explode-assignable-expression" "^7.12.13" 61 | "@babel/types" "^7.12.13" 62 | 63 | "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.8": 64 | version "7.13.10" 65 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" 66 | integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== 67 | dependencies: 68 | "@babel/compat-data" "^7.13.8" 69 | "@babel/helper-validator-option" "^7.12.17" 70 | browserslist "^4.14.5" 71 | semver "^6.3.0" 72 | 73 | "@babel/helper-create-class-features-plugin@^7.13.0": 74 | version "7.13.11" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" 76 | integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== 77 | dependencies: 78 | "@babel/helper-function-name" "^7.12.13" 79 | "@babel/helper-member-expression-to-functions" "^7.13.0" 80 | "@babel/helper-optimise-call-expression" "^7.12.13" 81 | "@babel/helper-replace-supers" "^7.13.0" 82 | "@babel/helper-split-export-declaration" "^7.12.13" 83 | 84 | "@babel/helper-create-regexp-features-plugin@^7.12.13": 85 | version "7.12.17" 86 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" 87 | integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== 88 | dependencies: 89 | "@babel/helper-annotate-as-pure" "^7.12.13" 90 | regexpu-core "^4.7.1" 91 | 92 | "@babel/helper-define-polyfill-provider@^0.1.5": 93 | version "0.1.5" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" 95 | integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== 96 | dependencies: 97 | "@babel/helper-compilation-targets" "^7.13.0" 98 | "@babel/helper-module-imports" "^7.12.13" 99 | "@babel/helper-plugin-utils" "^7.13.0" 100 | "@babel/traverse" "^7.13.0" 101 | debug "^4.1.1" 102 | lodash.debounce "^4.0.8" 103 | resolve "^1.14.2" 104 | semver "^6.1.2" 105 | 106 | "@babel/helper-explode-assignable-expression@^7.12.13": 107 | version "7.13.0" 108 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" 109 | integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== 110 | dependencies: 111 | "@babel/types" "^7.13.0" 112 | 113 | "@babel/helper-function-name@^7.12.13": 114 | version "7.12.13" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" 116 | integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== 117 | dependencies: 118 | "@babel/helper-get-function-arity" "^7.12.13" 119 | "@babel/template" "^7.12.13" 120 | "@babel/types" "^7.12.13" 121 | 122 | "@babel/helper-get-function-arity@^7.12.13": 123 | version "7.12.13" 124 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" 125 | integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== 126 | dependencies: 127 | "@babel/types" "^7.12.13" 128 | 129 | "@babel/helper-hoist-variables@^7.13.0": 130 | version "7.13.0" 131 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" 132 | integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== 133 | dependencies: 134 | "@babel/traverse" "^7.13.0" 135 | "@babel/types" "^7.13.0" 136 | 137 | "@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": 138 | version "7.13.12" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" 140 | integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== 141 | dependencies: 142 | "@babel/types" "^7.13.12" 143 | 144 | "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": 145 | version "7.13.12" 146 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" 147 | integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== 148 | dependencies: 149 | "@babel/types" "^7.13.12" 150 | 151 | "@babel/helper-module-transforms@^7.13.0": 152 | version "7.13.12" 153 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz#600e58350490828d82282631a1422268e982ba96" 154 | integrity sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ== 155 | dependencies: 156 | "@babel/helper-module-imports" "^7.13.12" 157 | "@babel/helper-replace-supers" "^7.13.12" 158 | "@babel/helper-simple-access" "^7.13.12" 159 | "@babel/helper-split-export-declaration" "^7.12.13" 160 | "@babel/helper-validator-identifier" "^7.12.11" 161 | "@babel/template" "^7.12.13" 162 | "@babel/traverse" "^7.13.0" 163 | "@babel/types" "^7.13.12" 164 | 165 | "@babel/helper-optimise-call-expression@^7.12.13": 166 | version "7.12.13" 167 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" 168 | integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== 169 | dependencies: 170 | "@babel/types" "^7.12.13" 171 | 172 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": 173 | version "7.13.0" 174 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" 175 | integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== 176 | 177 | "@babel/helper-remap-async-to-generator@^7.13.0": 178 | version "7.13.0" 179 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" 180 | integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== 181 | dependencies: 182 | "@babel/helper-annotate-as-pure" "^7.12.13" 183 | "@babel/helper-wrap-function" "^7.13.0" 184 | "@babel/types" "^7.13.0" 185 | 186 | "@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": 187 | version "7.13.12" 188 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" 189 | integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== 190 | dependencies: 191 | "@babel/helper-member-expression-to-functions" "^7.13.12" 192 | "@babel/helper-optimise-call-expression" "^7.12.13" 193 | "@babel/traverse" "^7.13.0" 194 | "@babel/types" "^7.13.12" 195 | 196 | "@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": 197 | version "7.13.12" 198 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" 199 | integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== 200 | dependencies: 201 | "@babel/types" "^7.13.12" 202 | 203 | "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": 204 | version "7.12.1" 205 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" 206 | integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== 207 | dependencies: 208 | "@babel/types" "^7.12.1" 209 | 210 | "@babel/helper-split-export-declaration@^7.12.13": 211 | version "7.12.13" 212 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" 213 | integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== 214 | dependencies: 215 | "@babel/types" "^7.12.13" 216 | 217 | "@babel/helper-validator-identifier@^7.12.11": 218 | version "7.12.11" 219 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 220 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 221 | 222 | "@babel/helper-validator-option@^7.12.17": 223 | version "7.12.17" 224 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" 225 | integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== 226 | 227 | "@babel/helper-wrap-function@^7.13.0": 228 | version "7.13.0" 229 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" 230 | integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== 231 | dependencies: 232 | "@babel/helper-function-name" "^7.12.13" 233 | "@babel/template" "^7.12.13" 234 | "@babel/traverse" "^7.13.0" 235 | "@babel/types" "^7.13.0" 236 | 237 | "@babel/helpers@^7.13.10": 238 | version "7.13.10" 239 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" 240 | integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== 241 | dependencies: 242 | "@babel/template" "^7.12.13" 243 | "@babel/traverse" "^7.13.0" 244 | "@babel/types" "^7.13.0" 245 | 246 | "@babel/highlight@^7.12.13": 247 | version "7.13.10" 248 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" 249 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== 250 | dependencies: 251 | "@babel/helper-validator-identifier" "^7.12.11" 252 | chalk "^2.0.0" 253 | js-tokens "^4.0.0" 254 | 255 | "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": 256 | version "7.13.12" 257 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.12.tgz#ba320059420774394d3b0c0233ba40e4250b81d1" 258 | integrity sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw== 259 | 260 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": 261 | version "7.13.12" 262 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" 263 | integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== 264 | dependencies: 265 | "@babel/helper-plugin-utils" "^7.13.0" 266 | "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" 267 | "@babel/plugin-proposal-optional-chaining" "^7.13.12" 268 | 269 | "@babel/plugin-proposal-async-generator-functions@^7.13.8": 270 | version "7.13.8" 271 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" 272 | integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== 273 | dependencies: 274 | "@babel/helper-plugin-utils" "^7.13.0" 275 | "@babel/helper-remap-async-to-generator" "^7.13.0" 276 | "@babel/plugin-syntax-async-generators" "^7.8.4" 277 | 278 | "@babel/plugin-proposal-class-properties@^7.13.0": 279 | version "7.13.0" 280 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" 281 | integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== 282 | dependencies: 283 | "@babel/helper-create-class-features-plugin" "^7.13.0" 284 | "@babel/helper-plugin-utils" "^7.13.0" 285 | 286 | "@babel/plugin-proposal-dynamic-import@^7.13.8": 287 | version "7.13.8" 288 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" 289 | integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== 290 | dependencies: 291 | "@babel/helper-plugin-utils" "^7.13.0" 292 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 293 | 294 | "@babel/plugin-proposal-export-namespace-from@^7.12.13": 295 | version "7.12.13" 296 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" 297 | integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== 298 | dependencies: 299 | "@babel/helper-plugin-utils" "^7.12.13" 300 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 301 | 302 | "@babel/plugin-proposal-json-strings@^7.13.8": 303 | version "7.13.8" 304 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" 305 | integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== 306 | dependencies: 307 | "@babel/helper-plugin-utils" "^7.13.0" 308 | "@babel/plugin-syntax-json-strings" "^7.8.3" 309 | 310 | "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": 311 | version "7.13.8" 312 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" 313 | integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== 314 | dependencies: 315 | "@babel/helper-plugin-utils" "^7.13.0" 316 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 317 | 318 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": 319 | version "7.13.8" 320 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" 321 | integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== 322 | dependencies: 323 | "@babel/helper-plugin-utils" "^7.13.0" 324 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 325 | 326 | "@babel/plugin-proposal-numeric-separator@^7.12.13": 327 | version "7.12.13" 328 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" 329 | integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== 330 | dependencies: 331 | "@babel/helper-plugin-utils" "^7.12.13" 332 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 333 | 334 | "@babel/plugin-proposal-object-rest-spread@^7.13.8": 335 | version "7.13.8" 336 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" 337 | integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== 338 | dependencies: 339 | "@babel/compat-data" "^7.13.8" 340 | "@babel/helper-compilation-targets" "^7.13.8" 341 | "@babel/helper-plugin-utils" "^7.13.0" 342 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 343 | "@babel/plugin-transform-parameters" "^7.13.0" 344 | 345 | "@babel/plugin-proposal-optional-catch-binding@^7.13.8": 346 | version "7.13.8" 347 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" 348 | integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== 349 | dependencies: 350 | "@babel/helper-plugin-utils" "^7.13.0" 351 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 352 | 353 | "@babel/plugin-proposal-optional-chaining@^7.13.12": 354 | version "7.13.12" 355 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" 356 | integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== 357 | dependencies: 358 | "@babel/helper-plugin-utils" "^7.13.0" 359 | "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" 360 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 361 | 362 | "@babel/plugin-proposal-private-methods@^7.13.0": 363 | version "7.13.0" 364 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" 365 | integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== 366 | dependencies: 367 | "@babel/helper-create-class-features-plugin" "^7.13.0" 368 | "@babel/helper-plugin-utils" "^7.13.0" 369 | 370 | "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": 371 | version "7.12.13" 372 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" 373 | integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== 374 | dependencies: 375 | "@babel/helper-create-regexp-features-plugin" "^7.12.13" 376 | "@babel/helper-plugin-utils" "^7.12.13" 377 | 378 | "@babel/plugin-syntax-async-generators@^7.8.4": 379 | version "7.8.4" 380 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 381 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 382 | dependencies: 383 | "@babel/helper-plugin-utils" "^7.8.0" 384 | 385 | "@babel/plugin-syntax-class-properties@^7.12.13": 386 | version "7.12.13" 387 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 388 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 389 | dependencies: 390 | "@babel/helper-plugin-utils" "^7.12.13" 391 | 392 | "@babel/plugin-syntax-dynamic-import@^7.8.3": 393 | version "7.8.3" 394 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" 395 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== 396 | dependencies: 397 | "@babel/helper-plugin-utils" "^7.8.0" 398 | 399 | "@babel/plugin-syntax-export-namespace-from@^7.8.3": 400 | version "7.8.3" 401 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" 402 | integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== 403 | dependencies: 404 | "@babel/helper-plugin-utils" "^7.8.3" 405 | 406 | "@babel/plugin-syntax-json-strings@^7.8.3": 407 | version "7.8.3" 408 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 409 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 410 | dependencies: 411 | "@babel/helper-plugin-utils" "^7.8.0" 412 | 413 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 414 | version "7.10.4" 415 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 416 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 417 | dependencies: 418 | "@babel/helper-plugin-utils" "^7.10.4" 419 | 420 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 421 | version "7.8.3" 422 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 423 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 424 | dependencies: 425 | "@babel/helper-plugin-utils" "^7.8.0" 426 | 427 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 428 | version "7.10.4" 429 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 430 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 431 | dependencies: 432 | "@babel/helper-plugin-utils" "^7.10.4" 433 | 434 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 435 | version "7.8.3" 436 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 437 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 438 | dependencies: 439 | "@babel/helper-plugin-utils" "^7.8.0" 440 | 441 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 442 | version "7.8.3" 443 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 444 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 445 | dependencies: 446 | "@babel/helper-plugin-utils" "^7.8.0" 447 | 448 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 449 | version "7.8.3" 450 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 451 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 452 | dependencies: 453 | "@babel/helper-plugin-utils" "^7.8.0" 454 | 455 | "@babel/plugin-syntax-top-level-await@^7.12.13": 456 | version "7.12.13" 457 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" 458 | integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== 459 | dependencies: 460 | "@babel/helper-plugin-utils" "^7.12.13" 461 | 462 | "@babel/plugin-transform-arrow-functions@^7.13.0": 463 | version "7.13.0" 464 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" 465 | integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== 466 | dependencies: 467 | "@babel/helper-plugin-utils" "^7.13.0" 468 | 469 | "@babel/plugin-transform-async-to-generator@^7.13.0": 470 | version "7.13.0" 471 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" 472 | integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== 473 | dependencies: 474 | "@babel/helper-module-imports" "^7.12.13" 475 | "@babel/helper-plugin-utils" "^7.13.0" 476 | "@babel/helper-remap-async-to-generator" "^7.13.0" 477 | 478 | "@babel/plugin-transform-block-scoped-functions@^7.12.13": 479 | version "7.12.13" 480 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" 481 | integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== 482 | dependencies: 483 | "@babel/helper-plugin-utils" "^7.12.13" 484 | 485 | "@babel/plugin-transform-block-scoping@^7.12.13": 486 | version "7.12.13" 487 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" 488 | integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== 489 | dependencies: 490 | "@babel/helper-plugin-utils" "^7.12.13" 491 | 492 | "@babel/plugin-transform-classes@^7.13.0": 493 | version "7.13.0" 494 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" 495 | integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== 496 | dependencies: 497 | "@babel/helper-annotate-as-pure" "^7.12.13" 498 | "@babel/helper-function-name" "^7.12.13" 499 | "@babel/helper-optimise-call-expression" "^7.12.13" 500 | "@babel/helper-plugin-utils" "^7.13.0" 501 | "@babel/helper-replace-supers" "^7.13.0" 502 | "@babel/helper-split-export-declaration" "^7.12.13" 503 | globals "^11.1.0" 504 | 505 | "@babel/plugin-transform-computed-properties@^7.13.0": 506 | version "7.13.0" 507 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" 508 | integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== 509 | dependencies: 510 | "@babel/helper-plugin-utils" "^7.13.0" 511 | 512 | "@babel/plugin-transform-destructuring@^7.13.0": 513 | version "7.13.0" 514 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" 515 | integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== 516 | dependencies: 517 | "@babel/helper-plugin-utils" "^7.13.0" 518 | 519 | "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": 520 | version "7.12.13" 521 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" 522 | integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== 523 | dependencies: 524 | "@babel/helper-create-regexp-features-plugin" "^7.12.13" 525 | "@babel/helper-plugin-utils" "^7.12.13" 526 | 527 | "@babel/plugin-transform-duplicate-keys@^7.12.13": 528 | version "7.12.13" 529 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" 530 | integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== 531 | dependencies: 532 | "@babel/helper-plugin-utils" "^7.12.13" 533 | 534 | "@babel/plugin-transform-exponentiation-operator@^7.12.13": 535 | version "7.12.13" 536 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" 537 | integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== 538 | dependencies: 539 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" 540 | "@babel/helper-plugin-utils" "^7.12.13" 541 | 542 | "@babel/plugin-transform-for-of@^7.13.0": 543 | version "7.13.0" 544 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" 545 | integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== 546 | dependencies: 547 | "@babel/helper-plugin-utils" "^7.13.0" 548 | 549 | "@babel/plugin-transform-function-name@^7.12.13": 550 | version "7.12.13" 551 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" 552 | integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== 553 | dependencies: 554 | "@babel/helper-function-name" "^7.12.13" 555 | "@babel/helper-plugin-utils" "^7.12.13" 556 | 557 | "@babel/plugin-transform-literals@^7.12.13": 558 | version "7.12.13" 559 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" 560 | integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== 561 | dependencies: 562 | "@babel/helper-plugin-utils" "^7.12.13" 563 | 564 | "@babel/plugin-transform-member-expression-literals@^7.12.13": 565 | version "7.12.13" 566 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" 567 | integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== 568 | dependencies: 569 | "@babel/helper-plugin-utils" "^7.12.13" 570 | 571 | "@babel/plugin-transform-modules-amd@^7.13.0": 572 | version "7.13.0" 573 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" 574 | integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== 575 | dependencies: 576 | "@babel/helper-module-transforms" "^7.13.0" 577 | "@babel/helper-plugin-utils" "^7.13.0" 578 | babel-plugin-dynamic-import-node "^2.3.3" 579 | 580 | "@babel/plugin-transform-modules-commonjs@^7.13.8": 581 | version "7.13.8" 582 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" 583 | integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== 584 | dependencies: 585 | "@babel/helper-module-transforms" "^7.13.0" 586 | "@babel/helper-plugin-utils" "^7.13.0" 587 | "@babel/helper-simple-access" "^7.12.13" 588 | babel-plugin-dynamic-import-node "^2.3.3" 589 | 590 | "@babel/plugin-transform-modules-systemjs@^7.13.8": 591 | version "7.13.8" 592 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" 593 | integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== 594 | dependencies: 595 | "@babel/helper-hoist-variables" "^7.13.0" 596 | "@babel/helper-module-transforms" "^7.13.0" 597 | "@babel/helper-plugin-utils" "^7.13.0" 598 | "@babel/helper-validator-identifier" "^7.12.11" 599 | babel-plugin-dynamic-import-node "^2.3.3" 600 | 601 | "@babel/plugin-transform-modules-umd@^7.13.0": 602 | version "7.13.0" 603 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" 604 | integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== 605 | dependencies: 606 | "@babel/helper-module-transforms" "^7.13.0" 607 | "@babel/helper-plugin-utils" "^7.13.0" 608 | 609 | "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": 610 | version "7.12.13" 611 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" 612 | integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== 613 | dependencies: 614 | "@babel/helper-create-regexp-features-plugin" "^7.12.13" 615 | 616 | "@babel/plugin-transform-new-target@^7.12.13": 617 | version "7.12.13" 618 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" 619 | integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== 620 | dependencies: 621 | "@babel/helper-plugin-utils" "^7.12.13" 622 | 623 | "@babel/plugin-transform-object-super@^7.12.13": 624 | version "7.12.13" 625 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" 626 | integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== 627 | dependencies: 628 | "@babel/helper-plugin-utils" "^7.12.13" 629 | "@babel/helper-replace-supers" "^7.12.13" 630 | 631 | "@babel/plugin-transform-parameters@^7.13.0": 632 | version "7.13.0" 633 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" 634 | integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== 635 | dependencies: 636 | "@babel/helper-plugin-utils" "^7.13.0" 637 | 638 | "@babel/plugin-transform-property-literals@^7.12.13": 639 | version "7.12.13" 640 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" 641 | integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== 642 | dependencies: 643 | "@babel/helper-plugin-utils" "^7.12.13" 644 | 645 | "@babel/plugin-transform-regenerator@^7.12.13": 646 | version "7.12.13" 647 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" 648 | integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== 649 | dependencies: 650 | regenerator-transform "^0.14.2" 651 | 652 | "@babel/plugin-transform-reserved-words@^7.12.13": 653 | version "7.12.13" 654 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" 655 | integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== 656 | dependencies: 657 | "@babel/helper-plugin-utils" "^7.12.13" 658 | 659 | "@babel/plugin-transform-runtime@^7.13.10": 660 | version "7.13.10" 661 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz#a1e40d22e2bf570c591c9c7e5ab42d6bf1e419e1" 662 | integrity sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA== 663 | dependencies: 664 | "@babel/helper-module-imports" "^7.12.13" 665 | "@babel/helper-plugin-utils" "^7.13.0" 666 | babel-plugin-polyfill-corejs2 "^0.1.4" 667 | babel-plugin-polyfill-corejs3 "^0.1.3" 668 | babel-plugin-polyfill-regenerator "^0.1.2" 669 | semver "^6.3.0" 670 | 671 | "@babel/plugin-transform-shorthand-properties@^7.12.13": 672 | version "7.12.13" 673 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" 674 | integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== 675 | dependencies: 676 | "@babel/helper-plugin-utils" "^7.12.13" 677 | 678 | "@babel/plugin-transform-spread@^7.13.0": 679 | version "7.13.0" 680 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" 681 | integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== 682 | dependencies: 683 | "@babel/helper-plugin-utils" "^7.13.0" 684 | "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" 685 | 686 | "@babel/plugin-transform-sticky-regex@^7.12.13": 687 | version "7.12.13" 688 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" 689 | integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== 690 | dependencies: 691 | "@babel/helper-plugin-utils" "^7.12.13" 692 | 693 | "@babel/plugin-transform-template-literals@^7.13.0": 694 | version "7.13.0" 695 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" 696 | integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== 697 | dependencies: 698 | "@babel/helper-plugin-utils" "^7.13.0" 699 | 700 | "@babel/plugin-transform-typeof-symbol@^7.12.13": 701 | version "7.12.13" 702 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" 703 | integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== 704 | dependencies: 705 | "@babel/helper-plugin-utils" "^7.12.13" 706 | 707 | "@babel/plugin-transform-unicode-escapes@^7.12.13": 708 | version "7.12.13" 709 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" 710 | integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== 711 | dependencies: 712 | "@babel/helper-plugin-utils" "^7.12.13" 713 | 714 | "@babel/plugin-transform-unicode-regex@^7.12.13": 715 | version "7.12.13" 716 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" 717 | integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== 718 | dependencies: 719 | "@babel/helper-create-regexp-features-plugin" "^7.12.13" 720 | "@babel/helper-plugin-utils" "^7.12.13" 721 | 722 | "@babel/preset-env@^7.13.12": 723 | version "7.13.12" 724 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" 725 | integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== 726 | dependencies: 727 | "@babel/compat-data" "^7.13.12" 728 | "@babel/helper-compilation-targets" "^7.13.10" 729 | "@babel/helper-plugin-utils" "^7.13.0" 730 | "@babel/helper-validator-option" "^7.12.17" 731 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" 732 | "@babel/plugin-proposal-async-generator-functions" "^7.13.8" 733 | "@babel/plugin-proposal-class-properties" "^7.13.0" 734 | "@babel/plugin-proposal-dynamic-import" "^7.13.8" 735 | "@babel/plugin-proposal-export-namespace-from" "^7.12.13" 736 | "@babel/plugin-proposal-json-strings" "^7.13.8" 737 | "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" 738 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" 739 | "@babel/plugin-proposal-numeric-separator" "^7.12.13" 740 | "@babel/plugin-proposal-object-rest-spread" "^7.13.8" 741 | "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" 742 | "@babel/plugin-proposal-optional-chaining" "^7.13.12" 743 | "@babel/plugin-proposal-private-methods" "^7.13.0" 744 | "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" 745 | "@babel/plugin-syntax-async-generators" "^7.8.4" 746 | "@babel/plugin-syntax-class-properties" "^7.12.13" 747 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 748 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 749 | "@babel/plugin-syntax-json-strings" "^7.8.3" 750 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 751 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 752 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 753 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 754 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 755 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 756 | "@babel/plugin-syntax-top-level-await" "^7.12.13" 757 | "@babel/plugin-transform-arrow-functions" "^7.13.0" 758 | "@babel/plugin-transform-async-to-generator" "^7.13.0" 759 | "@babel/plugin-transform-block-scoped-functions" "^7.12.13" 760 | "@babel/plugin-transform-block-scoping" "^7.12.13" 761 | "@babel/plugin-transform-classes" "^7.13.0" 762 | "@babel/plugin-transform-computed-properties" "^7.13.0" 763 | "@babel/plugin-transform-destructuring" "^7.13.0" 764 | "@babel/plugin-transform-dotall-regex" "^7.12.13" 765 | "@babel/plugin-transform-duplicate-keys" "^7.12.13" 766 | "@babel/plugin-transform-exponentiation-operator" "^7.12.13" 767 | "@babel/plugin-transform-for-of" "^7.13.0" 768 | "@babel/plugin-transform-function-name" "^7.12.13" 769 | "@babel/plugin-transform-literals" "^7.12.13" 770 | "@babel/plugin-transform-member-expression-literals" "^7.12.13" 771 | "@babel/plugin-transform-modules-amd" "^7.13.0" 772 | "@babel/plugin-transform-modules-commonjs" "^7.13.8" 773 | "@babel/plugin-transform-modules-systemjs" "^7.13.8" 774 | "@babel/plugin-transform-modules-umd" "^7.13.0" 775 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" 776 | "@babel/plugin-transform-new-target" "^7.12.13" 777 | "@babel/plugin-transform-object-super" "^7.12.13" 778 | "@babel/plugin-transform-parameters" "^7.13.0" 779 | "@babel/plugin-transform-property-literals" "^7.12.13" 780 | "@babel/plugin-transform-regenerator" "^7.12.13" 781 | "@babel/plugin-transform-reserved-words" "^7.12.13" 782 | "@babel/plugin-transform-shorthand-properties" "^7.12.13" 783 | "@babel/plugin-transform-spread" "^7.13.0" 784 | "@babel/plugin-transform-sticky-regex" "^7.12.13" 785 | "@babel/plugin-transform-template-literals" "^7.13.0" 786 | "@babel/plugin-transform-typeof-symbol" "^7.12.13" 787 | "@babel/plugin-transform-unicode-escapes" "^7.12.13" 788 | "@babel/plugin-transform-unicode-regex" "^7.12.13" 789 | "@babel/preset-modules" "^0.1.4" 790 | "@babel/types" "^7.13.12" 791 | babel-plugin-polyfill-corejs2 "^0.1.4" 792 | babel-plugin-polyfill-corejs3 "^0.1.3" 793 | babel-plugin-polyfill-regenerator "^0.1.2" 794 | core-js-compat "^3.9.0" 795 | semver "^6.3.0" 796 | 797 | "@babel/preset-modules@^0.1.4": 798 | version "0.1.4" 799 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" 800 | integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== 801 | dependencies: 802 | "@babel/helper-plugin-utils" "^7.0.0" 803 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" 804 | "@babel/plugin-transform-dotall-regex" "^7.4.4" 805 | "@babel/types" "^7.4.4" 806 | esutils "^2.0.2" 807 | 808 | "@babel/runtime@^7.13.10", "@babel/runtime@^7.8.4": 809 | version "7.13.10" 810 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" 811 | integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== 812 | dependencies: 813 | regenerator-runtime "^0.13.4" 814 | 815 | "@babel/template@^7.12.13": 816 | version "7.12.13" 817 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" 818 | integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== 819 | dependencies: 820 | "@babel/code-frame" "^7.12.13" 821 | "@babel/parser" "^7.12.13" 822 | "@babel/types" "^7.12.13" 823 | 824 | "@babel/traverse@^7.13.0": 825 | version "7.13.0" 826 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" 827 | integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== 828 | dependencies: 829 | "@babel/code-frame" "^7.12.13" 830 | "@babel/generator" "^7.13.0" 831 | "@babel/helper-function-name" "^7.12.13" 832 | "@babel/helper-split-export-declaration" "^7.12.13" 833 | "@babel/parser" "^7.13.0" 834 | "@babel/types" "^7.13.0" 835 | debug "^4.1.0" 836 | globals "^11.1.0" 837 | lodash "^4.17.19" 838 | 839 | "@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.3.0", "@babel/types@^7.4.4": 840 | version "7.13.12" 841 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.12.tgz#edbf99208ef48852acdff1c8a681a1e4ade580cd" 842 | integrity sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA== 843 | dependencies: 844 | "@babel/helper-validator-identifier" "^7.12.11" 845 | lodash "^4.17.19" 846 | to-fast-properties "^2.0.0" 847 | 848 | "@editorjs/editorjs@^2.19.3": 849 | version "2.19.3" 850 | resolved "https://registry.yarnpkg.com/@editorjs/editorjs/-/editorjs-2.19.3.tgz#cb0c804bf06f9953f8a78d6af8c7fa85ca2d804f" 851 | integrity sha512-2IdR164W1csszDZmtCu91q0q7iQ39BBl82bGlNGaXTEiVLr0sySPcmM7v/3DITldEjE+Uovupclba8YAi40KKQ== 852 | dependencies: 853 | codex-notifier "^1.1.2" 854 | codex-tooltip "^1.0.1" 855 | 856 | "@mdn/browser-compat-data@^3.2.1": 857 | version "3.2.1" 858 | resolved "https://registry.yarnpkg.com/@mdn/browser-compat-data/-/browser-compat-data-3.2.1.tgz#18707a79db035b430d6bab370d00cd14c39e0553" 859 | integrity sha512-rIfqD67k64yP6RfFyZOVSLykDoNfAkeqRrTZnKs13rfa+EAFF/FOYAKTOpKMwMUfTM2/+FGYRGaiFmETnGRjsQ== 860 | dependencies: 861 | extend "3.0.2" 862 | 863 | "@rollup/plugin-commonjs@^17.1.0": 864 | version "17.1.0" 865 | resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" 866 | integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== 867 | dependencies: 868 | "@rollup/pluginutils" "^3.1.0" 869 | commondir "^1.0.1" 870 | estree-walker "^2.0.1" 871 | glob "^7.1.6" 872 | is-reference "^1.2.1" 873 | magic-string "^0.25.7" 874 | resolve "^1.17.0" 875 | 876 | "@rollup/plugin-node-resolve@^11.2.0": 877 | version "11.2.0" 878 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz#a5ab88c35bb7622d115f44984dee305112b6f714" 879 | integrity sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA== 880 | dependencies: 881 | "@rollup/pluginutils" "^3.1.0" 882 | "@types/resolve" "1.17.1" 883 | builtin-modules "^3.1.0" 884 | deepmerge "^4.2.2" 885 | is-module "^1.0.0" 886 | resolve "^1.19.0" 887 | 888 | "@rollup/plugin-replace@^2.4.1": 889 | version "2.4.1" 890 | resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.1.tgz#c411b5ab72809fb1bfc8b487d8d02eef661460d3" 891 | integrity sha512-XwC1oK5rrtRJ0tn1ioLHS6OV5JTluJF7QE1J/q1hN3bquwjnVxjtMyY9iCnoyH9DQbf92CxajB3o98wZbP3oAQ== 892 | dependencies: 893 | "@rollup/pluginutils" "^3.1.0" 894 | magic-string "^0.25.7" 895 | 896 | "@rollup/pluginutils@^3.1.0": 897 | version "3.1.0" 898 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 899 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 900 | dependencies: 901 | "@types/estree" "0.0.39" 902 | estree-walker "^1.0.1" 903 | picomatch "^2.2.2" 904 | 905 | "@rollup/pluginutils@^4.1.0": 906 | version "4.1.0" 907 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" 908 | integrity sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ== 909 | dependencies: 910 | estree-walker "^2.0.1" 911 | picomatch "^2.2.2" 912 | 913 | "@types/babel__core@^7.1.14": 914 | version "7.1.14" 915 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" 916 | integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== 917 | dependencies: 918 | "@babel/parser" "^7.1.0" 919 | "@babel/types" "^7.0.0" 920 | "@types/babel__generator" "*" 921 | "@types/babel__template" "*" 922 | "@types/babel__traverse" "*" 923 | 924 | "@types/babel__generator@*": 925 | version "7.6.2" 926 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" 927 | integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== 928 | dependencies: 929 | "@babel/types" "^7.0.0" 930 | 931 | "@types/babel__template@*": 932 | version "7.4.0" 933 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" 934 | integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== 935 | dependencies: 936 | "@babel/parser" "^7.1.0" 937 | "@babel/types" "^7.0.0" 938 | 939 | "@types/babel__traverse@*": 940 | version "7.11.1" 941 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" 942 | integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== 943 | dependencies: 944 | "@babel/types" "^7.3.0" 945 | 946 | "@types/estree@*": 947 | version "0.0.47" 948 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" 949 | integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== 950 | 951 | "@types/estree@0.0.39": 952 | version "0.0.39" 953 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 954 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 955 | 956 | "@types/node@*": 957 | version "14.14.35" 958 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" 959 | integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== 960 | 961 | "@types/object-path@^0.11.0": 962 | version "0.11.0" 963 | resolved "https://registry.yarnpkg.com/@types/object-path/-/object-path-0.11.0.tgz#0b744309b2573dc8bf867ef589b6288be998e602" 964 | integrity sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ== 965 | 966 | "@types/resolve@1.17.1": 967 | version "1.17.1" 968 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 969 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 970 | dependencies: 971 | "@types/node" "*" 972 | 973 | "@types/semver@^7.3.4": 974 | version "7.3.4" 975 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" 976 | integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== 977 | 978 | "@types/ua-parser-js@^0.7.35": 979 | version "0.7.35" 980 | resolved "https://registry.yarnpkg.com/@types/ua-parser-js/-/ua-parser-js-0.7.35.tgz#cca67a95deb9165e4b1f449471801e6489d3fe93" 981 | integrity sha512-PsPx0RLbo2Un8+ff2buzYJnZjzwhD3jQHPOG2PtVIeOhkRDddMcKU8vJtHpzzfLB95dkUi0qAkfLg2l2Fd0yrQ== 982 | 983 | "@wessberg/browserslist-generator@^1.0.46": 984 | version "1.0.46" 985 | resolved "https://registry.yarnpkg.com/@wessberg/browserslist-generator/-/browserslist-generator-1.0.46.tgz#267bc6c88c6c976c405674253c65d51886b88ae6" 986 | integrity sha512-YRpzCuSlCTR48XdENlZryU+aB9guyTL/bhc9HVhA8P11drRedwhdnqAKM+uGRUF1hxNLWgExdvw+uBY/L5YIDQ== 987 | dependencies: 988 | "@mdn/browser-compat-data" "^3.2.1" 989 | "@types/object-path" "^0.11.0" 990 | "@types/semver" "^7.3.4" 991 | "@types/ua-parser-js" "^0.7.35" 992 | browserslist "4.16.3" 993 | caniuse-lite "^1.0.30001204" 994 | object-path "^0.11.5" 995 | semver "^7.3.5" 996 | ua-parser-js "^0.7.25" 997 | 998 | "@wessberg/rollup-plugin-ts@^1.3.11": 999 | version "1.3.11" 1000 | resolved "https://registry.yarnpkg.com/@wessberg/rollup-plugin-ts/-/rollup-plugin-ts-1.3.11.tgz#ed2f005993b9ff3a19a072b7eef65b207ba6fe01" 1001 | integrity sha512-vdV9oRjQxKInqK7iOrvnEkRjCoMDFqd33r+OQ/U9IlhwlJAzUuP1hGxD5fm7Qdxh9sHCRKYb41zZuU6AwgGZaw== 1002 | dependencies: 1003 | "@babel/core" "^7.13.10" 1004 | "@babel/plugin-proposal-async-generator-functions" "^7.13.8" 1005 | "@babel/plugin-proposal-json-strings" "^7.13.8" 1006 | "@babel/plugin-proposal-object-rest-spread" "^7.13.8" 1007 | "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" 1008 | "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" 1009 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 1010 | "@babel/plugin-transform-runtime" "^7.13.10" 1011 | "@babel/preset-env" "^7.13.12" 1012 | "@babel/runtime" "^7.13.10" 1013 | "@rollup/pluginutils" "^4.1.0" 1014 | "@types/babel__core" "^7.1.14" 1015 | "@wessberg/browserslist-generator" "^1.0.46" 1016 | "@wessberg/stringutil" "^1.0.19" 1017 | "@wessberg/ts-clone-node" "^0.3.19" 1018 | browserslist "^4.16.3" 1019 | chalk "^4.1.0" 1020 | magic-string "^0.25.7" 1021 | slash "^3.0.0" 1022 | tslib "^2.1.0" 1023 | 1024 | "@wessberg/stringutil@^1.0.19": 1025 | version "1.0.19" 1026 | resolved "https://registry.yarnpkg.com/@wessberg/stringutil/-/stringutil-1.0.19.tgz#baadcb6f4471fe2d46462a7d7a8294e4b45b29ad" 1027 | integrity sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg== 1028 | 1029 | "@wessberg/ts-clone-node@^0.3.19": 1030 | version "0.3.19" 1031 | resolved "https://registry.yarnpkg.com/@wessberg/ts-clone-node/-/ts-clone-node-0.3.19.tgz#823ed1fa74e4daa310226332322bfca97e264fe3" 1032 | integrity sha512-BnJcU0ZwHxa5runiEkHzMZ6/ydxz+YYqBHOGQtf3eoxSZu2iWMPPaUfCum0O1/Ey5dqrrptUh+HmyMTzHPfdPA== 1033 | 1034 | ansi-styles@^3.2.1: 1035 | version "3.2.1" 1036 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 1037 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 1038 | dependencies: 1039 | color-convert "^1.9.0" 1040 | 1041 | ansi-styles@^4.1.0: 1042 | version "4.3.0" 1043 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 1044 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 1045 | dependencies: 1046 | color-convert "^2.0.1" 1047 | 1048 | babel-plugin-dynamic-import-node@^2.3.3: 1049 | version "2.3.3" 1050 | resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" 1051 | integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== 1052 | dependencies: 1053 | object.assign "^4.1.0" 1054 | 1055 | babel-plugin-polyfill-corejs2@^0.1.4: 1056 | version "0.1.10" 1057 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" 1058 | integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== 1059 | dependencies: 1060 | "@babel/compat-data" "^7.13.0" 1061 | "@babel/helper-define-polyfill-provider" "^0.1.5" 1062 | semver "^6.1.1" 1063 | 1064 | babel-plugin-polyfill-corejs3@^0.1.3: 1065 | version "0.1.7" 1066 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" 1067 | integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== 1068 | dependencies: 1069 | "@babel/helper-define-polyfill-provider" "^0.1.5" 1070 | core-js-compat "^3.8.1" 1071 | 1072 | babel-plugin-polyfill-regenerator@^0.1.2: 1073 | version "0.1.6" 1074 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" 1075 | integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== 1076 | dependencies: 1077 | "@babel/helper-define-polyfill-provider" "^0.1.5" 1078 | 1079 | balanced-match@^1.0.0: 1080 | version "1.0.0" 1081 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 1082 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 1083 | 1084 | brace-expansion@^1.1.7: 1085 | version "1.1.11" 1086 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 1087 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 1088 | dependencies: 1089 | balanced-match "^1.0.0" 1090 | concat-map "0.0.1" 1091 | 1092 | browserslist@4.16.3, browserslist@^4.14.5, browserslist@^4.16.3: 1093 | version "4.16.3" 1094 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" 1095 | integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== 1096 | dependencies: 1097 | caniuse-lite "^1.0.30001181" 1098 | colorette "^1.2.1" 1099 | electron-to-chromium "^1.3.649" 1100 | escalade "^3.1.1" 1101 | node-releases "^1.1.70" 1102 | 1103 | buffer-from@^1.0.0: 1104 | version "1.1.1" 1105 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 1106 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 1107 | 1108 | builtin-modules@^3.1.0: 1109 | version "3.2.0" 1110 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 1111 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 1112 | 1113 | call-bind@^1.0.0: 1114 | version "1.0.2" 1115 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 1116 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 1117 | dependencies: 1118 | function-bind "^1.1.1" 1119 | get-intrinsic "^1.0.2" 1120 | 1121 | caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001204: 1122 | version "1.0.30001204" 1123 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" 1124 | integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== 1125 | 1126 | chalk@^2.0.0: 1127 | version "2.4.2" 1128 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1129 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1130 | dependencies: 1131 | ansi-styles "^3.2.1" 1132 | escape-string-regexp "^1.0.5" 1133 | supports-color "^5.3.0" 1134 | 1135 | chalk@^4.1.0: 1136 | version "4.1.0" 1137 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 1138 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 1139 | dependencies: 1140 | ansi-styles "^4.1.0" 1141 | supports-color "^7.1.0" 1142 | 1143 | codex-notifier@^1.1.2: 1144 | version "1.1.2" 1145 | resolved "https://registry.yarnpkg.com/codex-notifier/-/codex-notifier-1.1.2.tgz#a733079185f4c927fa296f1d71eb8753fe080895" 1146 | integrity sha512-DCp6xe/LGueJ1N5sXEwcBc3r3PyVkEEDNWCVigfvywAkeXcZMk9K41a31tkEFBW0Ptlwji6/JlAb49E3Yrxbtg== 1147 | 1148 | codex-tooltip@^1.0.1: 1149 | version "1.0.2" 1150 | resolved "https://registry.yarnpkg.com/codex-tooltip/-/codex-tooltip-1.0.2.tgz#81a9d3e2937658c6e5312106b47b9f094ff7be63" 1151 | integrity sha512-oC+Bu5X/zyhbPydgMSLWKoM/+vkJMqaLWu3Dt/jZgXS3MWK23INwC5DMBrVXZSufAFk0i0SUni38k9rLMyZn/w== 1152 | 1153 | color-convert@^1.9.0: 1154 | version "1.9.3" 1155 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1156 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1157 | dependencies: 1158 | color-name "1.1.3" 1159 | 1160 | color-convert@^2.0.1: 1161 | version "2.0.1" 1162 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1163 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1164 | dependencies: 1165 | color-name "~1.1.4" 1166 | 1167 | color-name@1.1.3: 1168 | version "1.1.3" 1169 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1170 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1171 | 1172 | color-name@~1.1.4: 1173 | version "1.1.4" 1174 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1175 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1176 | 1177 | colorette@^1.2.1: 1178 | version "1.2.2" 1179 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 1180 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 1181 | 1182 | commander@^2.20.0: 1183 | version "2.20.3" 1184 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1185 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1186 | 1187 | commondir@^1.0.1: 1188 | version "1.0.1" 1189 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1190 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 1191 | 1192 | concat-map@0.0.1: 1193 | version "0.0.1" 1194 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1195 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1196 | 1197 | convert-source-map@^1.7.0: 1198 | version "1.7.0" 1199 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 1200 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 1201 | dependencies: 1202 | safe-buffer "~5.1.1" 1203 | 1204 | core-js-compat@^3.8.1, core-js-compat@^3.9.0: 1205 | version "3.9.1" 1206 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" 1207 | integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== 1208 | dependencies: 1209 | browserslist "^4.16.3" 1210 | semver "7.0.0" 1211 | 1212 | cross-env@^7.0.3: 1213 | version "7.0.3" 1214 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" 1215 | integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== 1216 | dependencies: 1217 | cross-spawn "^7.0.1" 1218 | 1219 | cross-spawn@^7.0.1: 1220 | version "7.0.3" 1221 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1222 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1223 | dependencies: 1224 | path-key "^3.1.0" 1225 | shebang-command "^2.0.0" 1226 | which "^2.0.1" 1227 | 1228 | debug@^4.1.0, debug@^4.1.1: 1229 | version "4.3.1" 1230 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 1231 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 1232 | dependencies: 1233 | ms "2.1.2" 1234 | 1235 | deepmerge@^4.2.2: 1236 | version "4.2.2" 1237 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1238 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1239 | 1240 | define-properties@^1.1.3: 1241 | version "1.1.3" 1242 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1243 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 1244 | dependencies: 1245 | object-keys "^1.0.12" 1246 | 1247 | electron-to-chromium@^1.3.649: 1248 | version "1.3.699" 1249 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.699.tgz#854eea9db8bc8109c409a4807bfdb200dd75a2c7" 1250 | integrity sha512-fjt43CPXdPYwD9ybmKbNeLwZBmCVdLY2J5fGZub7/eMPuiqQznOGNXv/wurnpXIlE7ScHnvG9Zi+H4/i6uMKmw== 1251 | 1252 | escalade@^3.1.1: 1253 | version "3.1.1" 1254 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1255 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1256 | 1257 | escape-string-regexp@^1.0.5: 1258 | version "1.0.5" 1259 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1260 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1261 | 1262 | estree-walker@^1.0.1: 1263 | version "1.0.1" 1264 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 1265 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 1266 | 1267 | estree-walker@^2.0.1: 1268 | version "2.0.2" 1269 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 1270 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 1271 | 1272 | esutils@^2.0.2: 1273 | version "2.0.3" 1274 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1275 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1276 | 1277 | extend@3.0.2: 1278 | version "3.0.2" 1279 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1280 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1281 | 1282 | fs.realpath@^1.0.0: 1283 | version "1.0.0" 1284 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1285 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1286 | 1287 | fsevents@~2.3.1: 1288 | version "2.3.2" 1289 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1290 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1291 | 1292 | function-bind@^1.1.1: 1293 | version "1.1.1" 1294 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1295 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1296 | 1297 | gensync@^1.0.0-beta.2: 1298 | version "1.0.0-beta.2" 1299 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1300 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1301 | 1302 | get-intrinsic@^1.0.2: 1303 | version "1.1.1" 1304 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 1305 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 1306 | dependencies: 1307 | function-bind "^1.1.1" 1308 | has "^1.0.3" 1309 | has-symbols "^1.0.1" 1310 | 1311 | glob@^7.1.3, glob@^7.1.6: 1312 | version "7.1.6" 1313 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1314 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1315 | dependencies: 1316 | fs.realpath "^1.0.0" 1317 | inflight "^1.0.4" 1318 | inherits "2" 1319 | minimatch "^3.0.4" 1320 | once "^1.3.0" 1321 | path-is-absolute "^1.0.0" 1322 | 1323 | globals@^11.1.0: 1324 | version "11.12.0" 1325 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1326 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1327 | 1328 | has-flag@^3.0.0: 1329 | version "3.0.0" 1330 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1331 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1332 | 1333 | has-flag@^4.0.0: 1334 | version "4.0.0" 1335 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1336 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1337 | 1338 | has-symbols@^1.0.1: 1339 | version "1.0.2" 1340 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 1341 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 1342 | 1343 | has@^1.0.3: 1344 | version "1.0.3" 1345 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1346 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1347 | dependencies: 1348 | function-bind "^1.1.1" 1349 | 1350 | inflight@^1.0.4: 1351 | version "1.0.6" 1352 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1353 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1354 | dependencies: 1355 | once "^1.3.0" 1356 | wrappy "1" 1357 | 1358 | inherits@2: 1359 | version "2.0.4" 1360 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1361 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1362 | 1363 | is-core-module@^2.2.0: 1364 | version "2.2.0" 1365 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 1366 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 1367 | dependencies: 1368 | has "^1.0.3" 1369 | 1370 | is-module@^1.0.0: 1371 | version "1.0.0" 1372 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1373 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 1374 | 1375 | is-reference@^1.2.1: 1376 | version "1.2.1" 1377 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" 1378 | integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 1379 | dependencies: 1380 | "@types/estree" "*" 1381 | 1382 | isexe@^2.0.0: 1383 | version "2.0.0" 1384 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1385 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1386 | 1387 | jest-worker@^26.2.1: 1388 | version "26.6.2" 1389 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" 1390 | integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== 1391 | dependencies: 1392 | "@types/node" "*" 1393 | merge-stream "^2.0.0" 1394 | supports-color "^7.0.0" 1395 | 1396 | js-tokens@^4.0.0: 1397 | version "4.0.0" 1398 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1399 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1400 | 1401 | jsesc@^2.5.1: 1402 | version "2.5.2" 1403 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1404 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1405 | 1406 | jsesc@~0.5.0: 1407 | version "0.5.0" 1408 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1409 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1410 | 1411 | json5@^2.1.2: 1412 | version "2.2.0" 1413 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 1414 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 1415 | dependencies: 1416 | minimist "^1.2.5" 1417 | 1418 | lodash.debounce@^4.0.8: 1419 | version "4.0.8" 1420 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" 1421 | integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= 1422 | 1423 | lodash@^4.17.19: 1424 | version "4.17.21" 1425 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1426 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1427 | 1428 | lru-cache@^6.0.0: 1429 | version "6.0.0" 1430 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1431 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1432 | dependencies: 1433 | yallist "^4.0.0" 1434 | 1435 | magic-string@^0.25.7: 1436 | version "0.25.7" 1437 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 1438 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 1439 | dependencies: 1440 | sourcemap-codec "^1.4.4" 1441 | 1442 | merge-stream@^2.0.0: 1443 | version "2.0.0" 1444 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1445 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1446 | 1447 | minimatch@^3.0.4: 1448 | version "3.0.4" 1449 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1450 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1451 | dependencies: 1452 | brace-expansion "^1.1.7" 1453 | 1454 | minimist@^1.2.5: 1455 | version "1.2.5" 1456 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1457 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1458 | 1459 | ms@2.1.2: 1460 | version "2.1.2" 1461 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1462 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1463 | 1464 | node-releases@^1.1.70: 1465 | version "1.1.71" 1466 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" 1467 | integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== 1468 | 1469 | object-keys@^1.0.12, object-keys@^1.1.1: 1470 | version "1.1.1" 1471 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1472 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1473 | 1474 | object-path@^0.11.5: 1475 | version "0.11.5" 1476 | resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" 1477 | integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== 1478 | 1479 | object.assign@^4.1.0: 1480 | version "4.1.2" 1481 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1482 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1483 | dependencies: 1484 | call-bind "^1.0.0" 1485 | define-properties "^1.1.3" 1486 | has-symbols "^1.0.1" 1487 | object-keys "^1.1.1" 1488 | 1489 | once@^1.3.0: 1490 | version "1.4.0" 1491 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1492 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1493 | dependencies: 1494 | wrappy "1" 1495 | 1496 | path-is-absolute@^1.0.0: 1497 | version "1.0.1" 1498 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1499 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1500 | 1501 | path-key@^3.1.0: 1502 | version "3.1.1" 1503 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1504 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1505 | 1506 | path-parse@^1.0.6: 1507 | version "1.0.6" 1508 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1509 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1510 | 1511 | picomatch@^2.2.2: 1512 | version "2.2.2" 1513 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1514 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1515 | 1516 | prettier@^2.2.1: 1517 | version "2.2.1" 1518 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" 1519 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== 1520 | 1521 | randombytes@^2.1.0: 1522 | version "2.1.0" 1523 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1524 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1525 | dependencies: 1526 | safe-buffer "^5.1.0" 1527 | 1528 | regenerate-unicode-properties@^8.2.0: 1529 | version "8.2.0" 1530 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" 1531 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== 1532 | dependencies: 1533 | regenerate "^1.4.0" 1534 | 1535 | regenerate@^1.4.0: 1536 | version "1.4.2" 1537 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" 1538 | integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== 1539 | 1540 | regenerator-runtime@^0.13.4: 1541 | version "0.13.7" 1542 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" 1543 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== 1544 | 1545 | regenerator-transform@^0.14.2: 1546 | version "0.14.5" 1547 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" 1548 | integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== 1549 | dependencies: 1550 | "@babel/runtime" "^7.8.4" 1551 | 1552 | regexpu-core@^4.7.1: 1553 | version "4.7.1" 1554 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" 1555 | integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== 1556 | dependencies: 1557 | regenerate "^1.4.0" 1558 | regenerate-unicode-properties "^8.2.0" 1559 | regjsgen "^0.5.1" 1560 | regjsparser "^0.6.4" 1561 | unicode-match-property-ecmascript "^1.0.4" 1562 | unicode-match-property-value-ecmascript "^1.2.0" 1563 | 1564 | regjsgen@^0.5.1: 1565 | version "0.5.2" 1566 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" 1567 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== 1568 | 1569 | regjsparser@^0.6.4: 1570 | version "0.6.9" 1571 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" 1572 | integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== 1573 | dependencies: 1574 | jsesc "~0.5.0" 1575 | 1576 | resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0: 1577 | version "1.20.0" 1578 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 1579 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 1580 | dependencies: 1581 | is-core-module "^2.2.0" 1582 | path-parse "^1.0.6" 1583 | 1584 | rimraf@^3.0.2: 1585 | version "3.0.2" 1586 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1587 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1588 | dependencies: 1589 | glob "^7.1.3" 1590 | 1591 | rollup-plugin-terser@^7.0.2: 1592 | version "7.0.2" 1593 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" 1594 | integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== 1595 | dependencies: 1596 | "@babel/code-frame" "^7.10.4" 1597 | jest-worker "^26.2.1" 1598 | serialize-javascript "^4.0.0" 1599 | terser "^5.0.0" 1600 | 1601 | rollup@^2.42.4: 1602 | version "2.42.4" 1603 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.42.4.tgz#97c910a48bd0db6aaa4271dd48745870cbbbf970" 1604 | integrity sha512-Zqv3EvNfcllBHyyEUM754npqsZw82VIjK34cDQMwrQ1d6aqxzeYu5yFb7smGkPU4C1Bj7HupIMeT6WU7uIdnMw== 1605 | optionalDependencies: 1606 | fsevents "~2.3.1" 1607 | 1608 | safe-buffer@^5.1.0: 1609 | version "5.2.1" 1610 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1611 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1612 | 1613 | safe-buffer@~5.1.1: 1614 | version "5.1.2" 1615 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1616 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1617 | 1618 | semver@7.0.0: 1619 | version "7.0.0" 1620 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 1621 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== 1622 | 1623 | semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: 1624 | version "6.3.0" 1625 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1626 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1627 | 1628 | semver@^7.3.5: 1629 | version "7.3.5" 1630 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1631 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1632 | dependencies: 1633 | lru-cache "^6.0.0" 1634 | 1635 | serialize-javascript@^4.0.0: 1636 | version "4.0.0" 1637 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 1638 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 1639 | dependencies: 1640 | randombytes "^2.1.0" 1641 | 1642 | shebang-command@^2.0.0: 1643 | version "2.0.0" 1644 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1645 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1646 | dependencies: 1647 | shebang-regex "^3.0.0" 1648 | 1649 | shebang-regex@^3.0.0: 1650 | version "3.0.0" 1651 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1652 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1653 | 1654 | slash@^3.0.0: 1655 | version "3.0.0" 1656 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1657 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1658 | 1659 | source-map-support@~0.5.19: 1660 | version "0.5.19" 1661 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1662 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1663 | dependencies: 1664 | buffer-from "^1.0.0" 1665 | source-map "^0.6.0" 1666 | 1667 | source-map@^0.5.0: 1668 | version "0.5.7" 1669 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1670 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1671 | 1672 | source-map@^0.6.0: 1673 | version "0.6.1" 1674 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1675 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1676 | 1677 | source-map@~0.7.2: 1678 | version "0.7.3" 1679 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 1680 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 1681 | 1682 | sourcemap-codec@^1.4.4: 1683 | version "1.4.8" 1684 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1685 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1686 | 1687 | supports-color@^5.3.0: 1688 | version "5.5.0" 1689 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1690 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1691 | dependencies: 1692 | has-flag "^3.0.0" 1693 | 1694 | supports-color@^7.0.0, supports-color@^7.1.0: 1695 | version "7.2.0" 1696 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1697 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1698 | dependencies: 1699 | has-flag "^4.0.0" 1700 | 1701 | svelte@3.31.0: 1702 | version "3.31.0" 1703 | resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.31.0.tgz#13966e5f55b975bc86675469bb2c58dd0e558d97" 1704 | integrity sha512-r+n8UJkDqoQm1b+3tA3Lh6mHXKpcfOSOuEuIo5gE2W9wQYi64RYX/qE6CZBDDsP/H4M+N426JwY7XGH4xASvGQ== 1705 | 1706 | terser@^5.0.0: 1707 | version "5.6.1" 1708 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" 1709 | integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== 1710 | dependencies: 1711 | commander "^2.20.0" 1712 | source-map "~0.7.2" 1713 | source-map-support "~0.5.19" 1714 | 1715 | to-fast-properties@^2.0.0: 1716 | version "2.0.0" 1717 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1718 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1719 | 1720 | tslib@^2.1.0: 1721 | version "2.1.0" 1722 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" 1723 | integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== 1724 | 1725 | typescript@^4.2.3: 1726 | version "4.2.3" 1727 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" 1728 | integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== 1729 | 1730 | ua-parser-js@^0.7.25: 1731 | version "0.7.25" 1732 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.25.tgz#67689fa263a87a52dabbc251ede89891f59156ce" 1733 | integrity sha512-8NFExdfI24Ny8R3Vc6+uUytP/I7dpqk3JERlvxPWlrtx5YboqCgxAXYKPAifbPLV2zKbgmmPL53ufW7mUC/VOQ== 1734 | 1735 | unicode-canonical-property-names-ecmascript@^1.0.4: 1736 | version "1.0.4" 1737 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 1738 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== 1739 | 1740 | unicode-match-property-ecmascript@^1.0.4: 1741 | version "1.0.4" 1742 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 1743 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== 1744 | dependencies: 1745 | unicode-canonical-property-names-ecmascript "^1.0.4" 1746 | unicode-property-aliases-ecmascript "^1.0.4" 1747 | 1748 | unicode-match-property-value-ecmascript@^1.2.0: 1749 | version "1.2.0" 1750 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" 1751 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== 1752 | 1753 | unicode-property-aliases-ecmascript@^1.0.4: 1754 | version "1.1.0" 1755 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" 1756 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 1757 | 1758 | which@^2.0.1: 1759 | version "2.0.2" 1760 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1761 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1762 | dependencies: 1763 | isexe "^2.0.0" 1764 | 1765 | wrappy@1: 1766 | version "1.0.2" 1767 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1768 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1769 | 1770 | yallist@^4.0.0: 1771 | version "4.0.0" 1772 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1773 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1774 | --------------------------------------------------------------------------------