From f4877cb16099cb773adcc7b6eb3c4b24d567a4c8 Mon Sep 17 00:00:00 2001 From: 49fl Date: Mon, 24 Jun 2024 11:45:40 -0400 Subject: [PATCH] Stop throwing in frontend code (#2654) Return error instead of throw --- .eslintrc | 10 +- .github/workflows/playwright.yml | 88 +- Makefile | 11 +- README.md | 54 +- e2e/playwright/flow-tests.spec.ts | 299 +- e2e/playwright/test-utils.ts | 45 +- package.json | 3 +- playwright.config.ts | 2 +- src/clientSideScene/ClientSideSceneComp.tsx | 40 +- src/clientSideScene/sceneEntities.ts | 168 +- src/components/AstExplorer.tsx | 6 +- src/components/AvailableVarsHelpers.tsx | 2 + src/components/CommandBar/CommandBar.tsx | 2 +- src/components/LspProvider.tsx | 32 +- src/components/ModelingMachineProvider.tsx | 205 +- .../ModelingPanes/MemoryPane.tsx | 15 +- src/components/Toolbar/EqualAngle.tsx | 63 +- src/components/Toolbar/EqualLength.tsx | 63 +- src/components/Toolbar/HorzVert.tsx | 38 +- src/components/Toolbar/Intersect.tsx | 84 +- .../Toolbar/RemoveConstrainingValues.tsx | 57 +- src/components/Toolbar/SetAbsDistance.tsx | 60 +- src/components/Toolbar/SetAngleBetween.tsx | 81 +- .../Toolbar/SetHorzVertDistance.tsx | 103 +- src/components/Toolbar/setAngleLength.tsx | 177 +- src/editor/plugins/lsp/client.ts | 9 +- src/editor/plugins/lsp/codec.ts | 10 +- src/editor/plugins/lsp/codec/demuxer.ts | 4 +- src/editor/plugins/lsp/index.ts | 2 +- src/editor/plugins/lsp/kcl/semantic_tokens.ts | 6 +- .../lsp/server-capability-registration.ts | 4 +- src/editor/plugins/lsp/worker.ts | 6 +- src/hooks/useRefreshSettings.ts | 2 + src/hooks/useToolbarGuards.ts | 11 +- src/lang/KclSingleton.ts | 63 +- src/lang/abstractSyntaxTree.test.ts | 122 +- src/lang/errors.test.ts | 4 + src/lang/errors.ts | 3 +- src/lang/getNodePathFromSourceRange.test.ts | 16 +- src/lang/modifyAst.test.ts | 49 +- src/lang/modifyAst.ts | 121 +- src/lang/queryAst.test.ts | 69 +- src/lang/queryAst.ts | 255 +- src/lang/recast.test.ts | 39 +- src/lang/std/engineConnection.ts | 24 +- src/lang/std/fileSystemManager.ts | 33 +- src/lang/std/sketch.test.ts | 46 +- src/lang/std/sketch.ts | 363 +- src/lang/std/sketchConstraints.test.ts | 27 +- src/lang/std/sketchConstraints.ts | 30 +- src/lang/std/sketchcombos.test.ts | 56 +- src/lang/std/sketchcombos.ts | 236 +- src/lang/std/stdTypes.ts | 32 +- src/lang/tokeniser.test.ts | 8 +- src/lang/util.ts | 5 +- src/lang/wasm.ts | 117 +- src/lib/paths.ts | 9 +- src/lib/screenshot.ts | 6 +- src/lib/selections.ts | 61 +- src/lib/settings/settingsUtils.ts | 55 +- src/lib/testHelpers.ts | 14 +- src/lib/trap.ts | 48 + src/lib/useCalculateKclExpression.ts | 3 + src/machines/authMachine.ts | 4 +- src/machines/commandBarMachine.ts | 2 +- src/machines/modelingMachine.ts | 296 +- yarn.lock | 5672 +++++++---------- 67 files changed, 5127 insertions(+), 4523 deletions(-) create mode 100644 src/lib/trap.ts diff --git a/.eslintrc b/.eslintrc index 185104119..10f5f4cca 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,7 +4,8 @@ "project": "./tsconfig.json" }, "plugins": [ - "css-modules" + "css-modules", + "suggest-no-throw", ], "extends": [ "react-app", @@ -17,6 +18,7 @@ "never" ], "react-hooks/exhaustive-deps": "off", + "suggest-no-throw/suggest-no-throw": "warn", }, "overrides": [ { @@ -25,6 +27,12 @@ "@typescript-eslint/no-floating-promises": "warn", "testing-library/prefer-screen-queries": "off" } + }, + { + "files": ["src/**/*.test.ts"], + "rules": { + "suggest-no-throw/suggest-no-throw": "off", + } } ] } diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index ea67fa49e..137c31599 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -95,21 +95,13 @@ jobs: CI: true token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }} - - uses: actions/upload-artifact@v3 - if: always() - with: - name: playwright-report - path: playwright-report/ - retention-days: 30 - name: check for changes id: git-check run: | git add . if git status | grep -q "Changes to be committed" - then - echo "::set-output name=modified::true" - else - echo "::set-output name=modified::false" + then echo "modified=true" >> $GITHUB_OUTPUT + else echo "modified=false" >> $GITHUB_OUTPUT fi - name: Commit changes, if any if: steps.git-check.outputs.modified == 'true' @@ -125,17 +117,53 @@ jobs: git commit -am "A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)" || true git push git push origin ${{ github.head_ref }} + # only upload artifacts if there's actually changes + - uses: actions/upload-artifact@v4 + if: steps.git-check.outputs.modified == 'true' + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 + # if have previous run results, use them + - uses: actions/download-artifact@v4 + if: always() + continue-on-error: true + with: + name: test-results + path: test-results/ + - name: Run ubuntu/chrome flow retry failures + id: retry + if: always() + run: | + ls -1 "test-results" + if [[ $(ls -1 "test-results" | wc -l) == "0" ]]; + then echo "retried=false" >> $GITHUB_OUTPUT; exit 0; + else echo "retried=true" >> $GITHUB_OUTPUT; + fi; + yarn playwright test --project="Google Chrome" --last-failed e2e/playwright/flow-tests.spec.ts + env: + CI: true + token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} - name: Run ubuntu/chrome flow + if: steps.retry.outputs.retried == 'false' run: yarn playwright test --project="Google Chrome" e2e/playwright/flow-tests.spec.ts env: CI: true token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 if: always() with: - name: playwright-report-ubuntu + name: test-results + path: test-results/ + retention-days: 30 + overwrite: true + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report path: playwright-report/ retention-days: 30 + overwrite: true playwright-macos: timeout-minutes: 60 @@ -194,16 +222,46 @@ jobs: run: yarn build:wasm - name: build web run: yarn build:local + # if have previous run results, use them + - uses: actions/download-artifact@v4 + if: ${{ always() }} + continue-on-error: true + with: + name: test-results + path: test-results/ + - name: Run macos/safari flow retry failures + id: retry + continue-on-error: true + if: ${{ success() }} + run: | + if [ -d "test-results" ]; + then echo "retried=true" >> $GITHUB_OUTPUT; + else echo "retried=false" >> $GITHUB_OUTPUT; + fi; + yarn playwright test --project="webkit" --last-failed e2e/playwright/flow-tests.spec.ts + env: + CI: true + token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} - name: Run macos/safari flow + if: ${{ steps.retry.outputs.retried != 'true' }} # webkit doesn't work on Ubuntu because of the same reason tauri doesn't (webRTC issues) # TODO remove this and the matrix and run all tests on ubuntu when this is fixed run: yarn playwright test --project="webkit" e2e/playwright/flow-tests.spec.ts env: CI: true token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} - - uses: actions/upload-artifact@v3 - if: always() + - uses: actions/upload-artifact@v4 + if: ${{ always() }} with: - name: playwright-report-macos + name: test-results + path: test-results/ + retention-days: 30 + overwrite: true + - uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: playwright-report path: playwright-report/ retention-days: 30 + overwrite: true + diff --git a/Makefile b/Makefile index 2af35c933..20d11334f 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,17 @@ .PHONY: dev WASM_LIB_FILES := $(wildcard src/wasm-lib/**/*.rs) +TS_SRC := $(wildcard src/**/*.tsx) $(wildcard src/**/*.ts) +XSTATE_TYPEGENS := $(wildcard src/machines/*.typegen.ts) -dev: node_modules public/wasm_lib_bg.wasm +dev: node_modules public/wasm_lib_bg.wasm $(XSTATE_TYPEGENS) yarn start +$(XSTATE_TYPEGENS): $(TS_SRC) + yarn xstate typegen 'src/**/*.ts?(x)' + public/wasm_lib_bg.wasm: $(WASM_LIB_FILES) yarn build:wasm-dev -node_modules: package.json - -package.json: +node_modules: package.json yarn.lock yarn install diff --git a/README.md b/README.md index 08336ca30..459ae4487 100644 --- a/README.md +++ b/README.md @@ -89,25 +89,6 @@ enable third-party cookies. You can enable third-party cookies by clicking on the eye with a slash through it in the URL bar, and clicking on "Enable Third-Party Cookies". -## Running tests - -First, start the dev server following "Running a development build" above. - -Then in another terminal tab, run: - -``` -yarn test -``` - -Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro/) tests, in interactive mode by default. - -For running the rust (not tauri rust though) only, you can - -```bash -cd src/wasm-lib -cargo test -``` - ## Tauri To spin up up tauri dev, `yarn install` and `yarn build:wasm-dev` need to have been done before hand then @@ -195,7 +176,9 @@ $ cargo +nightly fuzz run parser For more information on fuzzing you can check out [this guide](https://rust-fuzz.github.io/book/cargo-fuzz.html). -### Playwright +## Tests + +### Playwright tests For a portable way to run Playwright you'll need Docker. @@ -284,6 +267,37 @@ Where `./store` should look like this However because much of our tests involve clicking in the stream at specific locations, it's code-gen looks `await page.locator('video').click();` when really we need to use a pixel coord, so I think it's of limited use. +### Unit and component tests + +If you already haven't, run the following: + +``` +yarn +yarn build:wasm +yarn start +``` + +and finally: + +``` +yarn test:nowatch +``` + +For individual testing: + +``` +yarn test abstractSyntaxTree -t "unexpected closed curly brace" --silent=false +``` + +Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro/) tests, in interactive mode by default. + +### Rust tests + +```bash +cd src/wasm-lib +cargo test +``` + #### Some notes on CI The tests are broken into snapshot tests and non-snapshot tests, and they run in that order, they automatically commit new snap shots, so if you see an image commit check it was an intended change. If we have non-determinism in the snapshots such that they are always committing new images, hopefully this annoyance makes us fix them asap, if you notice this happening let Kurt know. But for the odd occasion `git reset --hard HEAD~ && git push -f` is your friend. diff --git a/e2e/playwright/flow-tests.spec.ts b/e2e/playwright/flow-tests.spec.ts index 78d01635e..a36733ed5 100644 --- a/e2e/playwright/flow-tests.spec.ts +++ b/e2e/playwright/flow-tests.spec.ts @@ -630,6 +630,7 @@ test('if you use the format keyboard binding it formats your code', async ({ |> line([-20, 0], %) |> close(%)` ) + localStorage.setItem('disableAxis', 'true') }) await page.setViewportSize({ width: 1000, height: 500 }) const lspStartPromise = page.waitForEvent('console', async (message) => { @@ -2114,19 +2115,29 @@ test.describe('Command bar tests', () => { await page.setViewportSize({ width: 1200, height: 500 }) await page.goto('/', { waitUntil: 'domcontentloaded' }) - let cmdSearchBar = page.getByPlaceholder('Search commands') + await expect( + page.getByRole('button', { name: 'Start Sketch' }) + ).not.toBeDisabled() // First try opening the command bar and closing it await page .getByRole('button', { name: 'Commands', exact: false }) .or(page.getByRole('button', { name: '⌘K' })) .click() + + let cmdSearchBar = await page.getByPlaceholder('Search commands') await expect(cmdSearchBar).toBeVisible() await page.keyboard.press('Escape') + cmdSearchBar = await page.getByPlaceholder('Search commands') await expect(cmdSearchBar).not.toBeVisible() // Now try the same, but with the keyboard shortcut, check focus - await page.keyboard.press('Meta+K') + if (process.platform !== 'linux') { + await page.keyboard.press('Meta+K') + } else { + await page.locator('html').press('Control+C') + } + cmdSearchBar = await page.getByPlaceholder('Search commands') await expect(cmdSearchBar).toBeVisible() await expect(cmdSearchBar).toBeFocused() @@ -2165,13 +2176,21 @@ test.describe('Command bar tests', () => { await page.setViewportSize({ width: 1200, height: 500 }) await page.goto('/', { waitUntil: 'domcontentloaded' }) - let cmdSearchBar = page.getByPlaceholder('Search commands') + await expect( + page.getByRole('button', { name: 'Start Sketch' }) + ).not.toBeDisabled() // Put the cursor in the code editor await page.locator('.cm-content').click() // Now try the same, but with the keyboard shortcut, check focus - await page.keyboard.press('Meta+K') + if (process.platform !== 'linux') { + await page.keyboard.press('Meta+K') + } else { + await page.locator('.cm-content').press('Control+C') + } + + let cmdSearchBar = page.getByPlaceholder('Search commands') await expect(cmdSearchBar).toBeVisible() await expect(cmdSearchBar).toBeFocused() @@ -2234,7 +2253,11 @@ test.describe('Command bar tests', () => { await page.getByRole('button', { name: 'Extrude' }).isEnabled() let cmdSearchBar = page.getByPlaceholder('Search commands') - await page.keyboard.press('Meta+K') + if (process.platform !== 'linux') { + await page.keyboard.press('Meta+K') + } else { + await page.locator('html').press('Control+C') + } await expect(cmdSearchBar).toBeVisible() // Search for extrude command and choose it @@ -2889,7 +2912,7 @@ test('Can edit a sketch that has been extruded in the same pipe', async ({ const startPX = [665, 458] - const dragPX = 30 + const dragPX = 80 await page.getByText('startProfileAt([4.61, -14.01], %)').click() await expect(page.getByRole('button', { name: 'Edit Sketch' })).toBeVisible() @@ -2897,16 +2920,14 @@ test('Can edit a sketch that has been extruded in the same pipe', async ({ await page.waitForTimeout(400) let prevContent = await page.locator('.cm-content').innerText() - const step5 = { steps: 5 } - await expect(page.getByTestId('segment-overlay')).toHaveCount(2) // drag startProfieAt handle - await page.mouse.move(startPX[0], startPX[1]) - await page.mouse.down() - await page.mouse.move(startPX[0] + dragPX, startPX[1] - dragPX, step5) - await page.mouse.up() - + await page.dragAndDrop('#stream', '#stream', { + sourcePosition: { x: startPX[0], y: startPX[1] }, + targetPosition: { x: startPX[0] + dragPX, y: startPX[1] - dragPX }, + }) + await page.waitForTimeout(100) await expect(page.locator('.cm-content')).not.toHaveText(prevContent) prevContent = await page.locator('.cm-content').innerText() @@ -2914,20 +2935,23 @@ test('Can edit a sketch that has been extruded in the same pipe', async ({ await page.waitForTimeout(100) const lineEnd = await u.getBoundingBox('[data-overlay-index="0"]') - await page.mouse.move(lineEnd.x - 5, lineEnd.y) - await page.mouse.down() - await page.mouse.move(lineEnd.x + dragPX, lineEnd.y - dragPX, step5) - await page.mouse.up() await page.waitForTimeout(100) + await page.dragAndDrop('#stream', '#stream', { + sourcePosition: { x: lineEnd.x - 5, y: lineEnd.y }, + targetPosition: { x: lineEnd.x + dragPX, y: lineEnd.y - dragPX }, + }) await expect(page.locator('.cm-content')).not.toHaveText(prevContent) prevContent = await page.locator('.cm-content').innerText() // drag tangentialArcTo handle const tangentEnd = await u.getBoundingBox('[data-overlay-index="1"]') - await page.mouse.move(tangentEnd.x, tangentEnd.y - 5) - await page.mouse.down() - await page.mouse.move(tangentEnd.x + dragPX, tangentEnd.y - dragPX, step5) - await page.mouse.up() + await page.dragAndDrop('#stream', '#stream', { + sourcePosition: { x: tangentEnd.x, y: tangentEnd.y - 5 }, + targetPosition: { + x: tangentEnd.x + dragPX, + y: tangentEnd.y - dragPX, + }, + }) await page.waitForTimeout(100) await expect(page.locator('.cm-content')).not.toHaveText(prevContent) @@ -3404,11 +3428,8 @@ const part002 = startSketchOn('XZ') const line3 = await u.getSegmentBodyCoords(`[data-overlay-index="${2}"]`) - // await page.mouse.click(line1.x, line1.y) - // await page.keyboard.down('Shift') await page.mouse.click(line3.x, line3.y) await page.waitForTimeout(100) // this wait is needed for webkit - not sure why - // await page.keyboard.up('Shift') await page .getByRole('button', { name: 'Constraints', @@ -3418,6 +3439,7 @@ const part002 = startSketchOn('XZ') .getByRole('button', { name: 'remove constraints', exact: true }) .click() + await page.getByText('line([39.13, 68.63], %)').click() const activeLinesContent = await page.locator('.cm-activeLine').all() await expect(activeLinesContent).toHaveLength(1) await expect(activeLinesContent[0]).toHaveText('|> line([39.13, 68.63], %)') @@ -3495,15 +3517,17 @@ const part002 = startSketchOn('XZ') .getByRole('button', { name: 'Add constraining value' }) .click() + // Wait for the codemod to take effect + await expect(page.locator('.cm-content')).toContainText(`angle: -57,`) + await expect(page.locator('.cm-content')).toContainText( + `offset: ${offset},` + ) + const activeLinesContent = await page.locator('.cm-activeLine').all() await expect(activeLinesContent[0]).toHaveText( `|> line([74.36, 130.4], %, 'seg01')` ) await expect(activeLinesContent[1]).toHaveText(`}, %)`) - await expect(page.locator('.cm-content')).toContainText(`angle: -57,`) - await expect(page.locator('.cm-content')).toContainText( - `offset: ${offset},` - ) // checking the count of the overlays is a good proxy check that the client sketch scene is in a good state await expect(page.getByTestId('segment-overlay')).toHaveCount(4) @@ -3978,6 +4002,11 @@ const part002 = startSketchOn('XZ') await page.mouse.click(line3.x, line3.y) await page.mouse.click(line4.x, line4.y) await page.keyboard.up('Shift') + + // check actives lines + const activeLinesContent = await page.locator('.cm-activeLine').all() + await expect(activeLinesContent).toHaveLength(codeAfter.length) + const constraintMenuButton = page.getByRole('button', { name: 'Constraints', }) @@ -3989,11 +4018,8 @@ const part002 = startSketchOn('XZ') // apply the constraint await constraintMenuButton.click() - await constraintButton.click() + await constraintButton.click({ delay: 200 }) - // check actives lines - const activeLinesContent = await page.locator('.cm-activeLine').all() - await expect(activeLinesContent).toHaveLength(codeAfter.length) // check there are still 3 cursors (they should stay on the same lines as before constraint was applied) await expect(page.locator('.cm-cursor')).toHaveCount(codeAfter.length) @@ -4257,6 +4283,7 @@ test.describe('Testing segment overlays', () => { expectFinal, ang = 45, steps = 10, + locator, }: { hoverPos: { x: number; y: number } constraintType: @@ -4269,6 +4296,7 @@ test.describe('Testing segment overlays', () => { expectFinal: string ang?: number steps?: number + locator?: string }) => { await expect(page.getByText('Added variable')).not.toBeVisible() @@ -4279,7 +4307,7 @@ test.describe('Testing segment overlays', () => { x = hoverPos.x + Math.cos(ang * deg) * 32 y = hoverPos.y - Math.sin(ang * deg) * 32 await page.mouse.move(x, y) - await wiggleMove(page, x, y, 20, 30, ang, 10, 5) + await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator) await expect(page.locator('.cm-content')).toContainText( expectBeforeUnconstrained @@ -4302,7 +4330,7 @@ test.describe('Testing segment overlays', () => { x = hoverPos.x + Math.cos(ang * deg) * 32 y = hoverPos.y - Math.sin(ang * deg) * 32 await page.mouse.move(x, y) - await wiggleMove(page, x, y, 20, 30, ang, 10, 5) + await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator) const unconstrainedLocator = page.locator( `[data-constraint-type="${constraintType}"][data-is-constrained="false"]` @@ -4336,6 +4364,7 @@ test.describe('Testing segment overlays', () => { expectFinal, ang = 45, steps = 5, + locator, }: { hoverPos: { x: number; y: number } constraintType: @@ -4348,6 +4377,7 @@ test.describe('Testing segment overlays', () => { expectFinal: string ang?: number steps?: number + locator?: string }) => { await page.mouse.move(0, 0) await page.waitForTimeout(1000) @@ -4356,7 +4386,7 @@ test.describe('Testing segment overlays', () => { x = hoverPos.x + Math.cos(ang * deg) * 32 y = hoverPos.y - Math.sin(ang * deg) * 32 await page.mouse.move(x, y) - await wiggleMove(page, x, y, 20, 30, ang, 10, 5) + await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator) await expect(page.getByText('Added variable')).not.toBeVisible() await expect(page.locator('.cm-content')).toContainText( @@ -4382,7 +4412,7 @@ test.describe('Testing segment overlays', () => { x = hoverPos.x + Math.cos(ang * deg) * 32 y = hoverPos.y - Math.sin(ang * deg) * 32 await page.mouse.move(x, y) - await wiggleMove(page, x, y, 20, 30, ang, 10, 5) + await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator) const constrainedLocator = page.locator( `[data-constraint-type="${constraintType}"][data-is-constrained="true"]` @@ -4478,6 +4508,7 @@ test.describe('Testing segment overlays', () => { expectAfterUnconstrained: '|> line([0.5, -14], %)', expectFinal: '|> line([0.5, yRel001], %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="0"]', }) console.log('line2') await clickUnconstrained({ @@ -4487,6 +4518,7 @@ test.describe('Testing segment overlays', () => { expectAfterUnconstrained: 'line([xRel001, yRel001], %)', expectFinal: '|> line([0.5, yRel001], %)', ang: ang + 180, + locator: '[data-overlay-index="0"]', }) const angledLine = await u.getBoundingBox(`[data-overlay-index="1"]`) @@ -4500,6 +4532,7 @@ test.describe('Testing segment overlays', () => { expectAfterUnconstrained: 'angledLine({ angle: 3, length: 32 + 0 }, %)', expectFinal: 'angledLine({ angle: angle001, length: 32 + 0 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="1"]', }) console.log('angledLine2') await clickConstrained({ @@ -4511,10 +4544,10 @@ test.describe('Testing segment overlays', () => { 'angledLine({ angle: angle001, length: 32 }, %)', expectFinal: 'angledLine({ angle: angle001, length: len001 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="1"]', }) await page.mouse.move(700, 250) - await page.mouse.wheel(0, 25) await page.waitForTimeout(100) let lineTo = await u.getBoundingBox(`[data-overlay-index="2"]`) @@ -4528,6 +4561,7 @@ test.describe('Testing segment overlays', () => { expectFinal: 'lineTo([5 + 33, yAbs001], %)', steps: 8, ang: ang + 180, + locator: '[data-overlay-toolbar-index="2"]', }) console.log('lineTo2') await clickConstrained({ @@ -4538,6 +4572,7 @@ test.describe('Testing segment overlays', () => { expectFinal: 'lineTo([xAbs001, yAbs001], %)', steps: 8, ang: ang + 180, + locator: '[data-overlay-toolbar-index="2"]', }) const xLineTo = await u.getBoundingBox(`[data-overlay-index="3"]`) @@ -4551,6 +4586,7 @@ test.describe('Testing segment overlays', () => { expectFinal: 'xLineTo(xAbs002, %)', ang: ang + 180, steps: 8, + locator: '[data-overlay-toolbar-index="3"]', }) }) test('for segments [yLineTo, xLine]', async ({ page }) => { @@ -4597,7 +4633,6 @@ const part001 = startSketchOn('XZ') const clickUnconstrained = _clickUnconstrained(page) await page.mouse.move(700, 250) - await page.mouse.wheel(0, 25) await page.waitForTimeout(100) let ang = 0 @@ -4612,6 +4647,7 @@ const part001 = startSketchOn('XZ') expectAfterUnconstrained: "yLineTo(yAbs002, %, 'a')", expectFinal: "yLineTo(-10.77, %, 'a')", ang: ang + 180, + locator: '[data-overlay-toolbar-index="4"]', }) const xLine = await u.getBoundingBox(`[data-overlay-index="5"]`) @@ -4625,6 +4661,7 @@ const part001 = startSketchOn('XZ') expectFinal: 'xLine(26.04, %)', steps: 10, ang: ang + 180, + locator: '[data-overlay-toolbar-index="5"]', }) }) test('for segments [yLine, angledLineOfXLength, angledLineOfYLength]', async ({ @@ -4654,6 +4691,7 @@ const part001 = startSketchOn('XZ') |> tangentialArcTo([3.14 + 13, 3.14], %) ` ) + localStorage.setItem('disableAxis', 'true') }) const u = await getUtils(page) await page.setViewportSize({ width: 1200, height: 500 }) @@ -4682,12 +4720,13 @@ const part001 = startSketchOn('XZ') ang = await u.getAngle(`[data-overlay-index="6"]`) console.log('yline1') await clickConstrained({ - hoverPos: { x: yLine.x, y: yLine.y + 20 }, + hoverPos: { x: yLine.x, y: yLine.y }, constraintType: 'yRelative', expectBeforeUnconstrained: 'yLine(21.14 + 0, %)', expectAfterUnconstrained: 'yLine(21.14, %)', expectFinal: 'yLine(yRel001, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="6"]', }) const angledLineOfXLength = await u.getBoundingBox( @@ -4696,7 +4735,7 @@ const part001 = startSketchOn('XZ') ang = await u.getAngle(`[data-overlay-index="7"]`) console.log('angledLineOfXLength1') await clickConstrained({ - hoverPos: { x: angledLineOfXLength.x + 20, y: angledLineOfXLength.y }, + hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y }, constraintType: 'angle', expectBeforeUnconstrained: 'angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)', @@ -4705,10 +4744,11 @@ const part001 = startSketchOn('XZ') expectFinal: 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="7"]', }) console.log('angledLineOfXLength2') await clickUnconstrained({ - hoverPos: { x: angledLineOfXLength.x + 25, y: angledLineOfXLength.y }, + hoverPos: { x: angledLineOfXLength.x, y: angledLineOfXLength.y }, constraintType: 'xRelative', expectBeforeUnconstrained: 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)', @@ -4718,6 +4758,7 @@ const part001 = startSketchOn('XZ') 'angledLineOfXLength({ angle: angle001, length: 23.14 }, %)', steps: 7, ang: ang + 180, + locator: '[data-overlay-toolbar-index="7"]', }) const angledLineOfYLength = await u.getBoundingBox( @@ -4726,7 +4767,7 @@ const part001 = startSketchOn('XZ') ang = await u.getAngle(`[data-overlay-index="8"]`) console.log('angledLineOfYLength1') await clickUnconstrained({ - hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y - 20 }, + hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y }, constraintType: 'angle', expectBeforeUnconstrained: 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)', @@ -4735,10 +4776,11 @@ const part001 = startSketchOn('XZ') expectFinal: 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)', ang: ang + 180, steps: 6, + locator: '[data-overlay-toolbar-index="8"]', }) console.log('angledLineOfYLength2') await clickConstrained({ - hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y - 20 }, + hoverPos: { x: angledLineOfYLength.x, y: angledLineOfYLength.y }, constraintType: 'yRelative', expectBeforeUnconstrained: 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)', @@ -4747,6 +4789,7 @@ const part001 = startSketchOn('XZ') expectFinal: 'angledLineOfYLength({ angle: -91, length: yRel002 }, %)', ang: ang + 180, steps: 7, + locator: '[data-overlay-toolbar-index="8"]', }) }) test('for segments [angledLineToX, angledLineToY, angledLineThatIntersects]', async ({ @@ -4776,6 +4819,7 @@ const part001 = startSketchOn('XZ') |> tangentialArcTo([3.14 + 13, 1.14], %) ` ) + localStorage.setItem('disableAxis', 'true') }) const u = await getUtils(page) await page.setViewportSize({ width: 1200, height: 500 }) @@ -4809,10 +4853,11 @@ const part001 = startSketchOn('XZ') expectAfterUnconstrained: 'angledLineToX({ angle: 3, to: 26 }, %)', expectFinal: 'angledLineToX({ angle: angle001, to: 26 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="9"]', }) console.log('angledLineToX2') await clickUnconstrained({ - hoverPos: { x: angledLineToX.x - 20, y: angledLineToX.y }, + hoverPos: { x: angledLineToX.x, y: angledLineToX.y }, constraintType: 'xAbsolute', expectBeforeUnconstrained: 'angledLineToX({ angle: angle001, to: 26 }, %)', @@ -4820,6 +4865,7 @@ const part001 = startSketchOn('XZ') 'angledLineToX({ angle: angle001, to: xAbs001 }, %)', expectFinal: 'angledLineToX({ angle: angle001, to: 26 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="9"]', }) const angledLineToY = await u.getBoundingBox(`[data-overlay-index="10"]`) @@ -4835,16 +4881,18 @@ const part001 = startSketchOn('XZ') expectFinal: 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)', steps: process.platform === 'darwin' ? 8 : 9, ang: ang + 180, + locator: '[data-overlay-toolbar-index="10"]', }) console.log('angledLineToY2') await clickConstrained({ - hoverPos: { x: angledLineToY.x, y: angledLineToY.y + 20 }, + hoverPos: { x: angledLineToY.x, y: angledLineToY.y }, constraintType: 'yAbsolute', expectBeforeUnconstrained: 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)', expectAfterUnconstrained: 'angledLineToY({ angle: 89, to: 9.14 }, %)', expectFinal: 'angledLineToY({ angle: 89, to: yAbs001 }, %)', ang: ang + 180, + locator: '[data-overlay-toolbar-index="10"]', }) const angledLineThatIntersects = await u.getBoundingBox( @@ -4854,7 +4902,7 @@ const part001 = startSketchOn('XZ') console.log('angledLineThatIntersects') await clickUnconstrained({ hoverPos: { - x: angledLineThatIntersects.x + 20, + x: angledLineThatIntersects.x, y: angledLineThatIntersects.y, }, constraintType: 'angle', @@ -4874,11 +4922,12 @@ const part001 = startSketchOn('XZ') intersectTag: 'a' }, %)`, ang: ang + 180, + locator: '[data-overlay-toolbar-index="11"]', }) console.log('angledLineThatIntersects2') await clickUnconstrained({ hoverPos: { - x: angledLineThatIntersects.x + 20, + x: angledLineThatIntersects.x, y: angledLineThatIntersects.y, }, constraintType: 'intersectionOffset', @@ -4898,6 +4947,7 @@ const part001 = startSketchOn('XZ') intersectTag: 'a' }, %)`, ang: ang + 180, + locator: '[data-overlay-toolbar-index="11"]', }) }) test('for segment [tangentialArcTo]', async ({ page }) => { @@ -4925,6 +4975,7 @@ const part001 = startSketchOn('XZ') |> tangentialArcTo([3.14 + 13, -3.14], %) ` ) + localStorage.setItem('disableAxis', 'true') }) const u = await getUtils(page) await page.setViewportSize({ width: 1200, height: 500 }) @@ -4947,9 +4998,9 @@ const part001 = startSketchOn('XZ') const clickConstrained = _clickConstrained(page) const tangentialArcTo = await u.getBoundingBox( - `[data-overlay-index="12"]` + '[data-overlay-index="12"]' ) - let ang = await u.getAngle(`[data-overlay-index="12"]`) + let ang = await u.getAngle('[data-overlay-index="12"]') console.log('tangentialArcTo') await clickConstrained({ hoverPos: { x: tangentialArcTo.x, y: tangentialArcTo.y }, @@ -4959,6 +5010,7 @@ const part001 = startSketchOn('XZ') expectFinal: 'tangentialArcTo([xAbs001, -3.14], %)', ang: ang + 180, steps: 6, + locator: '[data-overlay-toolbar-index="12"]', }) console.log('tangentialArcTo2') await clickUnconstrained({ @@ -4969,6 +5021,7 @@ const part001 = startSketchOn('XZ') expectFinal: 'tangentialArcTo([xAbs001, -3.14], %)', ang: ang + 180, steps: 10, + locator: '[data-overlay-toolbar-index="12"]', }) }) }) @@ -4981,21 +5034,26 @@ const part001 = startSketchOn('XZ') stdLibFnName, ang = 45, steps = 6, + locator, }: { hoverPos: { x: number; y: number } codeToBeDeleted: string stdLibFnName: string ang?: number steps?: number + locator?: string }) => { await expect(page.getByText('Added variable')).not.toBeVisible() - const [x, y] = [ - Math.cos((ang * Math.PI) / 180) * 45, - Math.sin((ang * Math.PI) / 180) * 45, - ] - await page.mouse.move(hoverPos.x + x, hoverPos.y + y) - await page.mouse.move(hoverPos.x, hoverPos.y, { steps }) + await page.mouse.move(0, 0) + await page.waitForTimeout(1000) + let x = 0, + y = 0 + x = hoverPos.x + Math.cos(ang * deg) * 32 + y = hoverPos.y - Math.sin(ang * deg) * 32 + await page.mouse.move(x, y) + await wiggleMove(page, x, y, 20, 30, ang, 10, 5, locator) + await expect(page.locator('.cm-content')).toContainText(codeToBeDeleted) await page.locator(`[data-stdlib-fn-name="${stdLibFnName}"]`).click() @@ -5030,6 +5088,7 @@ const part001 = startSketchOn('XZ') |> tangentialArcTo([3.14 + 13, 1.14], %) ` ) + localStorage.setItem('disableAxis', 'true') }) const u = await getUtils(page) await page.setViewportSize({ width: 1200, height: 500 }) @@ -5054,96 +5113,137 @@ const part001 = startSketchOn('XZ') const getOverlayByIndex = (index: number) => u.getBoundingBox(`[data-overlay-index="${index}"]`) segmentToDelete = await getOverlayByIndex(12) + let ang = await u.getAngle(`[data-overlay-index="${12}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x - 10, y: segmentToDelete.y + 20 }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'tangentialArcTo([3.14 + 13, 1.14], %)', stdLibFnName: 'tangentialArcTo', - ang: -45, + ang: ang + 180, steps: 6, + locator: '[data-overlay-toolbar-index="12"]', }) segmentToDelete = await getOverlayByIndex(11) + ang = await u.getAngle(`[data-overlay-index="${11}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x + 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: `angledLineThatIntersects({ angle: 4.14, intersectTag: 'a', offset: 9 }, %)`, stdLibFnName: 'angledLineThatIntersects', - ang: -45, + ang: ang + 180, steps: 7, + locator: '[data-overlay-toolbar-index="11"]', }) segmentToDelete = await getOverlayByIndex(10) + ang = await u.getAngle(`[data-overlay-index="${10}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x + 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'angledLineToY({ angle: 89, to: 9.14 + 0 }, %)', stdLibFnName: 'angledLineToY', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="10"]', }) segmentToDelete = await getOverlayByIndex(9) + ang = await u.getAngle(`[data-overlay-index="${9}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x - 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'angledLineToX({ angle: 3 + 0, to: 26 }, %)', stdLibFnName: 'angledLineToX', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="9"]', }) segmentToDelete = await getOverlayByIndex(8) + ang = await u.getAngle(`[data-overlay-index="${8}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y - 10 }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'angledLineOfYLength({ angle: -91, length: 19 + 0 }, %)', stdLibFnName: 'angledLineOfYLength', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="8"]', }) segmentToDelete = await getOverlayByIndex(7) + ang = await u.getAngle(`[data-overlay-index="${7}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x + 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'angledLineOfXLength({ angle: 181 + 0, length: 23.14 }, %)', stdLibFnName: 'angledLineOfXLength', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="7"]', }) segmentToDelete = await getOverlayByIndex(6) + ang = await u.getAngle(`[data-overlay-index="${6}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y + 10 }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'yLine(21.14 + 0, %)', stdLibFnName: 'yLine', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="6"]', }) segmentToDelete = await getOverlayByIndex(5) + ang = await u.getAngle(`[data-overlay-index="${5}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x - 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'xLine(26.04, %)', stdLibFnName: 'xLine', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="5"]', }) segmentToDelete = await getOverlayByIndex(4) + ang = await u.getAngle(`[data-overlay-index="${4}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y - 10 }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: "yLineTo(-10.77, %, 'a')", stdLibFnName: 'yLineTo', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="4"]', }) segmentToDelete = await getOverlayByIndex(3) + ang = await u.getAngle(`[data-overlay-index="${3}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x + 10, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'xLineTo(9 - 5, %)', stdLibFnName: 'xLineTo', + ang: ang + 180, + locator: '[data-overlay-toolbar-index="3"]', }) - // Not sure why this is diff. from the others - Kurt, ideas? segmentToDelete = await getOverlayByIndex(2) - const hoverPos = { x: segmentToDelete.x - 10, y: segmentToDelete.y + 10 } + ang = await u.getAngle(`[data-overlay-index="${2}"]`) await expect(page.getByText('Added variable')).not.toBeVisible() - const [x, y] = [ - Math.cos((45 * Math.PI) / 180) * 45, - Math.sin((45 * Math.PI) / 180) * 45, - ] - await page.mouse.move(hoverPos.x + x, hoverPos.y + y) - await page.mouse.move(hoverPos.x, hoverPos.y, { steps: 5 }) + const hoverPos = { x: segmentToDelete.x, y: segmentToDelete.y } + await page.mouse.move(0, 0) + await page.waitForTimeout(1000) + let x = 0, + y = 0 + x = hoverPos.x + Math.cos(ang * deg) * 32 + y = hoverPos.y - Math.sin(ang * deg) * 32 + await page.mouse.move(hoverPos.x, hoverPos.y) + await wiggleMove( + page, + hoverPos.x, + hoverPos.y, + 20, + 30, + ang, + 10, + 5, + '[data-overlay-toolbar-index="2"]' + ) + const codeToBeDeleted = 'lineTo([33, 11.5 + 0], %)' await expect(page.locator('.cm-content')).toContainText(codeToBeDeleted) @@ -5155,19 +5255,22 @@ const part001 = startSketchOn('XZ') ) segmentToDelete = await getOverlayByIndex(1) + ang = await u.getAngle(`[data-overlay-index="${1}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x - 20, y: segmentToDelete.y }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'angledLine({ angle: 3 + 0, length: 32 + 0 }, %)', stdLibFnName: 'angledLine', - ang: 135, + ang: ang + 180, + locator: '[data-overlay-toolbar-index="1"]', }) segmentToDelete = await getOverlayByIndex(0) + ang = await u.getAngle(`[data-overlay-index="${0}"]`) await deleteSegmentSequence({ - hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y - 20 }, + hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, codeToBeDeleted: 'line([0.5, -14 + 0], %)', stdLibFnName: 'line', - ang: -45, + ang: ang + 180, }) await page.waitForTimeout(200) @@ -5381,24 +5484,30 @@ ${extraLine ? "const myVar = segLen('seg01', part001)" : ''}` await page.waitForTimeout(500) await expect(page.getByTestId('segment-overlay')).toHaveCount(3) - const segmentToDelete = await u.getBoundingBox( - `[data-overlay-index="0"]` - ) - - const isYLine = before.toLowerCase().includes('yline') - const hoverPos = { - x: segmentToDelete.x + (isYLine ? 0 : -20), - y: segmentToDelete.y + (isYLine ? -20 : 0), - } await expect(page.getByText('Added variable')).not.toBeVisible() - const ang = isYLine ? 45 : -45 - const [x, y] = [ - Math.cos((ang * Math.PI) / 180) * 45, - Math.sin((ang * Math.PI) / 180) * 45, - ] - await page.mouse.move(hoverPos.x + x, hoverPos.y + y) - await page.mouse.move(hoverPos.x, hoverPos.y, { steps: 5 }) + const hoverPos = await u.getBoundingBox(`[data-overlay-index="0"]`) + let ang = await u.getAngle(`[data-overlay-index="${0}"]`) + ang += 180 + + await page.mouse.move(0, 0) + await page.waitForTimeout(1000) + let x = 0, + y = 0 + x = hoverPos.x + Math.cos(ang * deg) * 32 + y = hoverPos.y - Math.sin(ang * deg) * 32 + await page.mouse.move(x, y) + await wiggleMove( + page, + x, + y, + 20, + 30, + ang, + 10, + 5, + '[data-overlay-toolbar-index="0"]' + ) await expect(page.locator('.cm-content')).toContainText(before) diff --git a/e2e/playwright/test-utils.ts b/e2e/playwright/test-utils.ts index 262026059..46490f395 100644 --- a/e2e/playwright/test-utils.ts +++ b/e2e/playwright/test-utils.ts @@ -114,19 +114,45 @@ export const wiggleMove = async ( dist: number, ang: number, amplitude: number, - freq: number + freq: number, + locator?: string ) => { const tau = Math.PI * 2 const deg = tau / 360 const step = dist / steps for (let i = 0, j = 0; i < dist; i += step, j += 1) { + if (locator) { + const isElVis = await page.locator(locator).isVisible() + if (isElVis) return + } const [x1, y1] = [0, Math.sin((tau / steps) * j * freq) * amplitude] const [x2, y2] = [ Math.cos(-ang * deg) * i - Math.sin(-ang * deg) * y1, Math.sin(-ang * deg) * i + Math.cos(-ang * deg) * y1, ] const [xr, yr] = [x2, y2] - await page.mouse.move(x + xr, y + yr, { steps: 2 }) + await page.mouse.move(x + xr, y + yr, { steps: 5 }) + } +} + +export const circleMove = async ( + page: any, + x: number, + y: number, + steps: number, + diameter: number, + locator?: string +) => { + const tau = Math.PI * 2 + const step = tau / steps + for (let i = 0; i < tau; i += step) { + if (locator) { + const isElVis = await page.locator(locator).isVisible() + if (isElVis) return + } + const [x1, y1] = [Math.cos(i) * diameter, Math.sin(i) * diameter] + const [xr, yr] = [x1, y1] + await page.mouse.move(x + xr, y + yr, { steps: 5 }) } } @@ -151,11 +177,11 @@ export const getMovementUtils = (opts: any) => { // Make it easier to click around from center ("click [from] zero zero") const click00 = (x: number, y: number) => - opts.page.mouse.click(opts.center.x + x, opts.center.y + y) + opts.page.mouse.click(opts.center.x + x, opts.center.y + y, { delay: 100 }) // Relative clicker, must keep state let last = { x: 0, y: 0 } - const click00r = (x?: number, y?: number) => { + const click00r = async (x?: number, y?: number) => { // reset relative coordinates when anything is undefined if (x === undefined || y === undefined) { last.x = 0 @@ -163,12 +189,19 @@ export const getMovementUtils = (opts: any) => { return } - const ret = click00(last.x + x, last.y + y) + await circleMove( + opts.page, + opts.center.x + last.x + x, + opts.center.y + last.y + y, + 10, + 10 + ) + await click00(last.x + x, last.y + y) last.x += x last.y += y // Returns the new absolute coordinate if you need it. - return ret.then(() => [last.x, last.y]) + return [last.x, last.y] } return { toSU, click00r } diff --git a/package.json b/package.json index c71607e5f..ea126b3b6 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "crypto-js": "^4.2.0", "debounce-promise": "^3.1.2", "decamelize": "^6.0.0", + "eslint-plugin-suggest-no-throw": "^1.0.0", "formik": "^2.4.6", "fuse.js": "^7.0.0", "html2canvas-pro": "^1.4.3", @@ -120,7 +121,7 @@ "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.24.3", "@iarna/toml": "^2.2.5", - "@playwright/test": "^1.43.1", + "@playwright/test": "^1.44.1", "@tauri-apps/cli": "^2.0.0-beta.13", "@types/crypto-js": "^4.2.2", "@types/debounce-promise": "^3.1.9", diff --git a/playwright.config.ts b/playwright.config.ts index d7a8b20a9..2b54c1b75 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 3 : 0, /* Different amount of parallelism on CI and local. */ - workers: process.env.CI ? 1 : 1, + workers: process.env.CI ? 1 : 4, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: 'html', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ diff --git a/src/clientSideScene/ClientSideSceneComp.tsx b/src/clientSideScene/ClientSideSceneComp.tsx index 388f844a1..fba897f39 100644 --- a/src/clientSideScene/ClientSideSceneComp.tsx +++ b/src/clientSideScene/ClientSideSceneComp.tsx @@ -44,6 +44,7 @@ import { removeSingleConstraintInfo, } from 'lang/modifyAst' import { ActionButton } from 'components/ActionButton' +import { err, trap } from 'lib/trap' function useShouldHideScene(): { hideClient: boolean; hideServer: boolean } { const [isCamMoving, setIsCamMoving] = useState(false) @@ -184,11 +185,14 @@ const Overlay = ({ let xAlignment = overlay.angle < 0 ? '0%' : '-100%' let yAlignment = overlay.angle < -90 || overlay.angle >= 90 ? '0%' : '-100%' - const callExpression = getNodeFromPath( + const _node1 = getNodeFromPath( kclManager.ast, overlay.pathToNode, 'CallExpression' - ).node + ) + if (err(_node1)) return + const callExpression = _node1.node + const constraints = getConstraintInfo( callExpression, codeManager.code, @@ -219,6 +223,7 @@ const Overlay = ({ data-testid="segment-overlay" data-path-to-node={pathToNodeString} data-overlay-index={overlayIndex} + data-overlay-visible={shouldShow} data-overlay-angle={overlay.angle} className="pointer-events-auto absolute w-0 h-0" style={{ @@ -227,6 +232,7 @@ const Overlay = ({ > {shouldShow && (
getNodeFromPath(kclManager.ast, pathToNode).node, + const _node = useMemo( + () => getNodeFromPath(kclManager.ast, pathToNode), [kclManager.ast, pathToNode] ) + if (err(_node)) return + const node = _node.node + const range: SourceRange = node ? [node.start, node.end] : [0, 0] if (_type === 'intersectionTag') return null @@ -576,12 +591,17 @@ const ConstraintSymbol = ({ }) } else if (isConstrained) { try { - const shallowPath = getNodeFromPath( - parse(recast(kclManager.ast)), + const parsed = parse(recast(kclManager.ast)) + if (trap(parsed)) return Promise.reject(parsed) + const _node1 = getNodeFromPath( + parsed, pathToNode, 'CallExpression', true - ).shallowPath + ) + if (trap(_node1)) return Promise.reject(_node1) + const shallowPath = _node1.shallowPath + const input = makeRemoveSingleConstraintInput( argPosition, shallowPath diff --git a/src/clientSideScene/sceneEntities.ts b/src/clientSideScene/sceneEntities.ts index e1d6cc3a8..73ef0775c 100644 --- a/src/clientSideScene/sceneEntities.ts +++ b/src/clientSideScene/sceneEntities.ts @@ -101,6 +101,7 @@ import { updateRectangleSketch, } from 'lib/rectangleTool' import { getThemeColorForThreeJs } from 'lib/theme' +import { err, trap } from 'lib/trap' type DraftSegment = 'line' | 'tangentialArcTo' @@ -318,8 +319,14 @@ export class SceneEntities { }> { this.createIntersectionPlane() + const prepared = this.prepareTruncatedMemoryAndAst( + sketchPathToNode || [], + maybeModdedAst + ) + if (err(prepared)) return Promise.reject(prepared) const { truncatedAst, programMemoryOverride, variableDeclarationName } = - this.prepareTruncatedMemoryAndAst(sketchPathToNode || [], maybeModdedAst) + prepared + const { programMemory } = await executeAst({ ast: truncatedAst, useFakeExecutor: true, @@ -331,6 +338,8 @@ export class SceneEntities { ast: maybeModdedAst, programMemory, }) + if (err(sketchGroup)) return Promise.reject(sketchGroup) + if (!Array.isArray(sketchGroup?.value)) return { truncatedAst, @@ -406,11 +415,14 @@ export class SceneEntities { ) let seg - const callExpName = getNodeFromPath( + const _node1 = getNodeFromPath( maybeModdedAst, segPathToNode, 'CallExpression' - )?.node?.callee?.name + ) + if (err(_node1)) return + const callExpName = _node1.node?.callee?.name + if (segment.type === 'TangentialArcTo') { seg = tangentialArcToSegment({ prevSegment: sketchGroup.value[index - 1], @@ -489,12 +501,14 @@ export class SceneEntities { } updateAstAndRejigSketch = async ( sketchPathToNode: PathToNode, - modifiedAst: Program, + modifiedAst: Program | Error, forward: [number, number, number], up: [number, number, number], origin: [number, number, number] ) => { - await kclManager.updateAst(modifiedAst, false) + if (err(modifiedAst)) return modifiedAst + + const nextAst = await kclManager.updateAst(modifiedAst, false) await this.tearDownSketch({ removeAxis: false }) sceneInfra.resetMouseListeners() await this.setupSketch({ @@ -502,7 +516,7 @@ export class SceneEntities { forward, up, position: origin, - maybeModdedAst: kclManager.ast, + maybeModdedAst: nextAst.newAst, }) this.setupSketchIdleCallbacks({ forward, @@ -510,6 +524,7 @@ export class SceneEntities { position: origin, pathToNode: sketchPathToNode, }) + return nextAst } setUpDraftSegment = async ( sketchPathToNode: PathToNode, @@ -521,12 +536,15 @@ export class SceneEntities { ) => { const _ast = JSON.parse(JSON.stringify(kclManager.ast)) + const _node1 = getNodeFromPath( + _ast, + sketchPathToNode || [], + 'VariableDeclaration' + ) + if (trap(_node1)) return Promise.reject(_node1) const variableDeclarationName = - getNodeFromPath( - _ast, - sketchPathToNode || [], - 'VariableDeclaration' - )?.node?.declarations?.[0]?.id?.name || '' + _node1.node?.declarations?.[0]?.id?.name || '' + const sg = kclManager.programMemory.root[ variableDeclarationName ] as SketchGroup @@ -542,7 +560,9 @@ export class SceneEntities { fnName: segmentName, pathToNode: sketchPathToNode, }) + if (trap(mod)) return Promise.reject(mod) const modifiedAst = parse(recast(mod.modifiedAst)) + if (trap(modifiedAst)) return Promise.reject(modifiedAst) const draftExpressionsIndices = { start: index, end: index } @@ -593,14 +613,16 @@ export class SceneEntities { ), ], }) + if (trap(modifiedAst)) return Promise.reject(modifiedAst) modifiedAst = addCloseToPipe({ node: modifiedAst, programMemory: kclManager.programMemory, pathToNode: sketchPathToNode, }) + if (trap(modifiedAst)) return Promise.reject(modifiedAst) } else if (intersection2d) { const lastSegment = sketchGroup.value.slice(-1)[0] - modifiedAst = addNewSketchLn({ + const tmp = addNewSketchLn({ node: kclManager.ast, programMemory: kclManager.programMemory, to: [intersection2d.x, intersection2d.y], @@ -610,7 +632,10 @@ export class SceneEntities { ? 'tangentialArcTo' : 'line', pathToNode: sketchPathToNode, - }).modifiedAst + }) + if (trap(tmp)) return Promise.reject(tmp) + modifiedAst = tmp.modifiedAst + if (trap(modifiedAst)) return Promise.reject(modifiedAst) } else { // return early as we didn't modify the ast return @@ -669,12 +694,14 @@ export class SceneEntities { ) => { let _ast = JSON.parse(JSON.stringify(kclManager.ast)) + const _node1 = getNodeFromPath( + _ast, + sketchPathToNode || [], + 'VariableDeclaration' + ) + if (trap(_node1)) return Promise.reject(_node1) const variableDeclarationName = - getNodeFromPath( - _ast, - sketchPathToNode || [], - 'VariableDeclaration' - )?.node?.declarations?.[0]?.id?.name || '' + _node1.node?.declarations?.[0]?.id?.name || '' const tags: [string, string, string] = [ findUniqueName(_ast, 'rectangleSegmentA'), @@ -682,11 +709,13 @@ export class SceneEntities { findUniqueName(_ast, 'rectangleSegmentC'), ] - const startSketchOn = getNodeFromPath( + const _node2 = getNodeFromPath( _ast, sketchPathToNode || [], 'VariableDeclaration' - )?.node?.declarations + ) + if (trap(_node2)) return Promise.reject(_node2) + const startSketchOn = _node2.node?.declarations const startSketchOnInit = startSketchOn?.[0]?.init startSketchOn[0].init = createPipeExpression([ @@ -711,11 +740,13 @@ export class SceneEntities { const pathToNodeTwo = JSON.parse(JSON.stringify(sketchPathToNode)) pathToNodeTwo[1][0] = 0 - const sketchInit = getNodeFromPath( + const _node = getNodeFromPath( truncatedAst, pathToNodeTwo || [], 'VariableDeclaration' - )?.node?.declarations?.[0]?.init + ) + if (trap(_node)) return Promise.reject(_node) + const sketchInit = _node.node?.declarations?.[0]?.init const x = (args.intersectionPoint.twoD.x || 0) - rectangleOrigin[0] const y = (args.intersectionPoint.twoD.y || 0) - rectangleOrigin[1] @@ -757,11 +788,13 @@ export class SceneEntities { const x = roundOff((cornerPoint.x || 0) - rectangleOrigin[0]) const y = roundOff((cornerPoint.y || 0) - rectangleOrigin[1]) - const sketchInit = getNodeFromPath( + const _node = getNodeFromPath( _ast, sketchPathToNode || [], 'VariableDeclaration' - )?.node?.declarations?.[0]?.init + ) + if (trap(_node)) return Promise.reject(_node) + const sketchInit = _node.node?.declarations?.[0]?.init if (sketchInit.type === 'PipeExpression') { updateRectangleSketch(sketchInit, x, y, tags[0]) @@ -857,6 +890,7 @@ export class SceneEntities { ast: kclManager.ast, programMemory: kclManager.programMemory, }) + if (trap(sketchGroup)) return const pipeIndex = pathToNode[pathToNodeIndex + 1][0] as number if (addingNewSegmentStatus === 'nothing') { @@ -874,6 +908,8 @@ export class SceneEntities { spliceBetween: true, }) addingNewSegmentStatus = 'pending' + if (trap(mod)) return + await kclManager.executeAstMock(mod.modifiedAst) await this.tearDownSketch({ removeAxis: false }) this.setupSketch({ @@ -982,17 +1018,22 @@ export class SceneEntities { const to: [number, number] = [intersection2d.x, intersection2d.y] let modifiedAst = draftInfo ? draftInfo.truncatedAst : { ...kclManager.ast } - const node = getNodeFromPath( + const _node = getNodeFromPath( modifiedAst, pathToNode, 'CallExpression' - ).node + ) + if (trap(_node)) return + const node = _node.node + if (node.type !== 'CallExpression') return - let modded: { - modifiedAst: Program - pathToNode: PathToNode - } + let modded: + | { + modifiedAst: Program + pathToNode: PathToNode + } + | Error if (group.name === PROFILE_START) { modded = updateStartProfileAtArgs({ node: modifiedAst, @@ -1010,14 +1051,18 @@ export class SceneEntities { from ) } + if (trap(modded)) return modifiedAst = modded.modifiedAst + const info = draftInfo + ? draftInfo + : this.prepareTruncatedMemoryAndAst(pathToNode || []) + if (trap(info, { suppress: true })) return const { truncatedAst, programMemoryOverride, variableDeclarationName } = - draftInfo - ? draftInfo - : this.prepareTruncatedMemoryAndAst(sketchPathToNode || []) + info ;(async () => { const code = recast(modifiedAst) + if (trap(code)) return if (!draftInfo) // don't want to mod the user's code yet as they have't committed to the change yet // plus this would be the truncated ast being recast, it would be wrong @@ -1544,11 +1589,14 @@ export class SceneEntities { ]) if (parent?.userData?.pathToNode) { const updatedAst = parse(recast(kclManager.ast)) - const node = getNodeFromPath( + if (trap(updatedAst)) return + const _node = getNodeFromPath( updatedAst, parent.userData.pathToNode, 'CallExpression' - ).node + ) + if (trap(_node, { suppress: true })) return + const node = _node.node editorManager.setHighlightRange([node.start, node.end]) const yellow = 0xffff00 colorSegment(selected, yellow) @@ -1663,20 +1711,23 @@ function prepareTruncatedMemoryAndAst( ast: Program, programMemory: ProgramMemory, draftSegment?: DraftSegment -): { - truncatedAst: Program - programMemoryOverride: ProgramMemory - variableDeclarationName: string -} { +): + | { + truncatedAst: Program + programMemoryOverride: ProgramMemory + variableDeclarationName: string + } + | Error { const bodyIndex = Number(sketchPathToNode?.[1]?.[0]) || 0 const _ast = JSON.parse(JSON.stringify(ast)) - const variableDeclarationName = - getNodeFromPath( - _ast, - sketchPathToNode || [], - 'VariableDeclaration' - )?.node?.declarations?.[0]?.id?.name || '' + const _node = getNodeFromPath( + _ast, + sketchPathToNode || [], + 'VariableDeclaration' + ) + if (err(_node)) return _node + const variableDeclarationName = _node.node?.declarations?.[0]?.id?.name || '' const lastSeg = ( programMemory.root[variableDeclarationName] as SketchGroup ).value.slice(-1)[0] @@ -1704,6 +1755,8 @@ function prepareTruncatedMemoryAndAst( // update source ranges to section we just added. // hacks like this wouldn't be needed if the AST put pathToNode info in memory/sketchGroup segments const updatedSrcRangeAst = parse(recast(_ast)) // get source ranges correct since unfortunately we still rely on them + if (err(updatedSrcRangeAst)) return updatedSrcRangeAst + const lastPipeItem = ( (updatedSrcRangeAst.body[bodyIndex] as VariableDeclaration) .declarations[0].init as PipeExpression @@ -1727,7 +1780,9 @@ function prepareTruncatedMemoryAndAst( ..._ast, body: [JSON.parse(JSON.stringify(_ast.body[bodyIndex]))], } - const programMemoryOverride: ProgramMemory = programMemoryInit() + const programMemoryOverride = programMemoryInit() + if (err(programMemoryOverride)) return programMemoryOverride + for (let i = 0; i < bodyIndex; i++) { const node = _ast.body[i] if (node.type !== 'VariableDeclaration') { @@ -1768,12 +1823,14 @@ export function sketchGroupFromPathToNode({ pathToNode: PathToNode ast: Program programMemory: ProgramMemory -}): SketchGroup { - const varDec = getNodeFromPath( +}): SketchGroup | Error { + const _varDec = getNodeFromPath( kclManager.ast, pathToNode, 'VariableDeclarator' - ).node + ) + if (err(_varDec)) return _varDec + const varDec = _varDec.node const result = programMemory.root[varDec?.id?.name || ''] if (result?.type === 'ExtrudeGroup') { return result.sketchGroup @@ -1808,13 +1865,15 @@ function colorSegment(object: any, color: number) { export function getSketchQuaternion( sketchPathToNode: PathToNode, sketchNormalBackUp: [number, number, number] | null -): Quaternion { +): Quaternion | Error { const sketchGroup = sketchGroupFromPathToNode({ pathToNode: sketchPathToNode, ast: kclManager.ast, programMemory: kclManager.programMemory, }) + if (err(sketchGroup)) return sketchGroup const zAxis = sketchGroup?.on.zAxis || sketchNormalBackUp + return getQuaternionFromZAxis(massageFormats(zAxis)) } export async function getSketchOrientationDetails( @@ -1828,6 +1887,8 @@ export async function getSketchOrientationDetails( ast: kclManager.ast, programMemory: kclManager.programMemory, }) + if (err(sketchGroup)) return Promise.reject(sketchGroup) + if (sketchGroup.on.type === 'plane') { const zAxis = sketchGroup?.on.zAxis return { @@ -1845,11 +1906,12 @@ export async function getSketchOrientationDetails( }, } } + if (sketchGroup.on.type === 'face') { const faceInfo = await getFaceDetails(sketchGroup.on.id) if (!faceInfo?.origin || !faceInfo?.z_axis || !faceInfo?.y_axis) - throw new Error('faceInfo') + return Promise.reject('face info') const { z_axis, y_axis, origin } = faceInfo const quaternion = quaternionFromUpNForward( new Vector3(y_axis.x, y_axis.y, y_axis.z), @@ -1866,7 +1928,7 @@ export async function getSketchOrientationDetails( }, } } - throw new Error( + return Promise.reject( 'sketchGroup.on.type not recognized, has a new type been added?' ) } diff --git a/src/components/AstExplorer.tsx b/src/components/AstExplorer.tsx index 6a448dc47..93665cd9f 100644 --- a/src/components/AstExplorer.tsx +++ b/src/components/AstExplorer.tsx @@ -2,6 +2,7 @@ import { useModelingContext } from 'hooks/useModelingContext' import { editorManager, kclManager } from 'lib/singletons' import { getNodeFromPath, getNodePathFromSourceRange } from 'lang/queryAst' import { useEffect, useRef, useState } from 'react' +import { trap } from 'lib/trap' export function AstExplorer() { const { context } = useModelingContext() @@ -10,9 +11,12 @@ export function AstExplorer() { kclManager.ast, context.selectionRanges.codeBasedSelections?.[0]?.range ) - const node = getNodeFromPath(kclManager.ast, pathToNode).node const [filterKeys, setFilterKeys] = useState(['start', 'end']) + const _node = getNodeFromPath(kclManager.ast, pathToNode) + if (trap(_node)) return + const node = _node + return (
diff --git a/src/components/AvailableVarsHelpers.tsx b/src/components/AvailableVarsHelpers.tsx index 635c6e306..dfb653c09 100644 --- a/src/components/AvailableVarsHelpers.tsx +++ b/src/components/AvailableVarsHelpers.tsx @@ -11,6 +11,7 @@ import { engineCommandManager, kclManager } from 'lib/singletons' import { useKclContext } from 'lang/KclProvider' import { useModelingContext } from 'hooks/useModelingContext' import { executeAst } from 'useStore' +import { trap } from 'lib/trap' export const AvailableVars = ({ onVarClick, @@ -141,6 +142,7 @@ export function useCalc({ try { const code = `const __result__ = ${value}` const ast = parse(code) + if (trap(ast)) return const _programMem: any = { root: {}, return: null } availableVarInfo.variables.forEach(({ key, value }) => { _programMem.root[key] = { type: 'userVal', value, __meta: [] } diff --git a/src/components/CommandBar/CommandBar.tsx b/src/components/CommandBar/CommandBar.tsx index 2492e858c..865fc392e 100644 --- a/src/components/CommandBar/CommandBar.tsx +++ b/src/components/CommandBar/CommandBar.tsx @@ -24,7 +24,7 @@ export const CommandBar = () => { }, [pathname]) // Hook up keyboard shortcuts - useHotkeyWrapper(['mod+k', 'mod+/'], () => { + useHotkeyWrapper(['mod+k', 'ctrl+c'], () => { if (commandBarState.context.commands.length === 0) return if (commandBarState.matches('Closed')) { commandBarSend({ type: 'Open' }) diff --git a/src/components/LspProvider.tsx b/src/components/LspProvider.tsx index 2be454c6b..aaaf5126e 100644 --- a/src/components/LspProvider.tsx +++ b/src/components/LspProvider.tsx @@ -1,6 +1,12 @@ import { LanguageServerClient } from 'editor/plugins/lsp' import type * as LSP from 'vscode-languageserver-protocol' -import React, { createContext, useMemo, useEffect, useContext } from 'react' +import React, { + createContext, + useMemo, + useEffect, + useContext, + useState, +} from 'react' import { FromServer, IntoServer } from 'editor/plugins/lsp/codec' import Client from '../editor/plugins/lsp/client' import { TEST, VITE_KC_API_BASE_URL } from 'env' @@ -24,6 +30,7 @@ import { wasmUrl } from 'lang/wasm' import { PROJECT_ENTRYPOINT } from 'lib/constants' import { useNetworkContext } from 'hooks/useNetworkContext' import { NetworkHealthState } from 'hooks/useNetworkStatus' +import { err, trap } from 'lib/trap' function getWorkspaceFolders(): LSP.WorkspaceFolder[] { return [] @@ -76,6 +83,8 @@ export const LspProvider = ({ children }: { children: React.ReactNode }) => { setIsCopilotLspServerReady: s.setIsCopilotLspServerReady, isStreamReady: s.isStreamReady, })) + const [isLspReady, setIsLspReady] = useState(false) + const [isCopilotReady, setIsCopilotReady] = useState(false) const { auth, @@ -111,14 +120,17 @@ export const LspProvider = ({ children }: { children: React.ReactNode }) => { eventData: initEvent, }) lspWorker.onmessage = function (e) { + if (err(fromServer)) return fromServer.add(e.data) } const intoServer: IntoServer = new IntoServer(LspWorker.Kcl, lspWorker) - const fromServer: FromServer = FromServer.create() + const fromServer: FromServer | Error = FromServer.create() + if (err(fromServer)) return { lspClient: null } + const client = new Client(fromServer, intoServer) - setIsKclLspServerReady(true) + setIsLspReady(true) const lspClient = new LanguageServerClient({ client, name: LspWorker.Kcl }) return { lspClient } @@ -185,14 +197,17 @@ export const LspProvider = ({ children }: { children: React.ReactNode }) => { eventData: initEvent, }) lspWorker.onmessage = function (e) { + if (err(fromServer)) return fromServer.add(e.data) } const intoServer: IntoServer = new IntoServer(LspWorker.Copilot, lspWorker) - const fromServer: FromServer = FromServer.create() + const fromServer: FromServer | Error = FromServer.create() + if (err(fromServer)) return { lspClient: null } + const client = new Client(fromServer, intoServer) - setIsCopilotLspServerReady(true) + setIsCopilotReady(true) const lspClient = new LanguageServerClient({ client, @@ -230,6 +245,13 @@ export const LspProvider = ({ children }: { children: React.ReactNode }) => { lspClients.push(copilotLspClient) } + useEffect(() => { + setIsKclLspServerReady(isLspReady) + }, [isLspReady]) + useEffect(() => { + setIsCopilotLspServerReady(isCopilotReady) + }, [isCopilotReady]) + const onProjectClose = ( file: FileEntry | null, projectPath: string | null, diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx index b1fc4e9c9..345bf2af4 100644 --- a/src/components/ModelingMachineProvider.tsx +++ b/src/components/ModelingMachineProvider.tsx @@ -29,7 +29,6 @@ import { applyConstraintAngleBetween, } from './Toolbar/SetAngleBetween' import { applyConstraintAngleLength } from './Toolbar/setAngleLength' -import { pathMapToSelections } from 'lang/util' import { useStore } from 'useStore' import { Selections, @@ -37,6 +36,7 @@ import { handleSelectionBatch, isSelectionLastLine, isSketchPipe, + updateSelections, } from 'lib/selections' import { applyConstraintIntersect } from './Toolbar/Intersect' import { applyConstraintAbsDistance } from './Toolbar/SetAbsDistance' @@ -77,6 +77,7 @@ import { letEngineAnimateAndSyncCamAfter } from 'clientSideScene/CameraControls' import { getVarNameModal } from 'hooks/useToolbarGuards' import useHotkeyWrapper from 'lib/hotkeyWrapper' import { uuidv4 } from 'lib/utils' +import { err, trap } from 'lib/trap' type MachineContext = { state: StateFrom @@ -459,12 +460,17 @@ export const ModelingMachineProvider = ({ return canExtrudeSelection(selectionRanges) }, - 'Sketch is empty': ({ sketchDetails }) => - getNodeFromPath( + 'Sketch is empty': ({ sketchDetails }) => { + const node = getNodeFromPath( kclManager.ast, sketchDetails?.sketchPathToNode || [], 'VariableDeclaration' - )?.node?.declarations?.[0]?.init.type !== 'PipeExpression', + ) + // This should not be returning false, and it should be caught + // but we need to simulate old behavior to move on. + if (err(node)) return false + return node.node?.declarations?.[0]?.init.type !== 'PipeExpression' + }, 'Selection is on face': ({ selectionRanges }, { data }) => { if (data?.forceNewSketch) return false if (!isSingleCursorInPipe(selectionRanges, kclManager.ast)) @@ -507,14 +513,16 @@ export const ModelingMachineProvider = ({ }, 'animate-to-face': async (_, { data }) => { if (data.type === 'extrudeFace') { - const { modifiedAst, pathToNode: pathToNewSketchNode } = - sketchOnExtrudedFace( - kclManager.ast, - data.sketchPathToNode, - data.extrudePathToNode, - kclManager.programMemory, - data.cap - ) + const sketched = sketchOnExtrudedFace( + kclManager.ast, + data.sketchPathToNode, + data.extrudePathToNode, + kclManager.programMemory, + data.cap + ) + if (trap(sketched)) return Promise.reject(sketched) + const { modifiedAst, pathToNode: pathToNewSketchNode } = sketched + await kclManager.executeAstMock(modifiedAst) await letEngineAnimateAndSyncCamAfter( @@ -535,10 +543,12 @@ export const ModelingMachineProvider = ({ ) await kclManager.updateAst(modifiedAst, false) sceneInfra.camControls.syncDirection = 'clientToEngine' + await letEngineAnimateAndSyncCamAfter( engineCommandManager, data.planeId ) + return { sketchPathToNode: pathToNode, zAxis: data.zAxis, @@ -576,25 +586,29 @@ export const ModelingMachineProvider = ({ selectionRanges, }) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -608,25 +622,29 @@ export const ModelingMachineProvider = ({ selectionRanges, }) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -634,9 +652,11 @@ export const ModelingMachineProvider = ({ selectionRanges, sketchDetails, }): Promise => { - const { modifiedAst, pathToNodeMap } = await (angleBetweenInfo({ + const info = angleBetweenInfo({ selectionRanges, - }).enabled + }) + if (err(info)) return Promise.reject(info) + const { modifiedAst, pathToNodeMap } = await (info.enabled ? applyConstraintAngleBetween({ selectionRanges, }) @@ -645,25 +665,31 @@ export const ModelingMachineProvider = ({ angleOrLength: 'setAngle', })) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (err(_modifiedAst)) return Promise.reject(_modifiedAst) + + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - _modifiedAst, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -674,25 +700,29 @@ export const ModelingMachineProvider = ({ const { modifiedAst, pathToNodeMap } = await applyConstraintAngleLength({ selectionRanges }) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -706,25 +736,29 @@ export const ModelingMachineProvider = ({ } ) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -738,25 +772,29 @@ export const ModelingMachineProvider = ({ selectionRanges, }) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, @@ -770,48 +808,77 @@ export const ModelingMachineProvider = ({ selectionRanges, }) const _modifiedAst = parse(recast(modifiedAst)) - if (!sketchDetails) throw new Error('No sketch details') + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const updatedPathToNode = updatePathToNodeFromMap( sketchDetails.sketchPathToNode, pathToNodeMap ) - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( updatedPathToNode, _modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + pathToNodeMap, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) return { selectionType: 'completeSelection', - selection: pathMapToSelections( - kclManager.ast, - selectionRanges, - pathToNodeMap - ), + selection, updatedPathToNode, } }, - 'Get convert to variable info': async ({ sketchDetails }, { data }) => { - if (!sketchDetails) return [] + 'Get convert to variable info': async ( + { sketchDetails, selectionRanges }, + { data } + ): Promise => { + if (!sketchDetails) + return Promise.reject(new Error('No sketch details')) const { variableName } = await getVarNameModal({ valueName: data.variableName || 'var', }) + let parsed = parse(recast(kclManager.ast)) + if (trap(parsed)) return Promise.reject(parsed) + parsed = parsed as Program + const { modifiedAst: _modifiedAst, pathToReplacedNode } = moveValueIntoNewVariablePath( - parse(recast(kclManager.ast)), + parsed, kclManager.programMemory, data.pathToNode, variableName ) - await sceneEntitiesManager.updateAstAndRejigSketch( + parsed = parse(recast(_modifiedAst)) + if (trap(parsed)) return Promise.reject(parsed) + parsed = parsed as Program + if (!pathToReplacedNode) + return Promise.reject(new Error('No path to replaced node')) + + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( pathToReplacedNode || [], - parse(recast(_modifiedAst)), + parsed, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) - return pathToReplacedNode || sketchDetails.sketchPathToNode + if (err(updatedAst)) return Promise.reject(updatedAst) + const selection = updateSelections( + { 0: pathToReplacedNode }, + selectionRanges, + updatedAst.newAst + ) + if (err(selection)) return Promise.reject(selection) + return { + selectionType: 'completeSelection', + selection, + updatedPathToNode: pathToReplacedNode, + } }, }, devTools: true, diff --git a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.tsx b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.tsx index 87ca811ad..0898f6d51 100644 --- a/src/components/ModelingSidebar/ModelingPanes/MemoryPane.tsx +++ b/src/components/ModelingSidebar/ModelingPanes/MemoryPane.tsx @@ -1,10 +1,11 @@ +import toast from 'react-hot-toast' import ReactJson from 'react-json-view' import { useMemo } from 'react' import { ProgramMemory, Path, ExtrudeSurface } from 'lang/wasm' import { useKclContext } from 'lang/KclProvider' import { useResolvedTheme } from 'hooks/useResolvedTheme' import { ActionButton } from 'components/ActionButton' -import toast from 'react-hot-toast' +import { trap } from 'lib/trap' import Tooltip from 'components/Tooltip' import { useModelingContext } from 'hooks/useModelingContext' @@ -13,12 +14,12 @@ export const MemoryPaneMenu = () => { function copyProgramMemoryToClipboard() { if (globalThis && 'navigator' in globalThis) { - try { - navigator.clipboard.writeText(JSON.stringify(programMemory)) - toast.success('Program memory copied to clipboard') - } catch (e) { - toast.error('Failed to copy program memory to clipboard') - } + navigator.clipboard + .writeText(JSON.stringify(programMemory)) + .then(() => toast.success('Program memory copied to clipboard')) + .catch((e) => + trap(new Error('Failed to copy program memory to clipboard')) + ) } } diff --git a/src/components/Toolbar/EqualAngle.tsx b/src/components/Toolbar/EqualAngle.tsx index c33d84014..d8d03cc40 100644 --- a/src/components/Toolbar/EqualAngle.tsx +++ b/src/components/Toolbar/EqualAngle.tsx @@ -10,28 +10,46 @@ import { transformSecondarySketchLinesTagFirst, getTransformInfos, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' export function equalAngleInfo({ selectionRanges, }: { selectionRanges: Selections -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) - const varDecs = paths.map( - (pathToNode) => - getNodeFromPath( - kclManager.ast, - pathToNode, - 'VariableDeclarator' - )?.node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + + const _varDecs = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'VariableDeclarator' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err2 = _varDecs.find(err) + if (err(_err2)) return _err2 + const varDecs = _varDecs as VariableDeclarator[] + const primaryLine = varDecs[0] const secondaryVarDecs = varDecs.slice(1) const isOthersLinkedToPrimary = secondaryVarDecs.every((secondary) => @@ -51,6 +69,7 @@ export function equalAngleInfo({ kclManager.ast, 'equalAngle' ) + if (err(transforms)) return transforms const enabled = !!secondaryVarDecs.length && @@ -64,16 +83,24 @@ export function applyConstraintEqualAngle({ selectionRanges, }: { selectionRanges: Selections -}): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const { transforms } = equalAngleInfo({ selectionRanges }) - const { modifiedAst, pathToNodeMap } = transformSecondarySketchLinesTagFirst({ +}): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const info = equalAngleInfo({ selectionRanges }) + if (err(info)) return info + const { transforms } = info + + const transform = transformSecondarySketchLinesTagFirst({ ast: kclManager.ast, selectionRanges, transformInfos: transforms, programMemory: kclManager.programMemory, }) + if (err(transform)) return transform + const { modifiedAst, pathToNodeMap } = transform + return { modifiedAst, pathToNodeMap } } diff --git a/src/components/Toolbar/EqualLength.tsx b/src/components/Toolbar/EqualLength.tsx index fc9c950d6..d789862a1 100644 --- a/src/components/Toolbar/EqualLength.tsx +++ b/src/components/Toolbar/EqualLength.tsx @@ -10,28 +10,46 @@ import { transformSecondarySketchLinesTagFirst, getTransformInfos, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' export function setEqualLengthInfo({ selectionRanges, }: { selectionRanges: Selections -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) - const varDecs = paths.map( - (pathToNode) => - getNodeFromPath( - kclManager.ast, - pathToNode, - 'VariableDeclarator' - )?.node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + + const _varDecs = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'VariableDeclarator' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err2 = _varDecs.find(err) + if (err(_err2)) return _err2 + const varDecs = _varDecs as VariableDeclarator[] + const primaryLine = varDecs[0] const secondaryVarDecs = varDecs.slice(1) const isOthersLinkedToPrimary = secondaryVarDecs.every((secondary) => @@ -51,6 +69,7 @@ export function setEqualLengthInfo({ kclManager.ast, 'equalLength' ) + if (err(transforms)) return transforms const enabled = !!secondaryVarDecs.length && @@ -65,16 +84,24 @@ export function applyConstraintEqualLength({ selectionRanges, }: { selectionRanges: Selections -}): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const { transforms } = setEqualLengthInfo({ selectionRanges }) - const { modifiedAst, pathToNodeMap } = transformSecondarySketchLinesTagFirst({ +}): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const info = setEqualLengthInfo({ selectionRanges }) + if (err(info)) return info + const { transforms } = info + + const transform = transformSecondarySketchLinesTagFirst({ ast: kclManager.ast, selectionRanges, transformInfos: transforms, programMemory: kclManager.programMemory, }) + if (err(transform)) return transform + const { modifiedAst, pathToNodeMap } = transform + return { modifiedAst, pathToNodeMap } } diff --git a/src/components/Toolbar/HorzVert.tsx b/src/components/Toolbar/HorzVert.tsx index 4e9b30226..17bac1b3a 100644 --- a/src/components/Toolbar/HorzVert.tsx +++ b/src/components/Toolbar/HorzVert.tsx @@ -9,19 +9,32 @@ import { PathToNodeMap, getTransformInfos, transformAstSketchLines, + TransformInfo, } from '../../lang/std/sketchcombos' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' export function horzVertInfo( selectionRanges: Selections, horOrVert: 'vertical' | 'horizontal' -) { +): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + const isAllTooltips = nodes.every( (node) => node?.type === 'CallExpression' && @@ -33,6 +46,8 @@ export function horzVertInfo( kclManager.ast, horOrVert ) + if (err(theTransforms)) return theTransforms + const _enableHorz = isAllTooltips && theTransforms.every(Boolean) return { enabled: _enableHorz, transforms: theTransforms } } @@ -42,11 +57,16 @@ export function applyConstraintHorzVert( horOrVert: 'vertical' | 'horizontal', ast: Program, programMemory: ProgramMemory -): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const transformInfos = horzVertInfo(selectionRanges, horOrVert).transforms +): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const info = horzVertInfo(selectionRanges, horOrVert) + if (err(info)) return info + const transformInfos = info.transforms + return transformAstSketchLines({ ast, selectionRanges, diff --git a/src/components/Toolbar/Intersect.tsx b/src/components/Toolbar/Intersect.tsx index 4d1ba0c96..cec1b1945 100644 --- a/src/components/Toolbar/Intersect.tsx +++ b/src/components/Toolbar/Intersect.tsx @@ -11,11 +11,13 @@ import { transformSecondarySketchLinesTagFirst, getTransformInfos, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal' import { createVariableDeclaration } from '../../lang/modifyAst' import { removeDoubleNegatives } from '../AvailableVarsHelpers' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' const getModalInfo = createInfoModal(GetInfoModal) @@ -23,7 +25,13 @@ export function intersectInfo({ selectionRanges, }: { selectionRanges: Selections -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + forcedSelectionRanges: Selections + } + | Error { if (selectionRanges.codeBasedSelections.length < 2) { return { enabled: false, @@ -40,6 +48,8 @@ export function intersectInfo({ selectionRanges.codeBasedSelections[0], selectionRanges.codeBasedSelections[1] ) + if (err(previousSegment)) return previousSegment + const shouldUsePreviousSegment = selectionRanges.codeBasedSelections?.[1]?.type !== 'line-end' && previousSegment && @@ -61,17 +71,28 @@ export function intersectInfo({ const paths = _forcedSelectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) - const varDecs = paths.map( - (pathToNode) => - getNodeFromPath( - kclManager.ast, - pathToNode, - 'VariableDeclarator' - )?.node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + + const _varDecs = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'VariableDeclarator' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err2 = _varDecs.find(err) + if (err(_err2)) return _err2 + const varDecs = _varDecs as VariableDeclarator[] + const primaryLine = varDecs[0] const secondaryVarDecs = varDecs.slice(1) const isOthersLinkedToPrimary = secondaryVarDecs.every((secondary) => @@ -117,16 +138,22 @@ export async function applyConstraintIntersect({ modifiedAst: Program pathToNodeMap: PathToNodeMap }> { - const { transforms, forcedSelectionRanges } = intersectInfo({ + const info = intersectInfo({ selectionRanges, }) + if (err(info)) return Promise.reject(info) + const { transforms, forcedSelectionRanges } = info + + const transform1 = transformSecondarySketchLinesTagFirst({ + ast: JSON.parse(JSON.stringify(kclManager.ast)), + selectionRanges: forcedSelectionRanges, + transformInfos: transforms, + programMemory: kclManager.programMemory, + }) + if (err(transform1)) return Promise.reject(transform1) const { modifiedAst, tagInfo, valueUsedInTransform, pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: JSON.parse(JSON.stringify(kclManager.ast)), - selectionRanges: forcedSelectionRanges, - transformInfos: transforms, - programMemory: kclManager.programMemory, - }) + transform1 + const { segName, value, @@ -156,15 +183,18 @@ export async function applyConstraintIntersect({ sign, variableName ) + const transform2 = transformSecondarySketchLinesTagFirst({ + ast: kclManager.ast, + selectionRanges: forcedSelectionRanges, + transformInfos: transforms, + programMemory: kclManager.programMemory, + forceSegName: segName, + forceValueUsedInTransform: finalValue, + }) + if (err(transform2)) return Promise.reject(transform2) const { modifiedAst: _modifiedAst, pathToNodeMap: _pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: kclManager.ast, - selectionRanges: forcedSelectionRanges, - transformInfos: transforms, - programMemory: kclManager.programMemory, - forceSegName: segName, - forceValueUsedInTransform: finalValue, - }) + transform2 + if (variableName) { const newBody = [..._modifiedAst.body] newBody.splice( diff --git a/src/components/Toolbar/RemoveConstrainingValues.tsx b/src/components/Toolbar/RemoveConstrainingValues.tsx index 0cd831b91..2818d27d9 100644 --- a/src/components/Toolbar/RemoveConstrainingValues.tsx +++ b/src/components/Toolbar/RemoveConstrainingValues.tsx @@ -9,8 +9,10 @@ import { PathToNodeMap, getRemoveConstraintsTransforms, transformAstSketchLines, + TransformInfo, } from '../../lang/std/sketchcombos' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' export function removeConstrainingValuesInfo({ selectionRanges, @@ -18,15 +20,27 @@ export function removeConstrainingValuesInfo({ }: { selectionRanges: Selections pathToNodes?: Array -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + updatedSelectionRanges: Selections + } + | Error { const paths = pathToNodes || selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + const updatedSelectionRanges = pathToNodes ? { otherSelections: [], @@ -44,19 +58,15 @@ export function removeConstrainingValuesInfo({ toolTips.includes(node.callee.name as any) ) - try { - const transforms = getRemoveConstraintsTransforms( - updatedSelectionRanges, - kclManager.ast, - 'removeConstrainingValues' - ) + const transforms = getRemoveConstraintsTransforms( + updatedSelectionRanges, + kclManager.ast, + 'removeConstrainingValues' + ) + if (err(transforms)) return transforms - const enabled = isAllTooltips && transforms.every(Boolean) - return { enabled, transforms, updatedSelectionRanges } - } catch (e) { - console.error(e) - return { enabled: false, transforms: [], updatedSelectionRanges } - } + const enabled = isAllTooltips && transforms.every(Boolean) + return { enabled, transforms, updatedSelectionRanges } } export function applyRemoveConstrainingValues({ @@ -65,14 +75,19 @@ export function applyRemoveConstrainingValues({ }: { selectionRanges: Selections pathToNodes?: Array -}): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const { transforms, updatedSelectionRanges } = removeConstrainingValuesInfo({ +}): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const constraint = removeConstrainingValuesInfo({ selectionRanges, pathToNodes, }) + if (err(constraint)) return constraint + const { transforms, updatedSelectionRanges } = constraint + return transformAstSketchLines({ ast: kclManager.ast, selectionRanges: updatedSelectionRanges, diff --git a/src/components/Toolbar/SetAbsDistance.tsx b/src/components/Toolbar/SetAbsDistance.tsx index 1c671225b..c8246734c 100644 --- a/src/components/Toolbar/SetAbsDistance.tsx +++ b/src/components/Toolbar/SetAbsDistance.tsx @@ -9,6 +9,7 @@ import { getTransformInfos, transformAstSketchLines, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { SetAngleLengthModal, @@ -20,6 +21,7 @@ import { } from '../../lang/modifyAst' import { removeDoubleNegatives } from '../AvailableVarsHelpers' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' const getModalInfo = createSetAngleLengthModal(SetAngleLengthModal) @@ -31,7 +33,12 @@ export function absDistanceInfo({ }: { selectionRanges: Selections constraint: Constraint -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const disType = constraint === 'xAbs' || constraint === 'yAbs' ? constraint @@ -41,10 +48,19 @@ export function absDistanceInfo({ const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => - getNodeFromPath(kclManager.ast, pathToNode, 'CallExpression').node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'CallExpression' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + const isAllTooltips = nodes.every( (node) => node?.type === 'CallExpression' && @@ -52,6 +68,7 @@ export function absDistanceInfo({ ) const transforms = getTransformInfos(selectionRanges, kclManager.ast, disType) + if (err(transforms)) return transforms const enableY = disType === 'yAbs' && @@ -81,17 +98,23 @@ export async function applyConstraintAbsDistance({ modifiedAst: Program pathToNodeMap: PathToNodeMap }> { - const transformInfos = absDistanceInfo({ + const info = absDistanceInfo({ selectionRanges, constraint, - }).transforms - const { valueUsedInTransform } = transformAstSketchLines({ + }) + if (err(info)) return Promise.reject(info) + const transformInfos = info.transforms + + const transform1 = transformAstSketchLines({ ast: JSON.parse(JSON.stringify(kclManager.ast)), selectionRanges: selectionRanges, transformInfos, programMemory: kclManager.programMemory, referenceSegName: '', }) + if (err(transform1)) return Promise.reject(transform1) + const { valueUsedInTransform } = transform1 + let forceVal = valueUsedInTransform || 0 const { valueNode, variableName, newVariableInsertIndex, sign } = await getModalInfo({ @@ -104,7 +127,7 @@ export async function applyConstraintAbsDistance({ variableName ) - const { modifiedAst: _modifiedAst, pathToNodeMap } = transformAstSketchLines({ + const transform2 = transformAstSketchLines({ ast: JSON.parse(JSON.stringify(kclManager.ast)), selectionRanges: selectionRanges, transformInfos, @@ -112,6 +135,9 @@ export async function applyConstraintAbsDistance({ referenceSegName: '', forceValueUsedInTransform: finalValue, }) + if (err(transform2)) return Promise.reject(transform2) + const { modifiedAst: _modifiedAst, pathToNodeMap } = transform2 + if (variableName) { const newBody = [..._modifiedAst.body] newBody.splice( @@ -134,14 +160,18 @@ export function applyConstraintAxisAlign({ }: { selectionRanges: Selections constraint: 'snapToYAxis' | 'snapToXAxis' -}): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const transformInfos = absDistanceInfo({ +}): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const info = absDistanceInfo({ selectionRanges, constraint, - }).transforms + }) + if (err(info)) return info + const transformInfos = info.transforms let finalValue = createIdentifier('ZERO') diff --git a/src/components/Toolbar/SetAngleBetween.tsx b/src/components/Toolbar/SetAngleBetween.tsx index ba44cec83..f6125a295 100644 --- a/src/components/Toolbar/SetAngleBetween.tsx +++ b/src/components/Toolbar/SetAngleBetween.tsx @@ -10,11 +10,13 @@ import { transformSecondarySketchLinesTagFirst, getTransformInfos, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal' import { createVariableDeclaration } from '../../lang/modifyAst' import { removeDoubleNegatives } from '../AvailableVarsHelpers' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' const getModalInfo = createInfoModal(GetInfoModal) @@ -22,22 +24,38 @@ export function angleBetweenInfo({ selectionRanges, }: { selectionRanges: Selections -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) - const varDecs = paths.map( - (pathToNode) => - getNodeFromPath( - kclManager.ast, - pathToNode, - 'VariableDeclarator' - )?.node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const _err1 = _nodes.find(err) + if (err(_err1)) return _err1 + const nodes = _nodes as Value[] + + const _varDecs = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'VariableDeclarator' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err2 = _varDecs.find(err) + if (err(_err2)) return _err2 + const varDecs = _varDecs as VariableDeclarator[] + const primaryLine = varDecs[0] const secondaryVarDecs = varDecs.slice(1) const isOthersLinkedToPrimary = secondaryVarDecs.every((secondary) => @@ -77,14 +95,20 @@ export async function applyConstraintAngleBetween({ modifiedAst: Program pathToNodeMap: PathToNodeMap }> { - const transformInfos = angleBetweenInfo({ selectionRanges }).transforms + const info = angleBetweenInfo({ selectionRanges }) + if (err(info)) return Promise.reject(info) + const transformInfos = info.transforms + + const transformed1 = transformSecondarySketchLinesTagFirst({ + ast: JSON.parse(JSON.stringify(kclManager.ast)), + selectionRanges, + transformInfos, + programMemory: kclManager.programMemory, + }) + if (err(transformed1)) return Promise.reject(transformed1) const { modifiedAst, tagInfo, valueUsedInTransform, pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: JSON.parse(JSON.stringify(kclManager.ast)), - selectionRanges, - transformInfos, - programMemory: kclManager.programMemory, - }) + transformed1 + const { segName, value, @@ -115,15 +139,18 @@ export async function applyConstraintAngleBetween({ variableName ) // transform again but forcing certain values + const transformed2 = transformSecondarySketchLinesTagFirst({ + ast: kclManager.ast, + selectionRanges, + transformInfos, + programMemory: kclManager.programMemory, + forceSegName: segName, + forceValueUsedInTransform: finalValue, + }) + if (err(transformed2)) return Promise.reject(transformed2) const { modifiedAst: _modifiedAst, pathToNodeMap: _pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: kclManager.ast, - selectionRanges, - transformInfos, - programMemory: kclManager.programMemory, - forceSegName: segName, - forceValueUsedInTransform: finalValue, - }) + transformed2 + if (variableName) { const newBody = [..._modifiedAst.body] newBody.splice( diff --git a/src/components/Toolbar/SetHorzVertDistance.tsx b/src/components/Toolbar/SetHorzVertDistance.tsx index b7dbf3487..686fb158f 100644 --- a/src/components/Toolbar/SetHorzVertDistance.tsx +++ b/src/components/Toolbar/SetHorzVertDistance.tsx @@ -9,12 +9,14 @@ import { transformSecondarySketchLinesTagFirst, getTransformInfos, PathToNodeMap, + TransformInfo, } from '../../lang/std/sketchcombos' import { GetInfoModal, createInfoModal } from '../SetHorVertDistanceModal' import { createLiteral, createVariableDeclaration } from '../../lang/modifyAst' import { removeDoubleNegatives } from '../AvailableVarsHelpers' import { kclManager } from 'lib/singletons' import { Selections } from 'lib/selections' +import { cleanErrs, err } from 'lib/trap' const getModalInfo = createInfoModal(GetInfoModal) @@ -24,21 +26,38 @@ export function horzVertDistanceInfo({ }: { selectionRanges: Selections constraint: 'setHorzDistance' | 'setVertDistance' -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(kclManager.ast, pathToNode).node - ) - const varDecs = paths.map( - (pathToNode) => - getNodeFromPath( - kclManager.ast, - pathToNode, - 'VariableDeclarator' - )?.node - ) + const _nodes = paths.map((pathToNode) => { + const tmp = getNodeFromPath(kclManager.ast, pathToNode) + if (err(tmp)) return tmp + return tmp.node + }) + const [hasErr, , nodesWErrs] = cleanErrs(_nodes) + + if (hasErr) return nodesWErrs[0] + const nodes = _nodes as Value[] + + const _varDecs = paths.map((pathToNode) => { + const tmp = getNodeFromPath( + kclManager.ast, + pathToNode, + 'VariableDeclarator' + ) + if (err(tmp)) return tmp + return tmp.node + }) + const _err2 = _varDecs.find(err) + if (err(_err2)) return _err2 + const varDecs = _varDecs as VariableDeclarator[] + const primaryLine = varDecs[0] const secondaryVarDecs = varDecs.slice(1) const isOthersLinkedToPrimary = secondaryVarDecs.every((secondary) => @@ -82,17 +101,21 @@ export async function applyConstraintHorzVertDistance({ modifiedAst: Program pathToNodeMap: PathToNodeMap }> { - const transformInfos = horzVertDistanceInfo({ + const info = horzVertDistanceInfo({ selectionRanges, constraint, - }).transforms + }) + if (err(info)) return Promise.reject(info) + const transformInfos = info.transforms + const transformed = transformSecondarySketchLinesTagFirst({ + ast: JSON.parse(JSON.stringify(kclManager.ast)), + selectionRanges, + transformInfos, + programMemory: kclManager.programMemory, + }) + if (err(transformed)) return Promise.reject(transformed) const { modifiedAst, tagInfo, valueUsedInTransform, pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: JSON.parse(JSON.stringify(kclManager.ast)), - selectionRanges, - transformInfos, - programMemory: kclManager.programMemory, - }) + transformed const { segName, value, @@ -120,15 +143,17 @@ export async function applyConstraintHorzVertDistance({ ? createLiteral(0) : removeDoubleNegatives(valueNode as BinaryPart, sign, variableName) // transform again but forcing certain values - const { modifiedAst: _modifiedAst, pathToNodeMap } = - transformSecondarySketchLinesTagFirst({ - ast: kclManager.ast, - selectionRanges, - transformInfos, - programMemory: kclManager.programMemory, - forceSegName: segName, - forceValueUsedInTransform: finalValue, - }) + const transformed = transformSecondarySketchLinesTagFirst({ + ast: kclManager.ast, + selectionRanges, + transformInfos, + programMemory: kclManager.programMemory, + forceSegName: segName, + forceValueUsedInTransform: finalValue, + }) + + if (err(transformed)) return Promise.reject(transformed) + const { modifiedAst: _modifiedAst, pathToNodeMap } = transformed if (variableName) { const newBody = [..._modifiedAst.body] newBody.splice( @@ -155,22 +180,28 @@ export function applyConstraintHorzVertAlign({ }: { selectionRanges: Selections constraint: 'setHorzDistance' | 'setVertDistance' -}): { - modifiedAst: Program - pathToNodeMap: PathToNodeMap -} { - const transformInfos = horzVertDistanceInfo({ +}): + | { + modifiedAst: Program + pathToNodeMap: PathToNodeMap + } + | Error { + const info = horzVertDistanceInfo({ selectionRanges, constraint, - }).transforms + }) + if (err(info)) return info + const transformInfos = info.transforms let finalValue = createLiteral(0) - const { modifiedAst, pathToNodeMap } = transformSecondarySketchLinesTagFirst({ + const retval = transformSecondarySketchLinesTagFirst({ ast: kclManager.ast, selectionRanges, transformInfos, programMemory: kclManager.programMemory, forceValueUsedInTransform: finalValue, }) + if (err(retval)) return retval + const { modifiedAst, pathToNodeMap } = retval return { modifiedAst: modifiedAst, pathToNodeMap, diff --git a/src/components/Toolbar/setAngleLength.tsx b/src/components/Toolbar/setAngleLength.tsx index 8aa418770..c65f43588 100644 --- a/src/components/Toolbar/setAngleLength.tsx +++ b/src/components/Toolbar/setAngleLength.tsx @@ -9,6 +9,7 @@ import { PathToNodeMap, getTransformInfos, transformAstSketchLines, + TransformInfo, } from '../../lang/std/sketchcombos' import { SetAngleLengthModal, @@ -22,6 +23,7 @@ import { import { removeDoubleNegatives } from '../AvailableVarsHelpers' import { normaliseAngle } from '../../lib/utils' import { kclManager } from 'lib/singletons' +import { err } from 'lib/trap' const getModalInfo = createSetAngleLengthModal(SetAngleLengthModal) @@ -31,19 +33,29 @@ export function angleLengthInfo({ }: { selectionRanges: Selections angleOrLength?: 'setLength' | 'setAngle' -}) { +}): + | { + transforms: TransformInfo[] + enabled: boolean + } + | Error { const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(kclManager.ast, range) ) - const nodes = paths.map( - (pathToNode) => - getNodeFromPath(kclManager.ast, pathToNode, 'CallExpression').node - ) - const isAllTooltips = nodes.every( - (node) => - node?.type === 'CallExpression' && - toolTips.includes(node.callee.name as any) + + const nodes = paths.map((pathToNode) => + getNodeFromPath(kclManager.ast, pathToNode, 'CallExpression') ) + const _err1 = nodes.find(err) + if (err(_err1)) return _err1 + + const isAllTooltips = nodes.every((meta) => { + if (err(meta)) return false + return ( + meta.node?.type === 'CallExpression' && + toolTips.includes(meta.node.callee.name as any) + ) + }) const transforms = getTransformInfos( selectionRanges, @@ -67,88 +79,91 @@ export async function applyConstraintAngleLength({ modifiedAst: Program pathToNodeMap: PathToNodeMap }> { - const { transforms } = angleLengthInfo({ selectionRanges, angleOrLength }) - const { valueUsedInTransform } = transformAstSketchLines({ + const angleLength = angleLengthInfo({ selectionRanges, angleOrLength }) + if (err(angleLength)) return Promise.reject(angleLength) + + const { transforms } = angleLength + const sketched = transformAstSketchLines({ ast: JSON.parse(JSON.stringify(kclManager.ast)), selectionRanges, transformInfos: transforms, programMemory: kclManager.programMemory, referenceSegName: '', }) - try { - const isReferencingYAxis = - selectionRanges.otherSelections.length === 1 && - selectionRanges.otherSelections[0] === 'y-axis' - const isReferencingYAxisAngle = - isReferencingYAxis && angleOrLength === 'setAngle' + if (err(sketched)) return Promise.reject(sketched) + const { valueUsedInTransform } = sketched - const isReferencingXAxis = - selectionRanges.otherSelections.length === 1 && - selectionRanges.otherSelections[0] === 'x-axis' - const isReferencingXAxisAngle = - isReferencingXAxis && angleOrLength === 'setAngle' + const isReferencingYAxis = + selectionRanges.otherSelections.length === 1 && + selectionRanges.otherSelections[0] === 'y-axis' + const isReferencingYAxisAngle = + isReferencingYAxis && angleOrLength === 'setAngle' - let forceVal = valueUsedInTransform || 0 - let calcIdentifier = createIdentifier('ZERO') - if (isReferencingYAxisAngle) { - calcIdentifier = createIdentifier( - forceVal < 0 ? 'THREE_QUARTER_TURN' : 'QUARTER_TURN' - ) - forceVal = normaliseAngle(forceVal + (forceVal < 0 ? 90 : -90)) - } else if (isReferencingXAxisAngle) { - calcIdentifier = createIdentifier( - Math.abs(forceVal) > 90 ? 'HALF_TURN' : 'ZERO' - ) - forceVal = - Math.abs(forceVal) > 90 ? normaliseAngle(forceVal - 180) : forceVal - } - const { valueNode, variableName, newVariableInsertIndex, sign } = - await getModalInfo({ - value: forceVal, - valueName: angleOrLength === 'setAngle' ? 'angle' : 'length', - shouldCreateVariable: true, - }) + const isReferencingXAxis = + selectionRanges.otherSelections.length === 1 && + selectionRanges.otherSelections[0] === 'x-axis' + const isReferencingXAxisAngle = + isReferencingXAxis && angleOrLength === 'setAngle' - let finalValue = removeDoubleNegatives( - valueNode as BinaryPart, - sign, - variableName + let forceVal = valueUsedInTransform || 0 + let calcIdentifier = createIdentifier('ZERO') + if (isReferencingYAxisAngle) { + calcIdentifier = createIdentifier( + forceVal < 0 ? 'THREE_QUARTER_TURN' : 'QUARTER_TURN' ) - if ( - isReferencingYAxisAngle || - (isReferencingXAxisAngle && calcIdentifier.name !== 'ZERO') - ) { - finalValue = createBinaryExpressionWithUnary([calcIdentifier, finalValue]) - } + forceVal = normaliseAngle(forceVal + (forceVal < 0 ? 90 : -90)) + } else if (isReferencingXAxisAngle) { + calcIdentifier = createIdentifier( + Math.abs(forceVal) > 90 ? 'HALF_TURN' : 'ZERO' + ) + forceVal = + Math.abs(forceVal) > 90 ? normaliseAngle(forceVal - 180) : forceVal + } + const { valueNode, variableName, newVariableInsertIndex, sign } = + await getModalInfo({ + value: forceVal, + valueName: angleOrLength === 'setAngle' ? 'angle' : 'length', + shouldCreateVariable: true, + }) - const { modifiedAst: _modifiedAst, pathToNodeMap } = - transformAstSketchLines({ - ast: JSON.parse(JSON.stringify(kclManager.ast)), - selectionRanges, - transformInfos: transforms, - programMemory: kclManager.programMemory, - referenceSegName: '', - forceValueUsedInTransform: finalValue, - }) - if (variableName) { - const newBody = [..._modifiedAst.body] - newBody.splice( - newVariableInsertIndex, - 0, - createVariableDeclaration(variableName, valueNode) - ) - _modifiedAst.body = newBody - Object.values(pathToNodeMap).forEach((pathToNode) => { - const index = pathToNode.findIndex((a) => a[0] === 'body') + 1 - pathToNode[index][0] = Number(pathToNode[index][0]) + 1 - }) - } - return { - modifiedAst: _modifiedAst, - pathToNodeMap, - } - } catch (e) { - console.log('error', e) - throw e + let finalValue = removeDoubleNegatives( + valueNode as BinaryPart, + sign, + variableName + ) + if ( + isReferencingYAxisAngle || + (isReferencingXAxisAngle && calcIdentifier.name !== 'ZERO') + ) { + finalValue = createBinaryExpressionWithUnary([calcIdentifier, finalValue]) + } + + const retval = transformAstSketchLines({ + ast: JSON.parse(JSON.stringify(kclManager.ast)), + selectionRanges, + transformInfos: transforms, + programMemory: kclManager.programMemory, + referenceSegName: '', + forceValueUsedInTransform: finalValue, + }) + if (err(retval)) return Promise.reject(retval) + + const { modifiedAst: _modifiedAst, pathToNodeMap } = retval + if (variableName) { + const newBody = [..._modifiedAst.body] + newBody.splice( + newVariableInsertIndex, + 0, + createVariableDeclaration(variableName, valueNode) + ) + _modifiedAst.body = newBody + Object.values(pathToNodeMap).forEach((pathToNode) => { + const index = pathToNode.findIndex((a) => a[0] === 'body') + 1 + pathToNode[index][0] = Number(pathToNode[index][0]) + 1 + }) + } + return { + modifiedAst: _modifiedAst, + pathToNodeMap, } } diff --git a/src/editor/plugins/lsp/client.ts b/src/editor/plugins/lsp/client.ts index fd82f82c1..54b4bbaf1 100644 --- a/src/editor/plugins/lsp/client.ts +++ b/src/editor/plugins/lsp/client.ts @@ -6,6 +6,7 @@ import { unregisterServerCapability, } from './server-capability-registration' import { Codec, FromServer, IntoServer } from './codec' +import { err } from 'lib/trap' const client_capabilities: LSP.ClientCapabilities = { textDocument: { @@ -119,10 +120,12 @@ export default class Client extends jsrpc.JSONRPCServerAndClient { // Register a server capability. params.registrations.forEach( (capabilityRegistration: LSP.Registration) => { - this.serverCapabilities = registerServerCapability( + const caps = registerServerCapability( this.serverCapabilities, capabilityRegistration ) + if (err(caps)) return (this.serverCapabilities = {}) + this.serverCapabilities = caps } ) }) @@ -132,10 +135,12 @@ export default class Client extends jsrpc.JSONRPCServerAndClient { // Unregister a server capability. params.unregisterations.forEach( (capabilityUnregistration: LSP.Unregistration) => { - this.serverCapabilities = unregisterServerCapability( + const caps = unregisterServerCapability( this.serverCapabilities, capabilityUnregistration ) + if (err(caps)) return (this.serverCapabilities = {}) + this.serverCapabilities = caps } ) }) diff --git a/src/editor/plugins/lsp/codec.ts b/src/editor/plugins/lsp/codec.ts index e30d6aac4..d13f369f5 100644 --- a/src/editor/plugins/lsp/codec.ts +++ b/src/editor/plugins/lsp/codec.ts @@ -67,7 +67,13 @@ export interface FromServer extends WritableStream { // eslint-disable-next-line @typescript-eslint/no-namespace export namespace FromServer { - export function create(): FromServer { - return new StreamDemuxer() + export function create(): FromServer | Error { + // Calls private method .start() which can throw. + // This is an odd one of the bunch but try/catch seems most suitable here. + try { + return new StreamDemuxer() + } catch (e: any) { + return e + } } } diff --git a/src/editor/plugins/lsp/codec/demuxer.ts b/src/editor/plugins/lsp/codec/demuxer.ts index d4fcbab0b..99a8ec0c5 100644 --- a/src/editor/plugins/lsp/codec/demuxer.ts +++ b/src/editor/plugins/lsp/codec/demuxer.ts @@ -38,7 +38,9 @@ export default class StreamDemuxer extends Queue { // try to parse the content-length from the headers const length = parseInt(match[1]) - if (isNaN(length)) throw new Error('invalid content length') + + if (isNaN(length)) + return Promise.reject(new Error('invalid content length')) // slice the headers since we now have the content length buffer = buffer.slice(match[0].length) diff --git a/src/editor/plugins/lsp/index.ts b/src/editor/plugins/lsp/index.ts index cf1050491..5d3ea372c 100644 --- a/src/editor/plugins/lsp/index.ts +++ b/src/editor/plugins/lsp/index.ts @@ -176,7 +176,7 @@ export class LanguageServerClient { }, }) - this.semanticTokens = deserializeTokens( + this.semanticTokens = await deserializeTokens( result.data, this.getServerCapabilities().semanticTokensProvider ) diff --git a/src/editor/plugins/lsp/kcl/semantic_tokens.ts b/src/editor/plugins/lsp/kcl/semantic_tokens.ts index 5749699eb..4fd0a1148 100644 --- a/src/editor/plugins/lsp/kcl/semantic_tokens.ts +++ b/src/editor/plugins/lsp/kcl/semantic_tokens.ts @@ -22,16 +22,16 @@ export class SemanticToken { } } -export function deserializeTokens( +export async function deserializeTokens( data: number[], semanticTokensProvider?: LSP.SemanticTokensOptions -): SemanticToken[] { +): Promise { if (!semanticTokensProvider) { return [] } // Check if data length is divisible by 5 if (data.length % 5 !== 0) { - throw new Error('Length is not divisible by 5') + return Promise.reject(new Error('Length is not divisible by 5')) } const tokens = [] diff --git a/src/editor/plugins/lsp/server-capability-registration.ts b/src/editor/plugins/lsp/server-capability-registration.ts index a31370c9e..74354cbe1 100644 --- a/src/editor/plugins/lsp/server-capability-registration.ts +++ b/src/editor/plugins/lsp/server-capability-registration.ts @@ -41,7 +41,7 @@ const ServerCapabilitiesProviders: IMethodServerCapabilityProviderDictionary = { function registerServerCapability( serverCapabilities: ServerCapabilities, registration: Registration -): ServerCapabilities { +): ServerCapabilities | Error { const serverCapabilitiesCopy = JSON.parse( JSON.stringify(serverCapabilities) ) as IFlexibleServerCapabilities @@ -58,7 +58,7 @@ function registerServerCapability( ) } } else { - throw new Error('Could not register server capability.') + return new Error('Could not register server capability.') } return serverCapabilitiesCopy diff --git a/src/editor/plugins/lsp/worker.ts b/src/editor/plugins/lsp/worker.ts index 10663d528..8f1360378 100644 --- a/src/editor/plugins/lsp/worker.ts +++ b/src/editor/plugins/lsp/worker.ts @@ -14,9 +14,10 @@ import { CopilotWorkerOptions, } from 'editor/plugins/lsp/types' import { EngineCommandManager } from 'lang/std/engineConnection' +import { err } from 'lib/trap' const intoServer: IntoServer = new IntoServer() -const fromServer: FromServer = FromServer.create() +const fromServer: FromServer | Error = FromServer.create() // Initialise the wasm module. const initialise = async (wasmUrl: string) => { @@ -56,6 +57,7 @@ export async function kclLspRun( } onmessage = function (event) { + if (err(fromServer)) return const { worker, eventType, eventData }: LspWorkerEvent = event.data switch (eventType) { @@ -111,6 +113,7 @@ onmessage = function (event) { } new Promise(async (resolve) => { + if (err(fromServer)) return for await (const requests of fromServer.requests) { const encoded = Codec.encode(requests as jsrpc.JSONRPCRequest) postMessage(encoded) @@ -118,6 +121,7 @@ new Promise(async (resolve) => { }) new Promise(async (resolve) => { + if (err(fromServer)) return for await (const notification of fromServer.notifications) { const encoded = Codec.encode(notification as jsrpc.JSONRPCRequest) postMessage(encoded) diff --git a/src/hooks/useRefreshSettings.ts b/src/hooks/useRefreshSettings.ts index 15353632e..edabf5376 100644 --- a/src/hooks/useRefreshSettings.ts +++ b/src/hooks/useRefreshSettings.ts @@ -15,6 +15,8 @@ export function useRefreshSettings(routeId: string = paths.INDEX) { const routeData = useRouteLoaderData(routeId) as typeof settings if (!ctx) { + // Intended to stop the world + // eslint-disable-next-line throw new Error( 'useRefreshSettings must be used within a SettingsAuthProvider' ) diff --git a/src/hooks/useToolbarGuards.ts b/src/hooks/useToolbarGuards.ts index c6cc2346e..ff31a5141 100644 --- a/src/hooks/useToolbarGuards.ts +++ b/src/hooks/useToolbarGuards.ts @@ -3,6 +3,7 @@ import { createSetVarNameModal, } from 'components/SetVarNameModal' import { editorManager, kclManager } from 'lib/singletons' +import { trap } from 'lib/trap' import { moveValueIntoNewVariable } from 'lang/modifyAst' import { isNodeSafeToReplace } from 'lang/queryAst' import { useEffect, useState } from 'react' @@ -22,10 +23,16 @@ export function useConvertToVariable(range?: SourceRange) { }, [enable]) useEffect(() => { - const { isSafe, value } = isNodeSafeToReplace( - parse(recast(ast)), + const parsed = parse(recast(ast)) + if (trap(parsed)) return + + const meta = isNodeSafeToReplace( + parsed, range || context.selectionRanges.codeBasedSelections?.[0]?.range || [] ) + if (trap(meta)) return + + const { isSafe, value } = meta const canReplace = isSafe && value.type !== 'Identifier' const isOnlyOneSelection = !!range || context.selectionRanges.codeBasedSelections.length === 1 diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index efc05dec3..685d96a6c 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -3,6 +3,7 @@ import { Selections } from 'lib/selections' import { KCLError, kclErrorsToDiagnostics } from './errors' import { uuidv4 } from 'lib/utils' import { EngineCommandManager } from './std/engineConnection' +import { err } from 'lib/trap' import { deferExecution } from 'lib/utils' import { @@ -161,18 +162,17 @@ export class KclManager { } safeParse(code: string): Program | null { - try { - const ast = parse(code) - this.kclErrors = [] - return ast - } catch (e) { - console.error('error parsing code', e) - if (e instanceof KCLError) { - this.kclErrors = [e] - if (e.msg === 'file is empty') this.engineCommandManager?.endSession() - } - return null - } + const ast = parse(code) + this.kclErrors = [] + if (!err(ast)) return ast + const kclerror: KCLError = ast as KCLError + + console.error('error parsing code', kclerror) + this.kclErrors = [kclerror] + // TODO: re-eval if session should end? + if (kclerror.msg === 'file is empty') + this.engineCommandManager?.endSession() + return null } async ensureWasmInit() { @@ -256,6 +256,10 @@ export class KclManager { await this.ensureWasmInit() const newCode = recast(ast) + if (err(newCode)) { + console.error(newCode) + return + } const newAst = this.safeParse(newCode) if (!newAst) return codeManager.updateCodeEditor(newCode) @@ -281,11 +285,13 @@ export class KclManager { Object.entries(this.engineCommandManager.artifactMap).forEach( ([commandId, artifact]) => { if (!artifact.pathToNode) return - const node = getNodeFromPath( + const _node1 = getNodeFromPath( this.ast, artifact.pathToNode, 'CallExpression' - ).node + ) + if (err(_node1)) return + const { node } = _node1 if (node.type !== 'CallExpression') return const [oldStart, oldEnd] = artifact.range if (oldStart === 0 && oldEnd === 0) return @@ -322,6 +328,10 @@ export class KclManager { return } const code = recast(ast) + if (err(code)) { + console.error(code) + return + } if (originalCode === code) return // Update the code state and the editor. @@ -339,19 +349,31 @@ export class KclManager { optionalParams?: { focusPath?: PathToNode } - ): Promise { + ): Promise<{ + newAst: Program + selections?: Selections + }> { const newCode = recast(ast) + if (err(newCode)) return Promise.reject(newCode) + const astWithUpdatedSource = this.safeParse(newCode) - if (!astWithUpdatedSource) return null - let returnVal: Selections | null = null + if (!astWithUpdatedSource) return Promise.reject(new Error('bad ast')) + let returnVal: Selections | undefined = undefined if (optionalParams?.focusPath) { - const { node } = getNodeFromPath( + const _node1 = getNodeFromPath( astWithUpdatedSource, optionalParams?.focusPath ) + if (err(_node1)) return Promise.reject(_node1) + const { node } = _node1 + const { start, end } = node - if (!start || !end) return null + if (!start || !end) + return { + selections: undefined, + newAst: astWithUpdatedSource, + } returnVal = { codeBasedSelections: [ { @@ -377,7 +399,8 @@ export class KclManager { // Execute ast mock will update the code state and editor. await this.executeAstMock(astWithUpdatedSource) } - return returnVal + + return { selections: returnVal, newAst: astWithUpdatedSource } } get defaultPlanes() { diff --git a/src/lang/abstractSyntaxTree.test.ts b/src/lang/abstractSyntaxTree.test.ts index d1186f0d9..d0cb1eead 100644 --- a/src/lang/abstractSyntaxTree.test.ts +++ b/src/lang/abstractSyntaxTree.test.ts @@ -1,5 +1,6 @@ import { KCLError } from './errors' import { initPromise, parse } from './wasm' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -8,6 +9,7 @@ beforeAll(async () => { describe('testing AST', () => { test('5 + 6', () => { const result = parse('5 +6') + if (err(result)) throw result delete (result as any).nonCodeMeta expect(result.body).toEqual([ { @@ -38,7 +40,9 @@ describe('testing AST', () => { ]) }) test('const myVar = 5', () => { - const { body } = parse('const myVar = 5') + const ast = parse('const myVar = 5') + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -72,7 +76,9 @@ describe('testing AST', () => { const code = `const myVar = 5 const newVar = myVar + 1 ` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -144,9 +150,11 @@ const newVar = myVar + 1 describe('testing function declaration', () => { test('fn funcN = (a, b) => {return a + b}', () => { - const { body } = parse( + const ast = parse( ['fn funcN = (a, b) => {', ' return a + b', '}'].join('\n') ) + if (err(ast)) throw ast + const { body } = ast delete (body[0] as any).declarations[0].init.body.nonCodeMeta expect(body).toEqual([ { @@ -229,7 +237,9 @@ describe('testing function declaration', () => { test('call expression assignment', () => { const code = `fn funcN = (a, b) => { return a + b } const myVar = funcN(1, 2)` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast delete (body[0] as any).declarations[0].init.body.nonCodeMeta expect(body).toEqual([ { @@ -366,7 +376,9 @@ describe('testing pipe operator special', () => { |> lineTo([1, 1], %) |> rx(45, %) ` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast delete (body[0] as any).declarations[0].init.nonCodeMeta expect(body).toEqual([ { @@ -566,7 +578,9 @@ describe('testing pipe operator special', () => { }) test('pipe operator with binary expression', () => { let code = `const myVar = 5 + 6 |> myFunc(45, %)` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast delete (body as any)[0].declarations[0].init.nonCodeMeta expect(body).toEqual([ { @@ -645,7 +659,9 @@ describe('testing pipe operator special', () => { }) test('array expression', () => { let code = `const yo = [1, '2', three, 4 + 5]` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -720,7 +736,9 @@ describe('testing pipe operator special', () => { 'const three = 3', "const yo = {aStr: 'str', anum: 2, identifier: three, binExp: 4 + 5}", ].join('\n') - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -864,7 +882,9 @@ describe('testing pipe operator special', () => { const code = `const yo = {key: { key2: 'value' }}` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -932,7 +952,9 @@ describe('testing pipe operator special', () => { }) test('object expression with array ast', () => { const code = `const yo = {key: [1, '2']}` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -996,7 +1018,9 @@ describe('testing pipe operator special', () => { }) test('object memberExpression simple', () => { const code = `const prop = yo.one.two` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -1051,7 +1075,9 @@ describe('testing pipe operator special', () => { }) test('object memberExpression with square braces', () => { const code = `const prop = yo.one["two"]` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -1107,7 +1133,9 @@ describe('testing pipe operator special', () => { }) test('object memberExpression with two square braces literal and identifier', () => { const code = `const prop = yo["one"][two]` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body).toEqual([ { type: 'VariableDeclaration', @@ -1166,7 +1194,9 @@ describe('testing pipe operator special', () => { describe('nests binary expressions correctly', () => { it('works with the simple case', () => { const code = `const yo = 1 + 2` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body[0]).toEqual({ type: 'VariableDeclaration', start: 0, @@ -1210,7 +1240,9 @@ describe('nests binary expressions correctly', () => { it('should nest according to precedence with multiply first', () => { // should be binExp { binExp { lit-1 * lit-2 } + lit} const code = `const yo = 1 * 2 + 3` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body[0]).toEqual({ type: 'VariableDeclaration', start: 0, @@ -1267,7 +1299,9 @@ describe('nests binary expressions correctly', () => { it('should nest according to precedence with sum first', () => { // should be binExp { lit-1 + binExp { lit-2 * lit-3 } } const code = `const yo = 1 + 2 * 3` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect(body[0]).toEqual({ type: 'VariableDeclaration', start: 0, @@ -1323,7 +1357,9 @@ describe('nests binary expressions correctly', () => { }) it('should nest properly with two operators of equal precedence', () => { const code = `const yo = 1 + 2 - 3` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect((body[0] as any).declarations[0].init).toEqual({ type: 'BinaryExpression', start: 11, @@ -1360,7 +1396,9 @@ describe('nests binary expressions correctly', () => { }) it('should nest properly with two operators of equal (but higher) precedence', () => { const code = `const yo = 1 * 2 / 3` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast expect((body[0] as any).declarations[0].init).toEqual({ type: 'BinaryExpression', start: 11, @@ -1397,7 +1435,9 @@ describe('nests binary expressions correctly', () => { }) it('should nest properly with longer example', () => { const code = `const yo = 1 + 2 * (3 - 4) / 5 + 6` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const init = (body[0] as any).declarations[0].init expect(init).toEqual({ type: 'BinaryExpression', @@ -1460,12 +1500,16 @@ const key = 'c'` value: 'this is a comment', }, } - const { nonCodeMeta } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { nonCodeMeta } = ast expect(nonCodeMeta.nonCodeNodes[0][0]).toEqual(nonCodeMetaInstance) // extra whitespace won't change it's position (0) or value (NB the start end would have changed though) const codeWithExtraStartWhitespace = '\n\n\n' + code - const { nonCodeMeta: nonCodeMeta2 } = parse(codeWithExtraStartWhitespace) + const ast2 = parse(codeWithExtraStartWhitespace) + if (err(ast2)) throw ast2 + const { nonCodeMeta: nonCodeMeta2 } = ast2 expect(nonCodeMeta2.nonCodeNodes[0][0].value).toStrictEqual( nonCodeMetaInstance.value ) @@ -1483,7 +1527,9 @@ const key = 'c'` |> close(%) ` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const indexOfSecondLineToExpression = 2 const sketchNonCodeMeta = (body as any)[0].declarations[0].init.nonCodeMeta .nonCodeNodes @@ -1508,7 +1554,9 @@ const key = 'c'` ' |> rx(90, %)', ].join('\n') - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const sketchNonCodeMeta = (body[0] as any).declarations[0].init.nonCodeMeta .nonCodeNodes[3][0] expect(sketchNonCodeMeta).toEqual({ @@ -1527,7 +1575,9 @@ const key = 'c'` describe('test UnaryExpression', () => { it('should parse a unary expression in simple var dec situation', () => { const code = `const myVar = -min(4, 100)` - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const myVarInit = (body?.[0] as any).declarations[0]?.init expect(myVarInit).toEqual({ type: 'UnaryExpression', @@ -1552,7 +1602,9 @@ describe('test UnaryExpression', () => { describe('testing nested call expressions', () => { it('callExp in a binExp in a callExp', () => { const code = 'const myVar = min(100, 1 + legLen(5, 3))' - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const myVarInit = (body?.[0] as any).declarations[0]?.init expect(myVarInit).toEqual({ type: 'CallExpression', @@ -1588,7 +1640,9 @@ describe('testing nested call expressions', () => { describe('should recognise callExpresions in binaryExpressions', () => { const code = "xLineTo(segEndX('seg02', %) + 1, %)" it('should recognise the callExp', () => { - const { body } = parse(code) + const ast = parse(code) + if (err(ast)) throw ast + const { body } = ast const callExpArgs = (body?.[0] as any).expression?.arguments expect(callExpArgs).toEqual([ { @@ -1623,16 +1677,12 @@ describe('should recognise callExpresions in binaryExpressions', () => { describe('parsing errors', () => { it('should return an error when there is a unexpected closed curly brace', async () => { const code = `const myVar = startSketchAt([}], %)` + const result = parse(code) - let _theError - try { - let _ = expect(parse(code)) - } catch (e) { - _theError = e - } - const theError = _theError as any - expect(theError).toEqual( - new KCLError('syntax', 'Unexpected token', [[27, 28]]) - ) + expect(result).toBeInstanceOf(KCLError) + const error = result as KCLError + expect(error.kind).toBe('syntax') + expect(error.msg).toBe('Unexpected token') + expect(error.sourceRanges).toEqual([[27, 28]]) }) }) diff --git a/src/lang/errors.test.ts b/src/lang/errors.test.ts index 65294d0a8..ec1bf7089 100644 --- a/src/lang/errors.test.ts +++ b/src/lang/errors.test.ts @@ -4,6 +4,8 @@ describe('test kclErrToDiagnostic', () => { it('converts KCL errors to CodeMirror diagnostics', () => { const errors: KCLError[] = [ { + name: '', + message: '', kind: 'semantic', msg: 'Semantic error', sourceRanges: [ @@ -12,6 +14,8 @@ describe('test kclErrToDiagnostic', () => { ], }, { + name: '', + message: '', kind: 'type', msg: 'Type error', sourceRanges: [ diff --git a/src/lang/errors.ts b/src/lang/errors.ts index ca41c8ddb..f91d0d576 100644 --- a/src/lang/errors.ts +++ b/src/lang/errors.ts @@ -5,7 +5,7 @@ import { Diagnostic as LspDiagnostic } from 'vscode-languageserver-protocol' import { Text } from '@codemirror/state' type ExtractKind = T extends { kind: infer K } ? K : never -export class KCLError { +export class KCLError extends Error { kind: ExtractKind | 'name' sourceRanges: [number, number][] msg: string @@ -14,6 +14,7 @@ export class KCLError { msg: string, sourceRanges: [number, number][] ) { + super() this.kind = kind this.msg = msg this.sourceRanges = sourceRanges diff --git a/src/lang/getNodePathFromSourceRange.test.ts b/src/lang/getNodePathFromSourceRange.test.ts index 44308078c..fd168f74c 100644 --- a/src/lang/getNodePathFromSourceRange.test.ts +++ b/src/lang/getNodePathFromSourceRange.test.ts @@ -1,5 +1,6 @@ import { getNodePathFromSourceRange, getNodeFromPath } from './queryAst' import { Identifier, parse, initPromise, Parameter } from './wasm' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -22,8 +23,11 @@ const sk3 = startSketchAt([0, 0]) ] const ast = parse(code) + if (err(ast)) throw ast const nodePath = getNodePathFromSourceRange(ast, sourceRange) - const { node } = getNodeFromPath(ast, nodePath) + const _node = getNodeFromPath(ast, nodePath) + if (err(_node)) throw _node + const { node } = _node expect([node.start, node.end]).toEqual(sourceRange) expect(node.type).toBe('CallExpression') @@ -47,8 +51,11 @@ const b1 = cube([0,0], 10)` ] const ast = parse(code) + if (err(ast)) throw ast const nodePath = getNodePathFromSourceRange(ast, sourceRange) - const node = getNodeFromPath(ast, nodePath).node + const _node = getNodeFromPath(ast, nodePath) + if (err(_node)) throw _node + const node = _node.node expect(nodePath).toEqual([ ['body', ''], @@ -81,8 +88,11 @@ const b1 = cube([0,0], 10)` ] const ast = parse(code) + if (err(ast)) throw ast const nodePath = getNodePathFromSourceRange(ast, sourceRange) - const node = getNodeFromPath(ast, nodePath).node + const _node = getNodeFromPath(ast, nodePath) + if (err(_node)) throw _node + const node = _node.node expect(nodePath).toEqual([ ['body', ''], [0, 'index'], diff --git a/src/lang/modifyAst.test.ts b/src/lang/modifyAst.test.ts index 5ae4811f1..1dde11eaa 100644 --- a/src/lang/modifyAst.test.ts +++ b/src/lang/modifyAst.test.ts @@ -18,6 +18,7 @@ import { } from './modifyAst' import { enginelessExecutor } from '../lib/testHelpers' import { findUsesOfTagInPipe, getNodePathFromSourceRange } from './queryAst' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -140,10 +141,14 @@ function giveSketchFnCallTagTestHelper( // this wrapper changes the input and output to code // making it more of an integration test, but easier to read the test intention is the goal const ast = parse(code) + if (err(ast)) throw ast const start = code.indexOf(searchStr) const range: [number, number] = [start, start + searchStr.length] - const { modifiedAst, tag, isTagExisting } = giveSketchFnCallTag(ast, range) + const sketchRes = giveSketchFnCallTag(ast, range) + if (err(sketchRes)) throw sketchRes + const { modifiedAst, tag, isTagExisting } = sketchRes const newCode = recast(modifiedAst) + if (err(newCode)) throw newCode return { tag, newCode, isTagExisting } } @@ -211,6 +216,7 @@ const part001 = startSketchOn('XY') const yo2 = hmm([identifierGuy + 5])` it('should move a binary expression into a new variable', async () => { const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const startIndex = code.indexOf('100 + 100') + 1 const { modifiedAst } = moveValueIntoNewVariable( @@ -225,6 +231,7 @@ const yo2 = hmm([identifierGuy + 5])` }) it('should move a value into a new variable', async () => { const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const startIndex = code.indexOf('2.8') + 1 const { modifiedAst } = moveValueIntoNewVariable( @@ -239,6 +246,7 @@ const yo2 = hmm([identifierGuy + 5])` }) it('should move a callExpression into a new variable', async () => { const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const startIndex = code.indexOf('def(') const { modifiedAst } = moveValueIntoNewVariable( @@ -253,6 +261,7 @@ const yo2 = hmm([identifierGuy + 5])` }) it('should move a binary expression with call expression into a new variable', async () => { const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const startIndex = code.indexOf('jkl(') + 1 const { modifiedAst } = moveValueIntoNewVariable( @@ -267,6 +276,7 @@ const yo2 = hmm([identifierGuy + 5])` }) it('should move a identifier into a new variable', async () => { const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const startIndex = code.indexOf('identifierGuy +') + 1 const { modifiedAst } = moveValueIntoNewVariable( @@ -290,6 +300,8 @@ describe('testing sketchOnExtrudedFace', () => { |> close(%) |> extrude(5 + 7, %)` const ast = parse(code) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const segmentSnippet = `line([9.7, 9.19], %)` const segmentRange: [number, number] = [ @@ -304,12 +316,15 @@ describe('testing sketchOnExtrudedFace', () => { ] const extrudePathToNode = getNodePathFromSourceRange(ast, extrudeRange) - const { modifiedAst } = sketchOnExtrudedFace( + const extruded = sketchOnExtrudedFace( ast, segmentPathToNode, extrudePathToNode, programMemory ) + if (err(extruded)) throw extruded + const { modifiedAst } = extruded + const newCode = recast(modifiedAst) expect(newCode).toContain(`const part001 = startSketchOn('-XZ') |> startProfileAt([3.58, 2.06], %) @@ -327,6 +342,7 @@ const sketch001 = startSketchOn(part001, 'seg01')`) |> close(%) |> extrude(5 + 7, %)` const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const segmentSnippet = `close(%)` const segmentRange: [number, number] = [ @@ -341,12 +357,15 @@ const sketch001 = startSketchOn(part001, 'seg01')`) ] const extrudePathToNode = getNodePathFromSourceRange(ast, extrudeRange) - const { modifiedAst } = sketchOnExtrudedFace( + const extruded = sketchOnExtrudedFace( ast, segmentPathToNode, extrudePathToNode, programMemory ) + if (err(extruded)) throw extruded + const { modifiedAst } = extruded + const newCode = recast(modifiedAst) expect(newCode).toContain(`const part001 = startSketchOn('-XZ') |> startProfileAt([3.58, 2.06], %) @@ -364,6 +383,7 @@ const sketch001 = startSketchOn(part001, 'seg01')`) |> close(%) |> extrude(5 + 7, %)` const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const sketchSnippet = `startProfileAt([3.58, 2.06], %)` const sketchRange: [number, number] = [ @@ -378,13 +398,16 @@ const sketch001 = startSketchOn(part001, 'seg01')`) ] const extrudePathToNode = getNodePathFromSourceRange(ast, extrudeRange) - const { modifiedAst } = sketchOnExtrudedFace( + const extruded = sketchOnExtrudedFace( ast, sketchPathToNode, extrudePathToNode, programMemory, 'end' ) + if (err(extruded)) throw extruded + const { modifiedAst } = extruded + const newCode = recast(modifiedAst) expect(newCode).toContain(`const part001 = startSketchOn('-XZ') |> startProfileAt([3.58, 2.06], %) @@ -410,6 +433,7 @@ const sketch001 = startSketchOn(part001, 'END')`) |> close(%) const part001 = extrude(5 + 7, sketch001)` const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const segmentSnippet = `line([4.99, -0.46], %)` const segmentRange: [number, number] = [ @@ -424,13 +448,14 @@ const sketch001 = startSketchOn(part001, 'END')`) ] const extrudePathToNode = getNodePathFromSourceRange(ast, extrudeRange) - const { modifiedAst } = sketchOnExtrudedFace( + const updatedAst = sketchOnExtrudedFace( ast, segmentPathToNode, extrudePathToNode, programMemory ) - const newCode = recast(modifiedAst) + if (err(updatedAst)) throw updatedAst + const newCode = recast(updatedAst.modifiedAst) expect(newCode).toContain(`const part001 = extrude(5 + 7, sketch001) const sketch002 = startSketchOn(part001, 'seg01')`) }) @@ -444,6 +469,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { |> line([306.21, 198.85], %, 'a') |> line([306.21, 198.87], %)` const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const lineOfInterest = "line([306.21, 198.85], %, 'a')" const range: [number, number] = [ @@ -458,6 +484,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { code, pathToNode ) + if (err(modifiedAst)) throw modifiedAst const newCode = recast(modifiedAst) expect(newCode).toBe(`const part001 = startSketchOn('-XZ') |> startProfileAt([54.78, -95.91], %) @@ -520,6 +547,7 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${ ])(`%s`, async (_, line, [replace1, replace2]) => { const code = makeCode(line) const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const lineOfInterest = line const range: [number, number] = [ @@ -535,6 +563,7 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine([-65, ${ code, pathToNode ) + if (err(modifiedAst)) throw modifiedAst const newCode = recast(modifiedAst) expect(newCode).toBe(makeCode(line, replace1, replace2)) }) @@ -606,6 +635,8 @@ describe('Testing removeSingleConstraintInfo', () => { ['tangentialArcTo([3.14 + 0, 13.14], %)', 'arrayIndex', 1], ])('stdlib fn: %s', async (expectedFinish, key, value) => { const ast = parse(code) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const lineOfInterest = expectedFinish.split('(')[0] + '(' const range: [number, number] = [ @@ -621,7 +652,7 @@ describe('Testing removeSingleConstraintInfo', () => { ast, programMemory ) - if (!mod) throw new Error('yo is undefined') + if (!mod) return new Error('mod is undefined') const recastCode = recast(mod.modifiedAst) expect(recastCode).toContain(expectedFinish) }) @@ -642,6 +673,8 @@ describe('Testing removeSingleConstraintInfo', () => { ['angledLineToY([30, 10.14 + 0], %)', 'arrayIndex', 0], ])('stdlib fn: %s', async (expectedFinish, key, value) => { const ast = parse(code) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const lineOfInterest = expectedFinish.split('(')[0] + '(' const range: [number, number] = [ @@ -657,7 +690,7 @@ describe('Testing removeSingleConstraintInfo', () => { ast, programMemory ) - if (!mod) throw new Error('yo is undefined') + if (!mod) return new Error('mod is undefined') const recastCode = recast(mod.modifiedAst) expect(recastCode).toContain(expectedFinish) }) diff --git a/src/lang/modifyAst.ts b/src/lang/modifyAst.ts index 10be1300f..d949f27dd 100644 --- a/src/lang/modifyAst.ts +++ b/src/lang/modifyAst.ts @@ -1,4 +1,5 @@ import { Selection } from 'lib/selections' +import { err, trap } from 'lib/trap' import { Program, CallExpression, @@ -73,14 +74,16 @@ export function addStartProfileAt( node: Program, pathToNode: PathToNode, at: [number, number] -): { modifiedAst: Program; pathToNode: PathToNode } { - const variableDeclaration = getNodeFromPath( +): { modifiedAst: Program; pathToNode: PathToNode } | Error { + const _node1 = getNodeFromPath( node, pathToNode, 'VariableDeclaration' - ).node + ) + if (err(_node1)) return _node1 + const variableDeclaration = _node1.node if (variableDeclaration.type !== 'VariableDeclaration') { - throw new Error('variableDeclaration.init.type !== PipeExpression') + return new Error('variableDeclaration.init.type !== PipeExpression') } const _node = { ...node } const init = variableDeclaration.declarations[0].init @@ -247,24 +250,36 @@ export function extrudeSketch( pathToNode: PathToNode, shouldPipe = false, distance = createLiteral(4) as Value -): { - modifiedAst: Program - pathToNode: PathToNode - pathToExtrudeArg: PathToNode -} { +): + | { + modifiedAst: Program + pathToNode: PathToNode + pathToExtrudeArg: PathToNode + } + | Error { const _node = { ...node } - const { node: sketchExpression } = getNodeFromPath(_node, pathToNode) + const _node1 = getNodeFromPath(_node, pathToNode) + if (err(_node1)) return _node1 + const { node: sketchExpression } = _node1 // determine if sketchExpression is in a pipeExpression or not - const { node: pipeExpression } = getNodeFromPath( + const _node2 = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) + if (err(_node2)) return _node2 + const { node: pipeExpression } = _node2 + const isInPipeExpression = pipeExpression.type === 'PipeExpression' - const { node: variableDeclarator, shallowPath: pathToDecleration } = - getNodeFromPath(_node, pathToNode, 'VariableDeclarator') + const _node3 = getNodeFromPath( + _node, + pathToNode, + 'VariableDeclarator' + ) + if (err(_node3)) return _node3 + const { node: variableDeclarator, shallowPath: pathToDecleration } = _node3 const extrudeCall = createCallExpressionStdLib('extrude', [ distance, @@ -331,34 +346,42 @@ export function sketchOnExtrudedFace( extrudePathToNode: PathToNode, programMemory: ProgramMemory, cap: 'none' | 'start' | 'end' = 'none' -): { modifiedAst: Program; pathToNode: PathToNode } { +): { modifiedAst: Program; pathToNode: PathToNode } | Error { let _node = { ...node } const newSketchName = findUniqueName( node, KCL_DEFAULT_CONSTANT_PREFIXES.SKETCH ) - const { node: oldSketchNode } = getNodeFromPath( + const _node1 = getNodeFromPath( _node, sketchPathToNode, 'VariableDeclarator', true ) + if (err(_node1)) return _node1 + const { node: oldSketchNode } = _node1 + const oldSketchName = oldSketchNode.id.name - const { node: expression } = getNodeFromPath( + const _node2 = getNodeFromPath( _node, sketchPathToNode, 'CallExpression' ) - const { node: extrudeVarDec } = getNodeFromPath( + if (err(_node2)) return _node2 + const { node: expression } = _node2 + + const _node3 = getNodeFromPath( _node, extrudePathToNode, 'VariableDeclarator' ) + if (err(_node3)) return _node3 + const { node: extrudeVarDec } = _node3 const extrudeName = extrudeVarDec.id?.name let _tag = '' if (cap === 'none') { - const { modifiedAst, tag } = addTagForSketchOnFace( + const __tag = addTagForSketchOnFace( { previousProgramMemory: programMemory, pathToNode: sketchPathToNode, @@ -366,6 +389,8 @@ export function sketchOnExtrudedFace( }, expression.callee.name ) + if (err(__tag)) return __tag + const { modifiedAst, tag } = __tag _tag = tag _node = modifiedAst } else { @@ -616,18 +641,19 @@ export function giveSketchFnCallTag( ast: Program, range: Selection['range'], tag?: string -): { - modifiedAst: Program - tag: string - isTagExisting: boolean - pathToNode: PathToNode -} { +): + | { + modifiedAst: Program + tag: string + isTagExisting: boolean + pathToNode: PathToNode + } + | Error { const path = getNodePathFromSourceRange(ast, range) - const { node: primaryCallExp } = getNodeFromPath( - ast, - path, - 'CallExpression' - ) + const _node1 = getNodeFromPath(ast, path, 'CallExpression') + if (err(_node1)) return _node1 + const { node: primaryCallExp } = _node1 + // Tag is always 3rd expression now, using arg index feels brittle // but we can come up with a better way to identify tag later. const thirdArg = primaryCallExp.arguments?.[2] @@ -646,7 +672,7 @@ export function giveSketchFnCallTag( pathToNode: path, } } else { - throw new Error('Unable to assign tag without value') + return new Error('Unable to assign tag without value') } } @@ -659,7 +685,10 @@ export function moveValueIntoNewVariablePath( modifiedAst: Program pathToReplacedNode?: PathToNode } { - const { isSafe, value, replacer } = isNodeSafeToReplacePath(ast, pathToNode) + const meta = isNodeSafeToReplacePath(ast, pathToNode) + if (trap(meta)) return { modifiedAst: ast } + const { isSafe, value, replacer } = meta + if (!isSafe || value.type === 'Identifier') return { modifiedAst: ast } const { insertIndex } = findAllPreviousVariablesPath( @@ -669,6 +698,8 @@ export function moveValueIntoNewVariablePath( ) let _node = JSON.parse(JSON.stringify(ast)) const boop = replacer(_node, variableName) + if (trap(boop)) return { modifiedAst: ast } + _node = boop.modifiedAst _node.body.splice( insertIndex, @@ -687,7 +718,9 @@ export function moveValueIntoNewVariable( modifiedAst: Program pathToReplacedNode?: PathToNode } { - const { isSafe, value, replacer } = isNodeSafeToReplace(ast, sourceRange) + const meta = isNodeSafeToReplace(ast, sourceRange) + if (trap(meta)) return { modifiedAst: ast } + const { isSafe, value, replacer } = meta if (!isSafe || value.type === 'Identifier') return { modifiedAst: ast } const { insertIndex } = findAllPreviousVariables( @@ -696,7 +729,10 @@ export function moveValueIntoNewVariable( sourceRange ) let _node = JSON.parse(JSON.stringify(ast)) - const { modifiedAst, pathToReplaced } = replacer(_node, variableName) + const replaced = replacer(_node, variableName) + if (trap(replaced)) return { modifiedAst: ast } + + const { modifiedAst, pathToReplaced } = replaced _node = modifiedAst _node.body.splice( insertIndex, @@ -716,7 +752,7 @@ export function deleteSegmentFromPipeExpression( programMemory: ProgramMemory, code: string, pathToNode: PathToNode -): Program { +): Program | Error { let _modifiedAst: Program = JSON.parse(JSON.stringify(modifiedAst)) dependentRanges.forEach((range) => { @@ -728,10 +764,13 @@ export function deleteSegmentFromPipeExpression( 'CallExpression', true ) + if (err(callExp)) return callExp + const constraintInfo = getConstraintInfo(callExp.node, code, path).find( ({ sourceRange }) => isOverlap(sourceRange, range) ) if (!constraintInfo) return + const input = makeRemoveSingleConstraintInput( constraintInfo.argPosition, callExp.shallowPath @@ -752,13 +791,17 @@ export function deleteSegmentFromPipeExpression( _modifiedAst, pathToNode, 'PipeExpression' - ).node + ) + if (err(pipeExpression)) return pipeExpression const pipeInPathIndex = pathToNode.findIndex( ([_, desc]) => desc === 'PipeExpression' ) - const segmentIndexInPipe = pathToNode[pipeInPathIndex + 1][0] as number - pipeExpression.body.splice(segmentIndexInPipe, 1) + const segmentIndexInPipe = pathToNode[pipeInPathIndex + 1] + pipeExpression.node.body.splice(segmentIndexInPipe[0] as number, 1) + + // Move up to the next segment. + segmentIndexInPipe[0] = Math.max((segmentIndexInPipe[0] as number) - 1, 0) return _modifiedAst } @@ -809,11 +852,13 @@ export function removeSingleConstraintInfo( ast, }) if (!transform) return false - return transformAstSketchLines({ + const retval = transformAstSketchLines({ ast, selectionRanges: [pathToCallExp], transformInfos: [transform], programMemory, referenceSegName: '', }) + if (err(retval)) return false + return retval } diff --git a/src/lang/queryAst.test.ts b/src/lang/queryAst.test.ts index e613e01d0..c977f3e80 100644 --- a/src/lang/queryAst.test.ts +++ b/src/lang/queryAst.test.ts @@ -17,6 +17,7 @@ import { createLiteral, createPipeSubstitution, } from './modifyAst' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -42,6 +43,7 @@ const variableBelowShouldNotBeIncluded = 3 ` const rangeStart = code.indexOf('// selection-range-7ish-before-this') - 7 const ast = parse(code) + if (err(ast)) throw ast const programMemory = await enginelessExecutor(ast) const { variables, bodyPath, insertIndex } = findAllPreviousVariables( @@ -76,53 +78,65 @@ const yo = 5 + 6 const yo2 = hmm([identifierGuy + 5])` it('find a safe binaryExpression', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('100 + 100') + 2 const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('BinaryExpression') expect(code.slice(result.value.start, result.value.end)).toBe('100 + 100') - const { modifiedAst } = result.replacer( + const replaced = result.replacer( JSON.parse(JSON.stringify(ast)), 'replaceName' ) - const outCode = recast(modifiedAst) + if (err(replaced)) throw replaced + const outCode = recast(replaced.modifiedAst) expect(outCode).toContain(`angledLine([replaceName, 3.09], %)`) }) it('find a safe Identifier', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('abc') const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('Identifier') expect(code.slice(result.value.start, result.value.end)).toBe('abc') }) it('find a safe CallExpression', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('def') const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('CallExpression') expect(code.slice(result.value.start, result.value.end)).toBe("def('yo')") - const { modifiedAst } = result.replacer( + const replaced = result.replacer( JSON.parse(JSON.stringify(ast)), 'replaceName' ) - const outCode = recast(modifiedAst) + if (err(replaced)) throw replaced + const outCode = recast(replaced.modifiedAst) expect(outCode).toContain(`angledLine([replaceName, 3.09], %)`) }) it('find an UNsafe CallExpression, as it has a PipeSubstitution', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('ghi') const range: [number, number] = [rangeStart, rangeStart] const result = isNodeSafeToReplace(ast, range) + if (err(result)) throw result expect(result.isSafe).toBe(false) expect(result.value?.type).toBe('CallExpression') expect(code.slice(result.value.start, result.value.end)).toBe('ghi(%)') }) it('find an UNsafe Identifier, as it is a callee', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('ine([2.8,') const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(false) expect(result.value?.type).toBe('CallExpression') expect(code.slice(result.value.start, result.value.end)).toBe( @@ -131,47 +145,60 @@ const yo2 = hmm([identifierGuy + 5])` }) it("find a safe BinaryExpression that's assigned to a variable", () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('5 + 6') + 1 const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('BinaryExpression') expect(code.slice(result.value.start, result.value.end)).toBe('5 + 6') - const { modifiedAst } = result.replacer( + const replaced = result.replacer( JSON.parse(JSON.stringify(ast)), 'replaceName' ) - const outCode = recast(modifiedAst) + if (err(replaced)) throw replaced + const outCode = recast(replaced.modifiedAst) expect(outCode).toContain(`const yo = replaceName`) }) it('find a safe BinaryExpression that has a CallExpression within', () => { const ast = parse(code) + if (err(ast)) throw ast const rangeStart = code.indexOf('jkl') + 1 const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('BinaryExpression') expect(code.slice(result.value.start, result.value.end)).toBe( "jkl('yo') + 2" ) - const { modifiedAst } = result.replacer( + const replaced = result.replacer( JSON.parse(JSON.stringify(ast)), 'replaceName' ) + if (err(replaced)) throw replaced + const { modifiedAst } = replaced const outCode = recast(modifiedAst) expect(outCode).toContain(`angledLine([replaceName, 3.09], %)`) }) it('find a safe BinaryExpression within a CallExpression', () => { const ast = parse(code) + if (err(ast)) throw ast + const rangeStart = code.indexOf('identifierGuy') + 1 const result = isNodeSafeToReplace(ast, [rangeStart, rangeStart]) + if (err(result)) throw result + expect(result.isSafe).toBe(true) expect(result.value?.type).toBe('BinaryExpression') expect(code.slice(result.value.start, result.value.end)).toBe( 'identifierGuy + 5' ) - const { modifiedAst } = result.replacer( + const replaced = result.replacer( JSON.parse(JSON.stringify(ast)), 'replaceName' ) + if (err(replaced)) throw replaced + const { modifiedAst } = replaced const outCode = recast(modifiedAst) expect(outCode).toContain(`const yo2 = hmm([replaceName])`) }) @@ -209,6 +236,8 @@ describe('testing getNodePathFromSourceRange', () => { const searchLn = `line([0.94, 2.61], %)` const sourceIndex = code.indexOf(searchLn) + searchLn.length const ast = parse(code) + if (err(ast)) throw ast + const result = getNodePathFromSourceRange(ast, [sourceIndex, sourceIndex]) expect(result).toEqual([ ['body', ''], @@ -224,6 +253,8 @@ describe('testing getNodePathFromSourceRange', () => { const searchLn = `line([-0.21, -1.4], %)` const sourceIndex = code.indexOf(searchLn) + searchLn.length const ast = parse(code) + if (err(ast)) throw ast + const result = getNodePathFromSourceRange(ast, [sourceIndex, sourceIndex]) const expected = [ ['body', ''], @@ -262,6 +293,8 @@ const part001 = startSketchAt([-1.41, 3.46]) |> close(%) ` const ast = parse(exampleCode) + if (err(ast)) throw ast + const result = doesPipeHaveCallExp({ calleeName: 'close', ast, @@ -280,6 +313,8 @@ const part001 = startSketchAt([-1.41, 3.46]) |> extrude(1, %) ` const ast = parse(exampleCode) + if (err(ast)) throw ast + const result = doesPipeHaveCallExp({ calleeName: 'extrude', ast, @@ -296,6 +331,8 @@ const part001 = startSketchAt([-1.41, 3.46]) |> angledLine([-175, segLen('seg01', %)], %) ` const ast = parse(exampleCode) + if (err(ast)) throw ast + const result = doesPipeHaveCallExp({ calleeName: 'close', ast, @@ -306,6 +343,8 @@ const part001 = startSketchAt([-1.41, 3.46]) it('returns false if not a pipe', () => { const exampleCode = `const length001 = 2` const ast = parse(exampleCode) + if (err(ast)) throw ast + const result = doesPipeHaveCallExp({ calleeName: 'close', ast, @@ -324,6 +363,8 @@ const part001 = startSketchAt([-1.41, 3.46]) |> line([-3.22, -7.36], %) |> angledLine([-175, segLen('seg01', %)], %)` const ast = parse(exampleCode) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const result = hasExtrudeSketchGroup({ ast, @@ -341,6 +382,8 @@ const part001 = startSketchAt([-1.41, 3.46]) |> angledLine([-175, segLen('seg01', %)], %) |> extrude(1, %)` const ast = parse(exampleCode) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const result = hasExtrudeSketchGroup({ ast, @@ -352,6 +395,8 @@ const part001 = startSketchAt([-1.41, 3.46]) it('finds nothing', async () => { const exampleCode = `const length001 = 2` const ast = parse(exampleCode) + if (err(ast)) throw ast + const programMemory = await enginelessExecutor(ast) const result = hasExtrudeSketchGroup({ ast, @@ -372,6 +417,8 @@ describe('Testing findUsesOfTagInPipe', () => { |> angledLine([65, segLen('seg01', %)], %)` it('finds the current segment', async () => { const ast = parse(exampleCode) + if (err(ast)) throw ast + const lineOfInterest = `198.85], %, 'seg01'` const characterIndex = exampleCode.indexOf(lineOfInterest) + lineOfInterest.length @@ -387,6 +434,8 @@ describe('Testing findUsesOfTagInPipe', () => { }) it('find no tag if line has no tag', () => { const ast = parse(exampleCode) + if (err(ast)) throw ast + const lineOfInterest = `line([306.21, 198.82], %)` const characterIndex = exampleCode.indexOf(lineOfInterest) + lineOfInterest.length @@ -423,6 +472,7 @@ const sketch002 = startSketchOn(extrude001, 'seg01') ` it('finds sketch001 pipe to be extruded', async () => { const ast = parse(exampleCode) + if (err(ast)) throw ast const lineOfInterest = `line([4.99, -0.46], %, 'seg01')` const characterIndex = exampleCode.indexOf(lineOfInterest) + lineOfInterest.length @@ -437,6 +487,7 @@ const sketch002 = startSketchOn(extrude001, 'seg01') }) it('find sketch002 NOT pipe to be extruded', async () => { const ast = parse(exampleCode) + if (err(ast)) throw ast const lineOfInterest = `line([2.45, -0.2], %)` const characterIndex = exampleCode.indexOf(lineOfInterest) + lineOfInterest.length @@ -468,6 +519,7 @@ const sketch002 = startSketchOn(extrude001, 'seg01') |> close(%) ` const ast = parse(exampleCode) + if (err(ast)) throw ast const extrudable = hasExtrudableGeometry(ast) expect(extrudable).toBeTruthy() }) @@ -481,6 +533,7 @@ const sketch002 = startSketchOn(extrude001, 'seg01') const extrude001 = extrude(10, sketch001) ` const ast = parse(exampleCode) + if (err(ast)) throw ast const extrudable = hasExtrudableGeometry(ast) expect(extrudable).toBeFalsy() }) diff --git a/src/lang/queryAst.ts b/src/lang/queryAst.ts index 59292ae72..4ee57ed30 100644 --- a/src/lang/queryAst.ts +++ b/src/lang/queryAst.ts @@ -25,6 +25,7 @@ import { getConstraintLevelFromSourceRange, getConstraintType, } from './std/sketchcombos' +import { err } from 'lib/trap' /** * Retrieves a node from a given path within a Program node structure, optionally stopping at a specified node type. @@ -38,49 +39,41 @@ export function getNodeFromPath( path: PathToNode, stopAt?: SyntaxType | SyntaxType[], returnEarly = false -): { - node: T - shallowPath: PathToNode - deepPath: PathToNode -} { +): + | { + node: T + shallowPath: PathToNode + deepPath: PathToNode + } + | Error { let currentNode = node as any let stopAtNode = null let successfulPaths: PathToNode = [] let pathsExplored: PathToNode = [] for (const pathItem of path) { - try { - if (typeof currentNode[pathItem[0]] !== 'object') - throw new Error('not an object') - currentNode = currentNode?.[pathItem[0]] - successfulPaths.push(pathItem) - if (!stopAtNode) { - pathsExplored.push(pathItem) - } - if ( - typeof stopAt !== 'undefined' && - (Array.isArray(stopAt) - ? stopAt.includes(currentNode.type) - : currentNode.type === stopAt) - ) { - // it will match the deepest node of the type - // instead of returning at the first match - stopAtNode = currentNode - if (returnEarly) { - return { - node: stopAtNode, - shallowPath: pathsExplored, - deepPath: successfulPaths, - } + if (typeof currentNode[pathItem[0]] !== 'object') + return new Error('not an object') + currentNode = currentNode?.[pathItem[0]] + successfulPaths.push(pathItem) + if (!stopAtNode) { + pathsExplored.push(pathItem) + } + if ( + typeof stopAt !== 'undefined' && + (Array.isArray(stopAt) + ? stopAt.includes(currentNode.type) + : currentNode.type === stopAt) + ) { + // it will match the deepest node of the type + // instead of returning at the first match + stopAtNode = currentNode + if (returnEarly) { + return { + node: stopAtNode, + shallowPath: pathsExplored, + deepPath: successfulPaths, } } - } catch (e) { - // console.error( - // `Could not find path ${pathItem} in node ${JSON.stringify( - // currentNode, - // null, - // 2 - // )}, successful path was ${successfulPaths}` - // ) } } return { @@ -99,17 +92,16 @@ export function getNodeFromPathCurry( ): ( stopAt?: SyntaxType | SyntaxType[], returnEarly?: boolean -) => { - node: T - path: PathToNode -} { +) => + | { + node: T + path: PathToNode + } + | Error { return (stopAt?: SyntaxType | SyntaxType[], returnEarly = false) => { - const { node: _node, shallowPath } = getNodeFromPath( - node, - path, - stopAt, - returnEarly - ) + const _node1 = getNodeFromPath(node, path, stopAt, returnEarly) + if (err(_node1)) return _node1 + const { node: _node, shallowPath } = _node1 return { node: _node, path: shallowPath, @@ -374,17 +366,31 @@ export function findAllPreviousVariablesPath( bodyPath: PathToNode insertIndex: number } { - const { shallowPath: pathToDec, node } = getNodeFromPath( - ast, - path, - 'VariableDeclaration' - ) + const _node1 = getNodeFromPath(ast, path, 'VariableDeclaration') + if (err(_node1)) { + console.error(_node1) + return { + variables: [], + bodyPath: [], + insertIndex: 0, + } + } + const { shallowPath: pathToDec, node } = _node1 const startRange = (node as any).start const { index: insertIndex, path: bodyPath } = splitPathAtLastIndex(pathToDec) - const { node: bodyItems } = getNodeFromPath(ast, bodyPath) + const _node2 = getNodeFromPath(ast, bodyPath) + if (err(_node2)) { + console.error(_node2) + return { + variables: [], + bodyPath: [], + insertIndex: 0, + } + } + const { node: bodyItems } = _node2 const variables: PrevVariable[] = [] bodyItems?.forEach?.((item) => { @@ -422,16 +428,18 @@ export function findAllPreviousVariables( type ReplacerFn = ( _ast: Program, varName: string -) => { modifiedAst: Program; pathToReplaced: PathToNode } +) => { modifiedAst: Program; pathToReplaced: PathToNode } | Error export function isNodeSafeToReplacePath( ast: Program, path: PathToNode -): { - isSafe: boolean - value: Value - replacer: ReplacerFn -} { +): + | { + isSafe: boolean + value: Value + replacer: ReplacerFn + } + | Error { if (path[path.length - 1][0] === 'callee') { path = path.slice(0, -1) } @@ -442,16 +450,14 @@ export function isNodeSafeToReplacePath( 'Literal', 'UnaryExpression', ] - const { node: value, deepPath: outPath } = getNodeFromPath( - ast, - path, - acceptedNodeTypes - ) - const { node: binValue, shallowPath: outBinPath } = getNodeFromPath( - ast, - path, - 'BinaryExpression' - ) + const _node1 = getNodeFromPath(ast, path, acceptedNodeTypes) + if (err(_node1)) return _node1 + const { node: value, deepPath: outPath } = _node1 + + const _node2 = getNodeFromPath(ast, path, 'BinaryExpression') + if (err(_node2)) return _node2 + const { node: binValue, shallowPath: outBinPath } = _node2 + // binaryExpression should take precedence const [finVal, finPath] = (binValue as Value)?.type === 'BinaryExpression' @@ -464,7 +470,9 @@ export function isNodeSafeToReplacePath( const pathToReplaced = JSON.parse(JSON.stringify(finPath)) pathToReplaced[1][0] = pathToReplaced[1][0] + 1 const startPath = finPath.slice(0, -1) - const nodeToReplace = getNodeFromPath(_ast, startPath).node as any + const _nodeToReplace = getNodeFromPath(_ast, startPath) + if (err(_nodeToReplace)) return _nodeToReplace + const nodeToReplace = _nodeToReplace.node as any nodeToReplace[last[0]] = identifier return { modifiedAst: _ast, pathToReplaced } } @@ -485,11 +493,13 @@ export function isNodeSafeToReplacePath( export function isNodeSafeToReplace( ast: Program, sourceRange: [number, number] -): { - isSafe: boolean - value: Value - replacer: ReplacerFn -} { +): + | { + isSafe: boolean + value: Value + replacer: ReplacerFn + } + | Error { let path = getNodePathFromSourceRange(ast, sourceRange) return isNodeSafeToReplacePath(ast, path) } @@ -546,28 +556,38 @@ export function isLinesParallelAndConstrained( programMemory: ProgramMemory, primaryLine: Selection, secondaryLine: Selection -): { - isParallelAndConstrained: boolean - sourceRange: SourceRange -} { +): + | { + isParallelAndConstrained: boolean + sourceRange: SourceRange + } + | Error { try { const EPSILON = 0.005 const primaryPath = getNodePathFromSourceRange(ast, primaryLine.range) const secondaryPath = getNodePathFromSourceRange(ast, secondaryLine.range) - const secondaryNode = getNodeFromPath( + const _secondaryNode = getNodeFromPath( ast, secondaryPath, 'CallExpression' - ).node - const varDec = getNodeFromPath(ast, primaryPath, 'VariableDeclaration').node + ) + if (err(_secondaryNode)) return _secondaryNode + const secondaryNode = _secondaryNode.node + const _varDec = getNodeFromPath(ast, primaryPath, 'VariableDeclaration') + if (err(_varDec)) return _varDec + const varDec = _varDec.node const varName = (varDec as VariableDeclaration)?.declarations[0]?.id?.name const path = programMemory?.root[varName] as SketchGroup - const primarySegment = getSketchSegmentFromSourceRange( + const _primarySegment = getSketchSegmentFromSourceRange( path, primaryLine.range - ).segment - const { segment: secondarySegment, index: secondaryIndex } = - getSketchSegmentFromSourceRange(path, secondaryLine.range) + ) + if (err(_primarySegment)) return _primarySegment + const primarySegment = _primarySegment.segment + + const _segment = getSketchSegmentFromSourceRange(path, secondaryLine.range) + if (err(_segment)) return _segment + const { segment: secondarySegment, index: secondaryIndex } = _segment const primaryAngle = getAngle(primarySegment.from, primarySegment.to) const secondaryAngle = getAngle(secondarySegment.from, secondarySegment.to) const secondaryAngleAlt = getAngle( @@ -580,14 +600,26 @@ export function isLinesParallelAndConstrained( // is secordary line fully constrain, or has constrain type of 'angle' const secondaryFirstArg = getFirstArg(secondaryNode) + if (err(secondaryFirstArg)) return secondaryFirstArg + const constraintType = getConstraintType( secondaryFirstArg.val, secondaryNode.callee.name as ToolTip ) - const constraintLevel = getConstraintLevelFromSourceRange( + + const constraintLevelMeta = getConstraintLevelFromSourceRange( secondaryLine.range, ast - ).level + ) + if (err(constraintLevelMeta)) { + console.error(constraintLevelMeta) + return { + isParallelAndConstrained: false, + sourceRange: [0, 0], + } + } + const constraintLevel = constraintLevelMeta.level + const isConstrained = constraintType === 'angle' || constraintLevel === 'full' @@ -622,11 +654,16 @@ export function doesPipeHaveCallExp({ selection: Selection }): boolean { const pathToNode = getNodePathFromSourceRange(ast, selection.range) - const pipeExpression = getNodeFromPath( + const pipeExpressionMeta = getNodeFromPath( ast, pathToNode, 'PipeExpression' - ).node + ) + if (err(pipeExpressionMeta)) { + console.error(pipeExpressionMeta) + return false + } + const pipeExpression = pipeExpressionMeta.node if (pipeExpression.type !== 'PipeExpression') return false return pipeExpression.body.some( (expression) => @@ -645,11 +682,16 @@ export function hasExtrudeSketchGroup({ programMemory: ProgramMemory }): boolean { const pathToNode = getNodePathFromSourceRange(ast, selection.range) - const varDec = getNodeFromPath( + const varDecMeta = getNodeFromPath( ast, pathToNode, 'VariableDeclaration' - ).node + ) + if (err(varDecMeta)) { + console.error(varDecMeta) + return false + } + const varDec = varDecMeta.node if (varDec.type !== 'VariableDeclaration') return false const varName = varDec.declarations[0].id.name const varValue = programMemory?.root[varName] @@ -679,11 +721,16 @@ export function findUsesOfTagInPipe( 'segEndY', 'segLen', ] - const node = getNodeFromPath( + const nodeMeta = getNodeFromPath( ast, pathToNode, 'CallExpression' - ).node + ) + if (err(nodeMeta)) { + console.error(nodeMeta) + return [] + } + const node = nodeMeta.node if (node.type !== 'CallExpression') return [] const tagIndex = node.callee.name === 'close' ? 1 : 2 const thirdParam = node.arguments[tagIndex] @@ -694,10 +741,14 @@ export function findUsesOfTagInPipe( ast, pathToNode, 'VariableDeclaration' - ).node + ) + if (err(varDec)) { + console.error(varDec) + return [] + } const dependentRanges: SourceRange[] = [] - traverse(varDec, { + traverse(varDec.node, { enter: (node) => { if ( node.type !== 'CallExpression' || @@ -715,17 +766,17 @@ export function findUsesOfTagInPipe( export function hasSketchPipeBeenExtruded(selection: Selection, ast: Program) { const path = getNodePathFromSourceRange(ast, selection.range) - const { node: pipeExpression } = getNodeFromPath( - ast, - path, - 'PipeExpression' - ) + const _node = getNodeFromPath(ast, path, 'PipeExpression') + if (err(_node)) return false + const { node: pipeExpression } = _node if (pipeExpression.type !== 'PipeExpression') return false - const varDec = getNodeFromPath( + const _varDec = getNodeFromPath( ast, path, 'VariableDeclarator' - ).node + ) + if (err(_varDec)) return false + const varDec = _varDec.node let extruded = false traverse(ast as any, { enter(node) { diff --git a/src/lang/recast.test.ts b/src/lang/recast.test.ts index 7defd7951..2e43a8382 100644 --- a/src/lang/recast.test.ts +++ b/src/lang/recast.test.ts @@ -1,5 +1,6 @@ import { parse, Program, recast, initPromise } from './wasm' import fs from 'node:fs' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -10,22 +11,27 @@ describe('recast', () => { const code = '1 + 2' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('variable declaration', () => { const code = 'const myVar = 5' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it("variable declaration that's binary with string", () => { const code = "const myVar = 5 + 'yo'" const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) const codeWithOtherQuotes = 'const myVar = 5 + "yo"' const { ast: ast2 } = code2ast(codeWithOtherQuotes) - expect(recast(ast2).trim()).toBe(codeWithOtherQuotes) + const recastRetVal = recast(ast2) + if (err(recastRetVal)) throw recastRetVal + expect(recastRetVal.trim()).toBe(codeWithOtherQuotes) }) it('test assigning two variables, the second summing with the first', () => { const code = `const myVar = 5 @@ -33,6 +39,7 @@ const newVar = myVar + 1 ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('test assigning a var by cont concatenating two strings string', () => { @@ -42,6 +49,7 @@ const newVar = myVar + 1 ) const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('test with function call', () => { @@ -50,6 +58,7 @@ log(5, myVar) ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('function declaration with call', () => { @@ -62,6 +71,7 @@ log(5, myVar) ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('recast sketch declaration', () => { @@ -73,6 +83,7 @@ log(5, myVar) ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('sketch piped into callExpression', () => { @@ -85,6 +96,7 @@ log(5, myVar) ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('recast BinaryExpression piped into CallExpression', () => { @@ -97,36 +109,42 @@ log(5, myVar) ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('recast nested binary expression', () => { const code = ['const myVar = 1 + 2 * 5'].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('recast nested binary expression with parans', () => { const code = ['const myVar = 1 + (1 + 2) * 5'].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('unnecessary paran wrap will be remove', () => { const code = ['const myVar = 1 + (2 * 5)'].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.replace('(', '').replace(')', '')) }) it('complex nested binary expression', () => { const code = ['1 * ((2 + 3) / 4 + 5)'].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('multiplied paren expressions', () => { const code = ['3 + (1 + 2) * (3 + 4)'].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('recast array declaration', () => { @@ -135,6 +153,7 @@ log(5, myVar) ) const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('recast long array declaration', () => { @@ -150,6 +169,7 @@ log(5, myVar) ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code.trim()) }) it('recast long object execution', () => { @@ -163,6 +183,7 @@ const yo = { ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('recast short object execution', () => { @@ -170,6 +191,7 @@ const yo = { ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('recast object execution with member expression', () => { @@ -181,6 +203,7 @@ const myVar2 = yo['a'][key2].c ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) }) @@ -194,6 +217,7 @@ const key = 'c' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) @@ -207,6 +231,7 @@ const yo = 'bing' ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('comments at the start and end', () => { @@ -218,6 +243,7 @@ const key = 'c' ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('comments in a fn block', () => { @@ -233,6 +259,7 @@ const key = 'c' ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('comments in a pipe expression', () => { @@ -246,6 +273,7 @@ const key = 'c' ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('comments sprinkled in all over the place', () => { @@ -272,6 +300,7 @@ one more for good measure ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(`/* comment at start */ const mySk1 = startSketchAt([0, 0]) @@ -295,18 +324,21 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', ( const code = 'const myVar = 2 + min(100, legLen(5, 3))' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('nested callExpression in unaryExpression', () => { const code = 'const myVar = -min(100, legLen(5, 3))' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('with unaryExpression in callExpression', () => { const code = 'const myVar = min(5, -legLen(5, 4))' const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) it('with unaryExpression in sketch situation', () => { @@ -316,6 +348,7 @@ describe('testing call Expressions in BinaryExpressions and UnaryExpressions', ( ].join('\n') const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted.trim()).toBe(code) }) }) @@ -334,6 +367,7 @@ describe('it recasts wrapped object expressions in pipe bodies with correct inde ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) it('recasts wrapped object expressions NOT in pipe body correctly', () => { @@ -345,6 +379,7 @@ describe('it recasts wrapped object expressions in pipe bodies with correct inde ` const { ast } = code2ast(code) const recasted = recast(ast) + if (err(recasted)) throw recasted expect(recasted).toBe(code) }) }) @@ -362,5 +397,7 @@ describe('it recasts binary expression using brackets where needed', () => { function code2ast(code: string): { ast: Program } { const ast = parse(code) + // eslint-ignore-next-line + if (err(ast)) throw ast return { ast } } diff --git a/src/lang/std/engineConnection.ts b/src/lang/std/engineConnection.ts index 1b6e568f4..94c7954da 100644 --- a/src/lang/std/engineConnection.ts +++ b/src/lang/std/engineConnection.ts @@ -1822,7 +1822,7 @@ export class EngineCommandManager extends EventTarget { ) } } - throw Error('shouldnt reach here') + return Promise.reject(new Error('Expected unreachable reached')) } handlePendingSceneCommand( id: string, @@ -1930,7 +1930,9 @@ export class EngineCommandManager extends EventTarget { ) if (!idToRangeMap) { - throw new Error('idToRangeMap is required for batch commands') + return Promise.reject( + new Error('idToRangeMap is required for batch commands') + ) } // Add the overall batch command to the artifact map just so we can track all of the @@ -1954,7 +1956,7 @@ export class EngineCommandManager extends EventTarget { ) return promise } - sendModelingCommandFromWasm( + async sendModelingCommandFromWasm( id: string, rangeStr: string, commandStr: string, @@ -1967,13 +1969,13 @@ export class EngineCommandManager extends EventTarget { return Promise.resolve() } if (id === undefined) { - throw new Error('id is undefined') + return Promise.reject(new Error('id is undefined')) } if (rangeStr === undefined) { - throw new Error('rangeStr is undefined') + return Promise.reject(new Error('rangeStr is undefined')) } if (commandStr === undefined) { - throw new Error('commandStr is undefined') + return Promise.reject(new Error('commandStr is undefined')) } const range: SourceRange = JSON.parse(rangeStr) const idToRangeMap: { [key: string]: SourceRange } = @@ -1990,17 +1992,19 @@ export class EngineCommandManager extends EventTarget { idToRangeMap, }).then((resp) => { if (!resp) { - throw new Error( - 'returning modeling cmd response to the rust side is undefined or null' + return Promise.reject( + new Error( + 'returning modeling cmd response to the rust side is undefined or null' + ) ) } return JSON.stringify(resp.raw) }) } - commandResult(id: string): Promise { + async commandResult(id: string): Promise { const command = this.artifactMap[id] if (!command) { - throw new Error('No command found') + return Promise.reject(new Error('No command found')) } if (command.type === 'result') { return command.data diff --git a/src/lang/std/fileSystemManager.ts b/src/lang/std/fileSystemManager.ts index 5f1a0402f..1230494e3 100644 --- a/src/lang/std/fileSystemManager.ts +++ b/src/lang/std/fileSystemManager.ts @@ -10,69 +10,64 @@ class FileSystemManager { private _dir: string | null = null get dir() { - if (this._dir === null) { - throw new Error('current project dir is not set') - } - - return this._dir + return this._dir ?? '' } set dir(dir: string) { this._dir = dir } - readFile(path: string): Promise { + async readFile(path: string): Promise { // Using local file system only works from Tauri. if (!isTauri()) { - throw new Error( - 'This function can only be called from a Tauri application' + return Promise.reject( + new Error('This function can only be called from a Tauri application') ) } return join(this.dir, path) .catch((error) => { - throw new Error(`Error reading file: ${error}`) + return Promise.reject(new Error(`Error reading file: ${error}`)) }) .then((file) => { return readFile(file) }) } - exists(path: string): Promise { + async exists(path: string): Promise { // Using local file system only works from Tauri. if (!isTauri()) { - throw new Error( - 'This function can only be called from a Tauri application' + return Promise.reject( + new Error('This function can only be called from a Tauri application') ) } return join(this.dir, path) .catch((error) => { - throw new Error(`Error checking file exists: ${error}`) + return Promise.reject(new Error(`Error checking file exists: ${error}`)) }) .then((file) => { return tauriExists(file) }) } - getAllFiles(path: string): Promise { + async getAllFiles(path: string): Promise { // Using local file system only works from Tauri. if (!isTauri()) { - throw new Error( - 'This function can only be called from a Tauri application' + return Promise.reject( + new Error('This function can only be called from a Tauri application') ) } return join(this.dir, path) .catch((error) => { - throw new Error(`Error joining dir: ${error}`) + return Promise.reject(new Error(`Error joining dir: ${error}`)) }) .then((p) => { readDirRecursive(p) .catch((error) => { - throw new Error(`Error reading dir: ${error}`) + return Promise.reject(new Error(`Error reading dir: ${error}`)) }) - .then((files) => { return files.map((file) => file.path) }) diff --git a/src/lang/std/sketch.test.ts b/src/lang/std/sketch.test.ts index 0e60ee6d1..3641726ce 100644 --- a/src/lang/std/sketch.test.ts +++ b/src/lang/std/sketch.test.ts @@ -16,6 +16,7 @@ import { } from '../wasm' import { getNodeFromPath, getNodePathFromSourceRange } from '../queryAst' import { enginelessExecutor } from '../../lib/testHelpers' +import { err } from 'lib/trap' const eachQuad: [number, [number, number]][] = [ [-315, [1, 1]], @@ -114,16 +115,19 @@ describe('testing changeSketchArguments', () => { const code = genCode(lineToChange) const expectedCode = genCode(lineAfterChange) const ast = parse(code) + if (err(ast)) return ast + const programMemory = await enginelessExecutor(ast) const sourceStart = code.indexOf(lineToChange) - const { modifiedAst } = changeSketchArguments( + const changeSketchArgsRetVal = changeSketchArguments( ast, programMemory, [sourceStart, sourceStart + lineToChange.length], [2, 3], [0, 0] ) - expect(recast(modifiedAst)).toBe(expectedCode) + if (err(changeSketchArgsRetVal)) return changeSketchArgsRetVal + expect(recast(changeSketchArgsRetVal.modifiedAst)).toBe(expectedCode) }) }) @@ -138,10 +142,12 @@ const mySketch001 = startSketchOn('XY') |> lineTo([-1.59, -1.54], %) |> lineTo([0.46, -5.82], %)` const ast = parse(code) + if (err(ast)) return ast + const programMemory = await enginelessExecutor(ast) const sourceStart = code.indexOf(lineToChange) expect(sourceStart).toBe(95) - let { modifiedAst } = addNewSketchLn({ + const newSketchLnRetVal = addNewSketchLn({ node: ast, programMemory, to: [2, 3], @@ -155,6 +161,8 @@ const mySketch001 = startSketchOn('XY') ['init', 'VariableDeclarator'], ], }) + if (err(newSketchLnRetVal)) return newSketchLnRetVal + // Enable rotations #152 let expectedCode = `const mySketch001 = startSketchOn('XY') |> startProfileAt([0, 0], %) @@ -163,9 +171,11 @@ const mySketch001 = startSketchOn('XY') |> lineTo([0.46, -5.82], %) |> lineTo([2, 3], %) ` + + const { modifiedAst } = newSketchLnRetVal expect(recast(modifiedAst)).toBe(expectedCode) - modifiedAst = addCloseToPipe({ + const modifiedAst2 = addCloseToPipe({ node: ast, programMemory, pathToNode: [ @@ -176,6 +186,7 @@ const mySketch001 = startSketchOn('XY') ['init', 'VariableDeclarator'], ], }) + if (err(modifiedAst2)) return modifiedAst2 expectedCode = `const mySketch001 = startSketchOn('XY') |> startProfileAt([0, 0], %) @@ -184,7 +195,7 @@ const mySketch001 = startSketchOn('XY') |> lineTo([0.46, -5.82], %) |> close(%) ` - expect(recast(modifiedAst)).toBe(expectedCode) + expect(recast(modifiedAst2)).toBe(expectedCode) }) }) @@ -206,8 +217,9 @@ describe('testing addTagForSketchOnFace', () => { sourceStart, sourceStart + originalLine.length, ] + if (err(ast)) return ast const pathToNode = getNodePathFromSourceRange(ast, sourceRange) - const { modifiedAst } = addTagForSketchOnFace( + const sketchOnFaceRetVal = addTagForSketchOnFace( { previousProgramMemory: programMemory, pathToNode, @@ -215,6 +227,9 @@ describe('testing addTagForSketchOnFace', () => { }, 'lineTo' ) + if (err(sketchOnFaceRetVal)) return sketchOnFaceRetVal + + const { modifiedAst } = sketchOnFaceRetVal const expectedCode = genCode("lineTo([-1.59, -1.54], %, 'seg01')") expect(recast(modifiedAst)).toBe(expectedCode) }) @@ -583,13 +598,15 @@ describe('testing getConstraintInfo', () => { code.indexOf(functionName), code.indexOf(functionName) + functionName.length, ] + if (err(ast)) return ast const pathToNode = getNodePathFromSourceRange(ast, sourceRange) const callExp = getNodeFromPath( ast, pathToNode, 'CallExpression' - ).node - const result = getConstraintInfo(callExp, code, pathToNode) + ) + if (err(callExp)) return callExp + const result = getConstraintInfo(callExp.node, code, pathToNode) expect(result).toEqual(expected) }) }) @@ -735,13 +752,15 @@ describe('testing getConstraintInfo', () => { code.indexOf(functionName), code.indexOf(functionName) + functionName.length, ] + if (err(ast)) return ast const pathToNode = getNodePathFromSourceRange(ast, sourceRange) const callExp = getNodeFromPath( ast, pathToNode, 'CallExpression' - ).node - const result = getConstraintInfo(callExp, code, pathToNode) + ) + if (err(callExp)) return callExp + const result = getConstraintInfo(callExp.node, code, pathToNode) expect(result).toEqual(expected) }) }) @@ -1089,13 +1108,16 @@ describe('testing getConstraintInfo', () => { code.indexOf(functionName), code.indexOf(functionName) + functionName.length, ] + if (err(ast)) return ast const pathToNode = getNodePathFromSourceRange(ast, sourceRange) const callExp = getNodeFromPath( ast, pathToNode, 'CallExpression' - ).node - const result = getConstraintInfo(callExp, code, pathToNode) + ) + if (err(callExp)) return callExp + + const result = getConstraintInfo(callExp.node, code, pathToNode) expect(result).toEqual(expected) }) }) diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index f63e79a51..f5dfdb7eb 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -49,6 +49,7 @@ import { findUniqueName, } from 'lang/modifyAst' import { roundOff, getLength, getAngle } from 'lib/utils' +import { err } from 'lib/trap' import { perpendicularDistance } from 'sketch-helpers' export type Coords2d = [number, number] @@ -69,7 +70,7 @@ export function getCoordsFromPaths(skGroup: SketchGroup, index = 0): Coords2d { export function createFirstArg( sketchFn: ToolTip, val: Value | [Value, Value] | [Value, Value, Value] -): Value { +): Value | Error { if (Array.isArray(val)) { if ( [ @@ -97,7 +98,7 @@ export function createFirstArg( ) return val } - throw new Error('all sketch line types should have been covered') + return new Error('Missing sketch line type') } type AbbreviatedInput = @@ -314,11 +315,13 @@ export const lineTo: SketchLineHelper = { referencedSegment, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) + if (err(nodeMeta)) return nodeMeta + const { node: pipe } = nodeMeta const newVals: [Value, Value] = [ createLiteral(roundOff(to[0], 2)), @@ -355,10 +358,9 @@ export const lineTo: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const toArrExp = createArrayExpression([ createLiteral(to[0]), @@ -396,16 +398,20 @@ export const line: SketchLineHelper = { spliceBetween, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) - const { node: varDec } = getNodeFromPath( + if (err(nodeMeta)) return nodeMeta + const { node: pipe } = nodeMeta + const nodeMeta2 = getNodeFromPath( _node, pathToNode, 'VariableDeclarator' ) + if (err(nodeMeta2)) return nodeMeta2 + const { node: varDec } = nodeMeta2 const newXVal = createLiteral(roundOff(to[0] - from[0], 2)) const newYVal = createLiteral(roundOff(to[1] - from[1], 2)) @@ -420,8 +426,7 @@ export const line: SketchLineHelper = { ) const pipeIndex = pathToNode[pathToNodeIndex + 1][0] if (typeof pipeIndex === 'undefined' || typeof pipeIndex === 'string') { - throw new Error('pipeIndex is undefined') - // return + return new Error('pipeIndex is undefined') } pipe.body = [ ...pipe.body.slice(0, pipeIndex), @@ -447,11 +452,7 @@ export const line: SketchLineHelper = { pipe.body[callIndex] = callExp return { modifiedAst: _node, - pathToNode: [ - ...pathToNode, - ['body', 'PipeExpression'], - [callIndex, 'CallExpression'], - ], + pathToNode: [...pathToNode], valueUsedInTransform, } } @@ -480,10 +481,9 @@ export const line: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const toArrExp = createArrayExpression([ createLiteral(roundOff(to[0] - from[0], 2)), @@ -515,7 +515,9 @@ export const xLineTo: SketchLineHelper = { add: ({ node, pathToNode, to, replaceExisting, createCallback }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode('PipeExpression') + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 const newVal = createLiteral(roundOff(to[0], 2)) @@ -544,10 +546,9 @@ export const xLineTo: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const newX = createLiteral(roundOff(to[0], 2)) if (isLiteralArrayOrStatic(callExpression.arguments?.[0])) { callExpression.arguments[0] = newX @@ -574,7 +575,9 @@ export const yLineTo: SketchLineHelper = { add: ({ node, pathToNode, to, replaceExisting, createCallback }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode('PipeExpression') + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 const newVal = createLiteral(roundOff(to[1], 2)) @@ -603,10 +606,9 @@ export const yLineTo: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const newY = createLiteral(roundOff(to[1], 2)) if (isLiteralArrayOrStatic(callExpression.arguments?.[0])) { callExpression.arguments[0] = newY @@ -633,7 +635,9 @@ export const xLine: SketchLineHelper = { add: ({ node, pathToNode, to, from, replaceExisting, createCallback }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode('PipeExpression') + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 const newVal = createLiteral(roundOff(to[0] - from[0], 2)) const firstArg = newVal @@ -661,10 +665,9 @@ export const xLine: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const newX = createLiteral(roundOff(to[0] - from[0], 2)) if (isLiteralArrayOrStatic(callExpression.arguments?.[0])) { callExpression.arguments[0] = newX @@ -691,7 +694,9 @@ export const yLine: SketchLineHelper = { add: ({ node, pathToNode, to, from, replaceExisting, createCallback }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode('PipeExpression') + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 const newVal = createLiteral(roundOff(to[1] - from[1], 2)) if (replaceExisting && createCallback) { const { index: callIndex } = splitPathAtPipeExpression(pathToNode) @@ -716,10 +721,9 @@ export const yLine: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const newY = createLiteral(roundOff(to[1] - from[1], 2)) if (isLiteralArrayOrStatic(callExpression.arguments?.[0])) { callExpression.arguments[0] = newY @@ -753,14 +757,16 @@ export const tangentialArcTo: SketchLineHelper = { }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode( - 'PipeExpression' - ) - const { node: varDec } = getNodeFromPath( + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 + const _node2 = getNodeFromPath( _node, pathToNode, 'VariableDeclarator' ) + if (err(_node2)) return _node2 + const { node: varDec } = _node2 const toX = createLiteral(roundOff(to[0], 2)) const toY = createLiteral(roundOff(to[1], 2)) @@ -806,10 +812,9 @@ export const tangentialArcTo: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const x = createLiteral(roundOff(to[0], 2)) const y = createLiteral(roundOff(to[1], 2)) @@ -883,7 +888,9 @@ export const angledLine: SketchLineHelper = { }) => { const _node = { ...node } const getNode = getNodeFromPathCurry(_node, pathToNode) - const { node: pipe } = getNode('PipeExpression') + const _node1 = getNode('PipeExpression') + if (err(_node1)) return _node1 + const { node: pipe } = _node1 const newAngleVal = createLiteral(roundOff(getAngle(from, to), 0)) const newLengthVal = createLiteral(roundOff(getLength(from, to), 2)) @@ -918,10 +925,9 @@ export const angledLine: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const lineLength = roundOff(getLength(from, to), 2) @@ -964,19 +970,26 @@ export const angledLineOfXLength: SketchLineHelper = { replaceExisting, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) - const { node: varDec } = getNodeFromPath( + if (err(nodeMeta)) return nodeMeta + const { node: pipe } = nodeMeta + const nodeMeta2 = getNodeFromPath( _node, pathToNode, 'VariableDeclarator' ) + if (err(nodeMeta2)) return nodeMeta2 + const { node: varDec } = nodeMeta2 + const variableName = varDec.id.name const sketch = previousProgramMemory?.root?.[variableName] - if (sketch.type !== 'SketchGroup') throw new Error('not a SketchGroup') + if (sketch.type !== 'SketchGroup') { + return new Error('not a SketchGroup') + } const angle = createLiteral(roundOff(getAngle(from, to), 0)) const xLength = createLiteral(roundOff(Math.abs(from[0] - to[0]), 2) || 0.1) const newLine = createCallback @@ -1004,10 +1017,9 @@ export const angledLineOfXLength: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const xLength = roundOff(Math.abs(to[0] - from[0]), 2) @@ -1054,19 +1066,25 @@ export const angledLineOfYLength: SketchLineHelper = { replaceExisting, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) - const { node: varDec } = getNodeFromPath( + if (err(nodeMeta)) return nodeMeta + const { node: pipe } = nodeMeta + const nodeMeta2 = getNodeFromPath( _node, pathToNode, 'VariableDeclarator' ) + if (err(nodeMeta2)) return nodeMeta2 + const { node: varDec } = nodeMeta2 const variableName = varDec.id.name const sketch = previousProgramMemory?.root?.[variableName] - if (sketch.type !== 'SketchGroup') throw new Error('not a SketchGroup') + if (sketch.type !== 'SketchGroup') { + return new Error('not a SketchGroup') + } const angle = createLiteral(roundOff(getAngle(from, to), 0)) const yLength = createLiteral(roundOff(Math.abs(from[1] - to[1]), 2) || 0.1) @@ -1095,10 +1113,9 @@ export const angledLineOfYLength: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const yLength = roundOff(to[1] - from[1], 2) @@ -1145,11 +1162,14 @@ export const angledLineToX: SketchLineHelper = { referencedSegment, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) + if (err(nodeMeta)) return nodeMeta + + const { node: pipe } = nodeMeta const angle = createLiteral(roundOff(getAngle(from, to), 0)) const xArg = createLiteral(roundOff(to[0], 2)) if (replaceExisting && createCallback) { @@ -1182,10 +1202,10 @@ export const angledLineToX: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const xLength = roundOff(to[0], 2) @@ -1229,11 +1249,15 @@ export const angledLineToY: SketchLineHelper = { referencedSegment, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) + if (err(nodeMeta)) return nodeMeta + + const { node: pipe } = nodeMeta + const angle = createLiteral(roundOff(getAngle(from, to), 0)) const yArg = createLiteral(roundOff(to[1], 2)) @@ -1267,10 +1291,10 @@ export const angledLineToY: SketchLineHelper = { }, updateArgs: ({ node, pathToNode, to, from }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const xLength = roundOff(to[1], 2) @@ -1314,14 +1338,20 @@ export const angledLineThatIntersects: SketchLineHelper = { referencedSegment, }) => { const _node = { ...node } - const { node: pipe } = getNodeFromPath( + const nodeMeta = getNodeFromPath( _node, pathToNode, 'PipeExpression' ) + if (err(nodeMeta)) return nodeMeta + + const { node: pipe } = nodeMeta + const angle = createLiteral(roundOff(getAngle(from, to), 0)) - if (!referencedSegment) - throw new Error('referencedSegment must be provided') + if (!referencedSegment) { + return new Error('referencedSegment must be provided') + } + const offset = createLiteral( roundOff( perpendicularDistance( @@ -1359,14 +1389,14 @@ export const angledLineThatIntersects: SketchLineHelper = { valueUsedInTransform, } } - throw new Error('not implemented') + return new Error('not implemented') }, updateArgs: ({ node, pathToNode, to, from, previousProgramMemory }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) return nodeMeta + + const { node: callExpression } = nodeMeta const angle = roundOff(getAngle(from, to), 0) const firstArg = callExpression.arguments?.[0] @@ -1377,12 +1407,14 @@ export const angledLineThatIntersects: SketchLineHelper = { : createLiteral('') const intersectTagName = intersectTag.type === 'Literal' ? intersectTag.value : '' - const { node: varDec } = getNodeFromPath( + const nodeMeta2 = getNodeFromPath( _node, pathToNode, 'VariableDeclaration' ) + if (err(nodeMeta2)) return nodeMeta2 + const { node: varDec } = nodeMeta2 const varName = varDec.declarations[0].id.name const sketchGroup = previousProgramMemory.root[varName] as SketchGroup const intersectPath = sketchGroup.value.find( @@ -1493,11 +1525,24 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({ to, }) => { const _node = { ...node } - const { node: callExpression } = getNodeFromPath( - _node, - pathToNode - ) + const nodeMeta = getNodeFromPath(_node, pathToNode) + if (err(nodeMeta)) { + console.error(nodeMeta) + return { + modifiedAst: { + start: 0, + end: 0, + body: [], + nonCodeMeta: { + start: [], + nonCodeNodes: [], + }, + }, + pathToNode, + } + } + const { node: callExpression } = nodeMeta const toArrExp = createArrayExpression([ createLiteral(roundOff(to[0])), createLiteral(roundOff(to[1])), @@ -1533,17 +1578,20 @@ export function changeSketchArguments( sourceRange: SourceRange, args: [number, number], from: [number, number] -): { modifiedAst: Program; pathToNode: PathToNode } { +): { modifiedAst: Program; pathToNode: PathToNode } | Error { const _node = { ...node } const thePath = getNodePathFromSourceRange(_node, sourceRange) - const { node: callExpression, shallowPath } = getNodeFromPath( - _node, - thePath - ) + const nodeMeta = getNodeFromPath(_node, thePath) + if (err(nodeMeta)) return nodeMeta + + const { node: callExpression, shallowPath } = nodeMeta if (callExpression?.callee?.name in sketchLineHelperMap) { const { updateArgs } = sketchLineHelperMap[callExpression.callee.name] - if (!updateArgs) throw new Error('not a sketch line helper') + if (!updateArgs) { + return new Error('not a sketch line helper') + } + return updateArgs({ node: _node, previousProgramMemory: programMemory, @@ -1553,7 +1601,7 @@ export function changeSketchArguments( }) } - throw new Error(`not a sketch line helper: ${callExpression?.callee?.name}`) + return new Error(`not a sketch line helper: ${callExpression?.callee?.name}`) } export function getConstraintInfo( @@ -1612,13 +1660,18 @@ export function addNewSketchLn({ pathToNode, from, spliceBetween = false, -}: CreateLineFnCallArgs): { - modifiedAst: Program - pathToNode: PathToNode -} { +}: CreateLineFnCallArgs): + | { + modifiedAst: Program + pathToNode: PathToNode + } + | Error { const node = JSON.parse(JSON.stringify(_node)) const { add, updateArgs } = sketchLineHelperMap?.[fnName] || {} - if (!add || !updateArgs) throw new Error('not a sketch line helper') + if (!add || !updateArgs) { + return new Error('not a sketch line helper') + } + getNodeFromPath(node, pathToNode, 'VariableDeclarator') getNodeFromPath( node, @@ -1651,10 +1704,13 @@ export function addCallExpressionsToPipe({ _node, pathToNode, 'PipeExpression' - ).node - if (pipeExpression.type !== 'PipeExpression') - throw new Error('not a pipe expression') - pipeExpression.body = [...pipeExpression.body, ...expressions] + ) + if (err(pipeExpression)) return pipeExpression + + if (pipeExpression.node.type !== 'PipeExpression') { + return new Error('not a pipe expression') + } + pipeExpression.node.body = [...pipeExpression.node.body, ...expressions] return _node } @@ -1674,10 +1730,13 @@ export function addCloseToPipe({ _node, pathToNode, 'PipeExpression' - ).node - if (pipeExpression.type !== 'PipeExpression') - throw new Error('not a pipe expression') - pipeExpression.body = [...pipeExpression.body, closeExpression] + ) + if (err(pipeExpression)) return pipeExpression + + if (pipeExpression.node.type !== 'PipeExpression') { + return new Error('not a pipe expression') + } + pipeExpression.node.body = [...pipeExpression.node.body, closeExpression] return _node } @@ -1699,17 +1758,20 @@ export function replaceSketchLine({ from: [number, number] createCallback: TransformCallback referencedSegment?: Path -}): { - modifiedAst: Program - valueUsedInTransform?: number - pathToNode: PathToNode -} { - if (![...toolTips, 'intersect'].includes(fnName)) - throw new Error('not a tooltip') +}): + | { + modifiedAst: Program + valueUsedInTransform?: number + pathToNode: PathToNode + } + | Error { + if (![...toolTips, 'intersect'].includes(fnName)) { + return new Error('not a tooltip') + } const _node = { ...node } const { add } = sketchLineHelperMap[fnName] - const { modifiedAst, valueUsedInTransform, pathToNode } = add({ + const addRetVal = add({ node: _node, previousProgramMemory: programMemory, pathToNode: _pathToNode, @@ -1719,6 +1781,9 @@ export function replaceSketchLine({ replaceExisting: true, createCallback, }) + if (err(addRetVal)) return addRetVal + + const { modifiedAst, valueUsedInTransform, pathToNode } = addRetVal return { modifiedAst, valueUsedInTransform, pathToNode } } @@ -1733,7 +1798,7 @@ export function addTagForSketchOnFace( const { addTag } = sketchLineHelperMap[expressionName] return addTag(a) } - throw new Error(`"${expressionName}" is not a sketch line helper`) + return new Error(`"${expressionName}" is not a sketch line helper`) } function isAngleLiteral(lineArugement: Value): boolean { @@ -1746,16 +1811,22 @@ function isAngleLiteral(lineArugement: Value): boolean { : false } -type addTagFn = (a: ModifyAstBase) => { modifiedAst: Program; tag: string } +type addTagFn = ( + a: ModifyAstBase +) => { modifiedAst: Program; tag: string } | Error function addTag(tagIndex = 2): addTagFn { return ({ node, pathToNode }) => { const _node = { ...node } - const { node: primaryCallExp } = getNodeFromPath( + const callExpr = getNodeFromPath( _node, pathToNode, 'CallExpression' ) + if (err(callExpr)) return callExpr + + const { node: primaryCallExp } = callExpr + // Tag is always 3rd expression now, using arg index feels brittle // but we can come up with a better way to identify tag later. const thirdArg = primaryCallExp.arguments?.[tagIndex] @@ -1772,7 +1843,7 @@ function addTag(tagIndex = 2): addTagFn { tag: String(tagLiteral.value), } } else { - throw new Error('Unable to assign tag without value') + return new Error('Unable to assign tag without value') } } } @@ -1797,10 +1868,12 @@ export function getXComponent( return [sign * xComponent, sign * yComponent] } -function getFirstArgValuesForXYFns(callExpression: CallExpression): { - val: [Value, Value] - tag?: Value -} { +function getFirstArgValuesForXYFns(callExpression: CallExpression): + | { + val: [Value, Value] + tag?: Value + } + | Error { // used for lineTo, line const firstArg = callExpression.arguments[0] if (firstArg.type === 'ArrayExpression') { @@ -1814,13 +1887,15 @@ function getFirstArgValuesForXYFns(callExpression: CallExpression): { return { val: [x, y], tag } } } - throw new Error('expected ArrayExpression or ObjectExpression') + return new Error('expected ArrayExpression or ObjectExpression') } -function getFirstArgValuesForAngleFns(callExpression: CallExpression): { - val: [Value, Value] - tag?: Value -} { +function getFirstArgValuesForAngleFns(callExpression: CallExpression): + | { + val: [Value, Value] + tag?: Value + } + | Error { // used for angledLine, angledLineOfXLength, angledLineToX, angledLineOfYLength, angledLineToY const firstArg = callExpression.arguments[0] if (firstArg.type === 'ArrayExpression') { @@ -1841,7 +1916,7 @@ function getFirstArgValuesForAngleFns(callExpression: CallExpression): { return { val: [angle, length], tag } } } - throw new Error('expected ArrayExpression or ObjectExpression') + return new Error('expected ArrayExpression or ObjectExpression') } function getFirstArgValuesForXYLineFns(callExpression: CallExpression): { @@ -1874,10 +1949,12 @@ function getFirstArgValuesForXYLineFns(callExpression: CallExpression): { const getAngledLineThatIntersects = ( callExp: CallExpression -): { - val: [Value, Value, Value] - tag?: Value -} => { +): + | { + val: [Value, Value, Value] + tag?: Value + } + | Error => { const firstArg = callExp.arguments[0] if (firstArg.type === 'ObjectExpression') { const tag = firstArg.properties.find((p) => p.key.name === 'tag')?.value @@ -1892,13 +1969,15 @@ const getAngledLineThatIntersects = ( return { val: [angle, offset, intersectTag], tag } } } - throw new Error('expected ArrayExpression or ObjectExpression') + return new Error('expected ArrayExpression or ObjectExpression') } -export function getFirstArg(callExp: CallExpression): { - val: Value | [Value, Value] | [Value, Value, Value] - tag?: Value -} { +export function getFirstArg(callExp: CallExpression): + | { + val: Value | [Value, Value] | [Value, Value, Value] + tag?: Value + } + | Error { const name = callExp?.callee?.name if (['lineTo', 'line'].includes(name)) { return getFirstArgValuesForXYFns(callExp) @@ -1927,5 +2006,5 @@ export function getFirstArg(callExp: CallExpression): { // TODO probably needs it's own implementation return getFirstArgValuesForXYFns(callExp) } - throw new Error('unexpected call expression: ' + name) + return new Error('unexpected call expression: ' + name) } diff --git a/src/lang/std/sketchConstraints.test.ts b/src/lang/std/sketchConstraints.test.ts index 99dd29a27..a19a38dd8 100644 --- a/src/lang/std/sketchConstraints.test.ts +++ b/src/lang/std/sketchConstraints.test.ts @@ -7,6 +7,7 @@ import { import { getSketchSegmentFromSourceRange } from './sketchConstraints' import { Selection } from 'lib/selections' import { enginelessExecutor } from '../../lib/testHelpers' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -31,6 +32,8 @@ async function testingSwapSketchFnCall({ range: [startIndex, startIndex + callToSwap.length], } const ast = parse(inputCode) + if (err(ast)) return Promise.reject(ast) + const programMemory = await enginelessExecutor(ast) const selections = { codeBasedSelections: [range], @@ -38,16 +41,22 @@ async function testingSwapSketchFnCall({ } const transformInfos = getTransformInfos(selections, ast, constraintType) - if (!transformInfos) throw new Error('nope') - const { modifiedAst } = transformAstSketchLines({ + if (!transformInfos) + return Promise.reject(new Error('transformInfos undefined')) + const ast2 = transformAstSketchLines({ ast, programMemory, selectionRanges: selections, transformInfos, referenceSegName: '', }) + if (err(ast2)) return Promise.reject(ast2) + + const newCode = recast(ast2.modifiedAst) + if (err(newCode)) return Promise.reject(newCode) + return { - newCode: recast(modifiedAst), + newCode, originalRange: range.range, } } @@ -355,10 +364,12 @@ const part001 = startSketchOn('XY') it('normal case works', async () => { const programMemory = await enginelessExecutor(parse(code)) const index = code.indexOf('// normal-segment') - 7 - const { __geoMeta, ...segment } = getSketchSegmentFromSourceRange( + const _segment = getSketchSegmentFromSourceRange( programMemory.root['part001'] as SketchGroup, [index, index] - ).segment + ) + if (err(_segment)) throw _segment + const { __geoMeta, ...segment } = _segment.segment expect(segment).toEqual({ type: 'ToPoint', to: [5.62, 1.79], @@ -369,10 +380,12 @@ const part001 = startSketchOn('XY') it('verify it works when the segment is in the `start` property', async () => { const programMemory = await enginelessExecutor(parse(code)) const index = code.indexOf('// segment-in-start') - 7 - const { __geoMeta, ...segment } = getSketchSegmentFromSourceRange( + const _segment = getSketchSegmentFromSourceRange( programMemory.root['part001'] as SketchGroup, [index, index] - ).segment + ) + if (err(_segment)) throw _segment + const { __geoMeta, ...segment } = _segment.segment expect(segment).toEqual({ to: [0, 0.04], from: [0, 0.04], diff --git a/src/lang/std/sketchConstraints.ts b/src/lang/std/sketchConstraints.ts index 43dbe2aa3..9ba0a07cd 100644 --- a/src/lang/std/sketchConstraints.ts +++ b/src/lang/std/sketchConstraints.ts @@ -10,31 +10,39 @@ import { PathToNode, Value, } from '../wasm' +import { err } from 'lib/trap' export function getSketchSegmentFromPathToNode( sketchGroup: SketchGroup, ast: Program, pathToNode: PathToNode -): { - segment: SketchGroup['value'][number] - index: number -} { +): + | { + segment: SketchGroup['value'][number] + index: number + } + | Error { // TODO: once pathTodNode is stored on program memory as part of execution, // we can check if the pathToNode matches the pathToNode of the sketchGroup. // For now we fall back to the sourceRange - const node = getNodeFromPath(ast, pathToNode).node + const nodeMeta = getNodeFromPath(ast, pathToNode) + if (err(nodeMeta)) return nodeMeta + + const node = nodeMeta.node if (!node || typeof node.start !== 'number' || !node.end) - throw new Error('no node found') + return new Error('no node found') const sourceRange: SourceRange = [node.start, node.end] return getSketchSegmentFromSourceRange(sketchGroup, sourceRange) } export function getSketchSegmentFromSourceRange( sketchGroup: SketchGroup, [rangeStart, rangeEnd]: SourceRange -): { - segment: SketchGroup['value'][number] - index: number -} { +): + | { + segment: SketchGroup['value'][number] + index: number + } + | Error { const startSourceRange = sketchGroup.start?.__geoMeta.sourceRange if ( startSourceRange && @@ -49,7 +57,7 @@ export function getSketchSegmentFromSourceRange( sourceRange[0] <= rangeStart && sourceRange[1] >= rangeEnd ) const line = sketchGroup.value[lineIndex] - if (!line) throw new Error('could not find matching line') + if (!line) return new Error('could not find matching line') return { segment: line, index: lineIndex, diff --git a/src/lang/std/sketchcombos.test.ts b/src/lang/std/sketchcombos.test.ts index d0f7c0a74..05377b77c 100644 --- a/src/lang/std/sketchcombos.test.ts +++ b/src/lang/std/sketchcombos.test.ts @@ -5,10 +5,12 @@ import { transformAstSketchLines, transformSecondarySketchLinesTagFirst, ConstraintType, + ConstraintLevel, getConstraintLevelFromSourceRange, } from './sketchcombos' import { ToolTip } from '../../useStore' import { Selections } from 'lib/selections' +import { err } from 'lib/trap' import { enginelessExecutor } from '../../lib/testHelpers' beforeAll(async () => { @@ -62,8 +64,10 @@ describe('testing getConstraintType', () => { function getConstraintTypeFromSourceHelper( code: string -): ReturnType { +): ReturnType | Error { const ast = parse(code) + if (err(ast)) return ast + const args = (ast.body[0] as any).expression.arguments[0].elements as [ Value, Value @@ -73,8 +77,10 @@ function getConstraintTypeFromSourceHelper( } function getConstraintTypeFromSourceHelper2( code: string -): ReturnType { +): ReturnType | Error { const ast = parse(code) + if (err(ast)) return ast + const arg = (ast.body[0] as any).expression.arguments[0] as Value const fnName = (ast.body[0] as any).expression.callee.name as ToolTip return getConstraintType(arg, fnName) @@ -200,6 +206,8 @@ const part001 = startSketchOn('XY') ` it('should transform the ast', async () => { const ast = parse(inputScript) + if (err(ast)) return Promise.reject(ast) + const selectionRanges: Selections['codeBasedSelections'] = inputScript .split('\n') .filter((ln) => ln.includes('//')) @@ -224,8 +232,10 @@ const part001 = startSketchOn('XY') selectionRanges: makeSelections(selectionRanges), transformInfos, programMemory, - })?.modifiedAst - const newCode = recast(newAst) + }) + if (err(newAst)) return Promise.reject(newAst) + + const newCode = recast(newAst.modifiedAst) expect(newCode).toBe(expectModifiedScript) }) }) @@ -287,6 +297,8 @@ const part001 = startSketchOn('XY') |> angledLineToY([301, myVar], %) // select for vertical constraint 10 ` const ast = parse(inputScript) + if (err(ast)) return Promise.reject(ast) + const selectionRanges: Selections['codeBasedSelections'] = inputScript .split('\n') .filter((ln) => ln.includes('// select for horizontal constraint')) @@ -312,8 +324,10 @@ const part001 = startSketchOn('XY') transformInfos, programMemory, referenceSegName: '', - })?.modifiedAst - const newCode = recast(newAst) + }) + if (err(newAst)) return Promise.reject(newAst) + + const newCode = recast(newAst.modifiedAst) expect(newCode).toBe(expectModifiedScript) }) it('should transform vertical lines the ast', async () => { @@ -345,6 +359,8 @@ const part001 = startSketchOn('XY') |> yLineTo(myVar, %) // select for vertical constraint 10 ` const ast = parse(inputScript) + if (err(ast)) return Promise.reject(ast) + const selectionRanges: Selections['codeBasedSelections'] = inputScript .split('\n') .filter((ln) => ln.includes('// select for vertical constraint')) @@ -370,8 +386,10 @@ const part001 = startSketchOn('XY') transformInfos, programMemory, referenceSegName: '', - })?.modifiedAst - const newCode = recast(newAst) + }) + if (err(newAst)) return Promise.reject(newAst) + + const newCode = recast(newAst.modifiedAst) expect(newCode).toBe(expectModifiedScript) }) }) @@ -436,6 +454,8 @@ async function helperThing( constraint: ConstraintType ): Promise { const ast = parse(inputScript) + if (err(ast)) return Promise.reject(ast) + const selectionRanges: Selections['codeBasedSelections'] = inputScript .split('\n') .filter((ln) => @@ -462,8 +482,13 @@ async function helperThing( selectionRanges: makeSelections(selectionRanges), transformInfos, programMemory, - })?.modifiedAst - return recast(newAst) + }) + + if (err(newAst)) return Promise.reject(newAst) + const recasted = recast(newAst.modifiedAst) + + if (err(recasted)) return Promise.reject(recasted) + return recasted } describe('testing getConstraintLevelFromSourceRange', () => { @@ -498,9 +523,7 @@ const part001 = startSketchOn('XY') |> xLine(-3.43 + 0, %) // full |> angledLineOfXLength([243 + 0, 1.2 + 0], %) // full` const ast = parse(code) - const constraintLevels: ReturnType< - typeof getConstraintLevelFromSourceRange - >['level'][] = ['full', 'partial', 'free'] + const constraintLevels: ConstraintLevel[] = ['full', 'partial', 'free'] constraintLevels.forEach((constraintLevel) => { const recursivelySeachCommentsAndCheckConstraintLevel = ( str: string, @@ -514,8 +537,11 @@ const part001 = startSketchOn('XY') const expectedConstraintLevel = getConstraintLevelFromSourceRange( [offsetIndex, offsetIndex], ast - ).level - expect(expectedConstraintLevel).toBe(constraintLevel) + ) + if (err(expectedConstraintLevel)) { + throw expectedConstraintLevel + } + expect(expectedConstraintLevel.level).toBe(constraintLevel) return recursivelySeachCommentsAndCheckConstraintLevel( str, index + constraintLevel.length diff --git a/src/lang/std/sketchcombos.ts b/src/lang/std/sketchcombos.ts index 72879ae18..92991e559 100644 --- a/src/lang/std/sketchcombos.ts +++ b/src/lang/std/sketchcombos.ts @@ -1,6 +1,7 @@ import { TransformCallback, VarValues } from './stdTypes' import { toolTips, ToolTip } from '../../useStore' import { Selections, Selection } from 'lib/selections' +import { cleanErrs, err } from 'lib/trap' import { CallExpression, Program, @@ -75,8 +76,18 @@ function createCallWrapper( if (tag) { args.push(tag) } + + const [hasErr, argsWOutErr] = cleanErrs(args) + if (hasErr) { + console.error(args) + return { + callExp: createCallExpression('', []), + valueUsedInTransform: 0, + } + } + return { - callExp: createCallExpression(a, args), + callExp: createCallExpression(a, argsWOutErr), valueUsedInTransform, } } @@ -1173,6 +1184,11 @@ export function getRemoveConstraintsTransform( // check if the function is locked down and so can't be transformed const firstArg = getFirstArg(sketchFnExp) + if (err(firstArg)) { + console.error(firstArg) + return false + } + if (isNotLiteralArrayOrStatic(firstArg.val)) { return transformInfo } @@ -1213,11 +1229,18 @@ export function removeSingleConstraint({ ast, pathToCallExp, 'CallExpression' - ).node - if (callExp.type !== 'CallExpression') throw new Error('Invalid node type') + ) + if (err(callExp)) { + console.error(callExp) + return false + } + if (callExp.node.type !== 'CallExpression') { + console.error(new Error('Invalid node type')) + return false + } const transform: TransformInfo = { - tooltip: callExp.callee.name as any, + tooltip: callExp.node.callee.name as any, createNode: ({ tag, referenceSegName, varValues }) => (_, rawValues) => { @@ -1241,7 +1264,7 @@ export function removeSingleConstraint({ }) const objExp = createObjectExpression(expression) return createStdlibCallExpression( - callExp.callee.name as any, + callExp.node.callee.name as any, objExp, tag ) @@ -1266,7 +1289,7 @@ export function removeSingleConstraint({ return varValue.value }) return createStdlibCallExpression( - callExp.callee.name as any, + callExp.node.callee.name as any, createArrayExpression(values), tag ) @@ -1275,7 +1298,7 @@ export function removeSingleConstraint({ // if (typeof arrayIndex !== 'number' || !objectProperty) must be single value input xLine, yLineTo etc return createCallWrapper( - callExp.callee.name as any, + callExp.node.callee.name as any, rawValues[0].value, tag ) @@ -1301,6 +1324,11 @@ function getTransformMapPath( // check if the function is locked down and so can't be transformed const firstArg = getFirstArg(sketchFnExp) + if (err(firstArg)) { + console.error(firstArg) + return false + } + if (isNotLiteralArrayOrStatic(firstArg.val)) { return false } @@ -1387,13 +1415,18 @@ export function getTransformInfos( const paths = selectionRanges.codeBasedSelections.map(({ range }) => getNodePathFromSourceRange(ast, range) ) - const nodes = paths.map( - (pathToNode) => - getNodeFromPath(ast, pathToNode, 'CallExpression').node + const nodes = paths.map((pathToNode) => + getNodeFromPath(ast, pathToNode, 'CallExpression') ) try { - const theTransforms = nodes.map((node) => { + const theTransforms = nodes.map((nodeMeta) => { + if (err(nodeMeta)) { + console.error(nodeMeta) + return false + } + + const node = nodeMeta.node if (node?.type === 'CallExpression') return getTransformInfo(node, constraintType) @@ -1410,16 +1443,24 @@ export function getRemoveConstraintsTransforms( selectionRanges: Selections, ast: Program, constraintType: ConstraintType -): TransformInfo[] { +): TransformInfo[] | Error { // return () const paths = selectionRanges.codeBasedSelections.map((selectionRange) => getNodePathFromSourceRange(ast, selectionRange.range) ) - const nodes = paths.map( - (pathToNode) => getNodeFromPath(ast, pathToNode).node + const nodes = paths.map((pathToNode) => + getNodeFromPath(ast, pathToNode) ) - const theTransforms = nodes.map((node) => { + const theTransforms = nodes.map((nodeMeta) => { + // Typescript is not smart enough to know node will never be Error + // here, but we'll place a condition anyway + if (err(nodeMeta)) { + console.error(nodeMeta) + return false + } + + const node = nodeMeta.node if (node?.type === 'CallExpression') return getRemoveConstraintsTransform(node, constraintType) @@ -1444,23 +1485,23 @@ export function transformSecondarySketchLinesTagFirst({ programMemory: ProgramMemory forceSegName?: string forceValueUsedInTransform?: Value -}): { - modifiedAst: Program - valueUsedInTransform?: number - pathToNodeMap: PathToNodeMap - tagInfo: { - tag: string - isTagExisting: boolean - } -} { +}): + | { + modifiedAst: Program + valueUsedInTransform?: number + pathToNodeMap: PathToNodeMap + tagInfo: { + tag: string + isTagExisting: boolean + } + } + | Error { // let node = JSON.parse(JSON.stringify(ast)) const primarySelection = selectionRanges.codeBasedSelections[0].range - const { modifiedAst, tag, isTagExisting, pathToNode } = giveSketchFnCallTag( - ast, - primarySelection, - forceSegName - ) + const _tag = giveSketchFnCallTag(ast, primarySelection, forceSegName) + if (err(_tag)) return _tag + const { modifiedAst, tag, isTagExisting, pathToNode } = _tag const result = transformAstSketchLines({ ast: modifiedAst, @@ -1474,6 +1515,8 @@ export function transformSecondarySketchLinesTagFirst({ referenceSegName: tag, forceValueUsedInTransform, }) + if (err(result)) return result + const updatedPathToNodeMap = incrementPathToNodeMap(result.pathToNodeMap) updatedPathToNodeMap[0] = pathToNode @@ -1514,11 +1557,13 @@ export function transformAstSketchLines({ referenceSegName: string forceValueUsedInTransform?: Value referencedSegmentRange?: Selection['range'] -}): { - modifiedAst: Program - valueUsedInTransform?: number - pathToNodeMap: PathToNodeMap -} { +}): + | { + modifiedAst: Program + valueUsedInTransform?: number + pathToNodeMap: PathToNodeMap + } + | Error { // deep clone since we are mutating in a loop, of which any could fail let node = JSON.parse(JSON.stringify(ast)) let _valueUsedInTransform // TODO should this be an array? @@ -1528,18 +1573,21 @@ export function transformAstSketchLines({ const callBack = transformInfos?.[index].createNode const transformTo = transformInfos?.[index].tooltip - if (!callBack || !transformTo) throw new Error('no callback helper') + if (!callBack || !transformTo) return new Error('no callback helper') const getNode = getNodeFromPathCurry(node, _pathToNode) - const callExp = getNode('CallExpression')?.node - const varDec = getNode('VariableDeclarator').node + const callExp = getNode('CallExpression') + if (err(callExp)) return callExp + const varDec = getNode('VariableDeclarator') + if (err(varDec)) return varDec - const { val } = getFirstArg(callExp) - const callBackTag = callExp.arguments[2] + const firstArg = getFirstArg(callExp.node) + if (err(firstArg)) return firstArg + const callBackTag = callExp.node.arguments[2] const _referencedSegmentNameVal = - callExp.arguments[0]?.type === 'ObjectExpression' && - callExp.arguments[0].properties?.find( + callExp.node.arguments[0]?.type === 'ObjectExpression' && + callExp.node.arguments[0].properties?.find( (prop) => prop.key.name === 'intersectTag' )?.value const _referencedSegmentName = @@ -1548,77 +1596,94 @@ export function transformAstSketchLines({ _referencedSegmentNameVal.type === 'Literal' && String(_referencedSegmentNameVal.value)) || '' + const { val } = firstArg const [varValA, varValB] = Array.isArray(val) ? val : [val, val] const varValues: VarValues = [] - getConstraintInfo(callExp, '', _pathToNode).forEach((a) => { + getConstraintInfo(callExp.node, '', _pathToNode).forEach((a) => { if ( a.type === 'tangentialWithPrevious' || a.type === 'horizontal' || a.type === 'vertical' ) return + + const nodeMeta = getNodeFromPath(ast, a.pathToNode) + if (err(nodeMeta)) return + if (a?.argPosition?.type === 'arrayItem') { varValues.push({ type: 'arrayItem', index: a.argPosition.index, - value: getNodeFromPath(ast, a.pathToNode).node, + value: nodeMeta.node, argType: a.type, }) } else if (a?.argPosition?.type === 'objectProperty') { varValues.push({ type: 'objectProperty', key: a.argPosition.key, - value: getNodeFromPath(ast, a.pathToNode).node, + value: nodeMeta.node, argType: a.type, }) } else if (a?.argPosition?.type === 'singleValue') { varValues.push({ type: 'singleValue', argType: a.type, - value: getNodeFromPath(ast, a.pathToNode).node, + value: nodeMeta.node, }) } }) - const varName = varDec.id.name + const varName = varDec.node.id.name let sketchGroup = programMemory.root?.[varName] if (sketchGroup.type === 'ExtrudeGroup') { sketchGroup = sketchGroup.sketchGroup } if (!sketchGroup || sketchGroup.type !== 'SketchGroup') - throw new Error('not a sketch group') - const seg = getSketchSegmentFromPathToNode( + return new Error('not a sketch group') + const segMeta = getSketchSegmentFromPathToNode( sketchGroup, ast, _pathToNode - ).segment - const referencedSegment = referencedSegmentRange - ? getSketchSegmentFromSourceRange(sketchGroup, referencedSegmentRange) - .segment - : sketchGroup.value.find((path) => path.name === _referencedSegmentName) - const { to, from } = seg - const { modifiedAst, valueUsedInTransform, pathToNode } = replaceSketchLine( - { - node: node, - programMemory, - pathToNode: _pathToNode, - referencedSegment, - fnName: transformTo || (callExp.callee.name as ToolTip), - to, - from, - createCallback: callBack({ - referenceSegName: _referencedSegmentName, - varValues, - varValA, - varValB, - tag: callBackTag, - forceValueUsedInTransform, - }), - } ) + if (err(segMeta)) return segMeta + const seg = segMeta.segment + let referencedSegment + if (referencedSegmentRange) { + const _segment = getSketchSegmentFromSourceRange( + sketchGroup, + referencedSegmentRange + ) + if (err(_segment)) return _segment + referencedSegment = _segment.segment + } else { + referencedSegment = sketchGroup.value.find( + (path) => path.name === _referencedSegmentName + ) + } + const { to, from } = seg + const replacedSketchLine = replaceSketchLine({ + node: node, + programMemory, + pathToNode: _pathToNode, + referencedSegment, + fnName: transformTo || (callExp.node.callee.name as ToolTip), + to, + from, + createCallback: callBack({ + referenceSegName: _referencedSegmentName, + varValues, + varValA, + varValB, + tag: callBackTag, + forceValueUsedInTransform, + }), + }) + if (err(replacedSketchLine)) return replacedSketchLine + + const { modifiedAst, valueUsedInTransform, pathToNode } = replacedSketchLine node = modifiedAst pathToNodeMap[index] = pathToNode if (typeof valueUsedInTransform === 'number') { @@ -1627,11 +1692,17 @@ export function transformAstSketchLines({ } if ('codeBasedSelections' in selectionRanges) { - selectionRanges.codeBasedSelections.forEach(({ range }, index) => - processSelection(getNodePathFromSourceRange(node, range), index) - ) + // If the processing of any of the selections failed, return the first error + const maybeProcessErrors = selectionRanges.codeBasedSelections + .map(({ range }, index) => + processSelection(getNodePathFromSourceRange(node, range), index) + ) + .filter(err) + + if (maybeProcessErrors.length) return maybeProcessErrors[0] } else { - selectionRanges.forEach(processSelection) + const maybeProcessErrors = selectionRanges.map(processSelection).filter(err) + if (maybeProcessErrors.length) return maybeProcessErrors[0] } return { @@ -1672,20 +1743,27 @@ function getArgLiteralVal(arg: Value): number { return arg?.type === 'Literal' ? Number(arg.value) : 0 } +export type ConstraintLevel = 'free' | 'partial' | 'full' + export function getConstraintLevelFromSourceRange( cursorRange: Selection['range'], - ast: Program -): { range: [number, number]; level: 'free' | 'partial' | 'full' } { - const { node: sketchFnExp } = getNodeFromPath( + ast: Program | Error +): Error | { range: [number, number]; level: ConstraintLevel } { + if (err(ast)) return ast + const nodeMeta = getNodeFromPath( ast, getNodePathFromSourceRange(ast, cursorRange), 'CallExpression' ) + if (err(nodeMeta)) return nodeMeta + + const { node: sketchFnExp } = nodeMeta const name = sketchFnExp?.callee?.name as ToolTip const range: [number, number] = [sketchFnExp.start, sketchFnExp.end] if (!toolTips.includes(name)) return { level: 'free', range: range } const firstArg = getFirstArg(sketchFnExp) + if (err(firstArg)) return firstArg // check if the function is fully constrained if (isNotLiteralArrayOrStatic(firstArg.val)) { diff --git a/src/lang/std/stdTypes.ts b/src/lang/std/stdTypes.ts index f37cbd4ed..a1ef3d99a 100644 --- a/src/lang/std/stdTypes.ts +++ b/src/lang/std/stdTypes.ts @@ -114,19 +114,25 @@ export interface ConstrainInfo { } export interface SketchLineHelper { - add: (a: addCall) => { - modifiedAst: Program - pathToNode: PathToNode - valueUsedInTransform?: number - } - updateArgs: (a: updateArgs) => { - modifiedAst: Program - pathToNode: PathToNode - } - addTag: (a: ModifyAstBase) => { - modifiedAst: Program - tag: string - } + add: (a: addCall) => + | { + modifiedAst: Program + pathToNode: PathToNode + valueUsedInTransform?: number + } + | Error + updateArgs: (a: updateArgs) => + | { + modifiedAst: Program + pathToNode: PathToNode + } + | Error + addTag: (a: ModifyAstBase) => + | { + modifiedAst: Program + tag: string + } + | Error getConstraintInfo: ( callExp: CallExpression, code: string, diff --git a/src/lang/tokeniser.test.ts b/src/lang/tokeniser.test.ts index 9f5a9a4d8..d37f7df6d 100644 --- a/src/lang/tokeniser.test.ts +++ b/src/lang/tokeniser.test.ts @@ -1,4 +1,5 @@ import { lexer, initPromise } from './wasm' +import { err } from 'lib/trap' beforeAll(async () => { await initPromise @@ -369,10 +370,13 @@ const ya = 6 */' from 14 to 50`, // helpers -const stringSummaryLexer = (input: string) => - lexer(input).map( +const stringSummaryLexer = (input: string) => { + const tokens = lexer(input) + if (err(tokens)) return [] + return tokens.map( ({ type, value, start, end }) => `${type.padEnd(12, ' ')} ${`'${value}'`.padEnd(10, ' ')} from ${String( start ).padEnd(3, ' ')} to ${end}` ) +} diff --git a/src/lang/util.ts b/src/lang/util.ts index fd0b3b146..2a8b60d14 100644 --- a/src/lang/util.ts +++ b/src/lang/util.ts @@ -3,6 +3,7 @@ import { Program, PathToNode } from './wasm' import { getNodeFromPath } from './queryAst' import { ArtifactMap } from './std/engineConnection' import { isOverlap } from 'lib/utils' +import { err } from 'lib/trap' export function pathMapToSelections( ast: Program, @@ -14,7 +15,9 @@ export function pathMapToSelections( codeBasedSelections: [], } Object.entries(pathToNodeMap).forEach(([index, path]) => { - const node = getNodeFromPath(ast, path).node as any + const nodeMeta = getNodeFromPath(ast, path) + if (err(nodeMeta)) return + const node = nodeMeta.node as any const type = prevSelections.codeBasedSelections[Number(index)].type if (node) { newSelections.codeBasedSelections.push({ diff --git a/src/lang/wasm.ts b/src/lang/wasm.ts index d07d713a8..b22670ff4 100644 --- a/src/lang/wasm.ts +++ b/src/lang/wasm.ts @@ -33,6 +33,7 @@ import { TEST } from 'env' import { Configuration } from 'wasm-lib/kcl/bindings/Configuration' import { ProjectConfiguration } from 'wasm-lib/kcl/bindings/ProjectConfiguration' import { ProjectRoute } from 'wasm-lib/kcl/bindings/ProjectRoute' +import { err } from 'lib/trap' export type { Program } from '../wasm-lib/kcl/bindings/Program' export type { Value } from '../wasm-lib/kcl/bindings/Value' @@ -108,7 +109,7 @@ const initialise = async () => { return await init(buffer) } catch (e) { console.log('Error initialising WASM', e) - throw e + return Promise.reject(e) } } @@ -117,20 +118,19 @@ export const initPromise = initialise() export const rangeTypeFix = (ranges: number[][]): [number, number][] => ranges.map(([start, end]) => [start, end]) -export const parse = (code: string): Program => { +export const parse = (code: string | Error): Program | Error => { + if (err(code)) return code + try { const program: Program = parse_wasm(code) return program } catch (e: any) { const parsed: RustKclError = JSON.parse(e.toString()) - const kclError = new KCLError( + return new KCLError( parsed.kind, parsed.msg, rangeTypeFix(parsed.sourceRanges) ) - - console.log(kclError) - throw kclError } } @@ -147,10 +147,12 @@ export interface ProgramMemory { export const executor = async ( node: Program, - programMemory: ProgramMemory = { root: {}, return: null }, + programMemory: ProgramMemory | Error = { root: {}, return: null }, engineCommandManager: EngineCommandManager, isMock: boolean = false ): Promise => { + if (err(programMemory)) return Promise.reject(programMemory) + engineCommandManager.startNewSession() const _programMemory = await _executor( node, @@ -166,10 +168,12 @@ export const executor = async ( export const _executor = async ( node: Program, - programMemory: ProgramMemory = { root: {}, return: null }, + programMemory: ProgramMemory | Error = { root: {}, return: null }, engineCommandManager: EngineCommandManager, isMock: boolean ): Promise => { + if (err(programMemory)) return Promise.reject(programMemory) + try { let baseUnit = 'mm' if (!TEST) { @@ -197,20 +201,12 @@ export const _executor = async ( rangeTypeFix(parsed.sourceRanges) ) - console.log(kclError) - throw kclError + return Promise.reject(kclError) } } -export const recast = (ast: Program): string => { - try { - const s: string = recast_wasm(JSON.stringify(ast)) - return s - } catch (e) { - // TODO: do something real with the error. - console.log('recast error', e) - throw e - } +export const recast = (ast: Program): string | Error => { + return recast_wasm(JSON.stringify(ast)) } export const makeDefaultPlanes = async ( @@ -224,19 +220,12 @@ export const makeDefaultPlanes = async ( } catch (e) { // TODO: do something real with the error. console.log('make default planes error', e) - throw e + return Promise.reject(e) } } -export function lexer(str: string): Token[] { - try { - const tokens: Token[] = lexer_wasm(str) - return tokens - } catch (e) { - // TODO: do something real with the error. - console.log('lexer error', e) - throw e - } +export function lexer(str: string): Token[] | Error { + return lexer_wasm(str) } export const modifyAstForSketch = async ( @@ -265,7 +254,7 @@ export const modifyAstForSketch = async ( ) console.log(kclError) - throw kclError + return Promise.reject(kclError) } } @@ -312,21 +301,18 @@ export function getTangentialArcToInfo({ } } -export function programMemoryInit(): ProgramMemory { +export function programMemoryInit(): ProgramMemory | Error { try { const memory: ProgramMemory = program_memory_init() return memory } catch (e: any) { console.log(e) const parsed: RustKclError = JSON.parse(e.toString()) - const kclError = new KCLError( + return new KCLError( parsed.kind, parsed.msg, rangeTypeFix(parsed.sourceRanges) ) - - console.log(kclError) - throw kclError } } @@ -354,66 +340,35 @@ export async function coreDump( return dump } catch (e: any) { console.error('CoreDump: error', e) - throw new Error(`Error getting core dump: ${e}`) + return Promise.reject(new Error(`Error getting core dump: ${e}`)) } } -export function tomlStringify(toml: any): string { - try { - const s: string = toml_stringify(JSON.stringify(toml)) - return s - } catch (e: any) { - throw new Error(`Error stringifying toml: ${e}`) - } +export function tomlStringify(toml: any): string | Error { + return toml_stringify(JSON.stringify(toml)) } -export function defaultAppSettings(): Configuration { - try { - const settings: Configuration = default_app_settings() - return settings - } catch (e: any) { - throw new Error(`Error getting default app settings: ${e}`) - } +export function defaultAppSettings(): Configuration | Error { + return default_app_settings() } -export function parseAppSettings(toml: string): Configuration { - try { - const settings: Configuration = parse_app_settings(toml) - return settings - } catch (e: any) { - throw new Error(`Error parsing app settings: ${e}`) - } +export function parseAppSettings(toml: string): Configuration | Error { + return parse_app_settings(toml) } -export function defaultProjectSettings(): ProjectConfiguration { - try { - const settings: ProjectConfiguration = default_project_settings() - return settings - } catch (e: any) { - throw new Error(`Error getting default project settings: ${e}`) - } +export function defaultProjectSettings(): ProjectConfiguration | Error { + return default_project_settings() } -export function parseProjectSettings(toml: string): ProjectConfiguration { - try { - const settings: ProjectConfiguration = parse_project_settings(toml) - return settings - } catch (e: any) { - throw new Error(`Error parsing project settings: ${e}`) - } +export function parseProjectSettings( + toml: string +): ProjectConfiguration | Error { + return parse_project_settings(toml) } export function parseProjectRoute( configuration: Configuration, route_str: string -): ProjectRoute { - try { - const route: ProjectRoute = parse_project_route( - JSON.stringify(configuration), - route_str - ) - return route - } catch (e: any) { - throw new Error(`Error parsing project route: ${e}`) - } +): ProjectRoute | Error { + return parse_project_route(JSON.stringify(configuration), route_str) } diff --git a/src/lib/paths.ts b/src/lib/paths.ts index 91345f39b..71b63c8c0 100644 --- a/src/lib/paths.ts +++ b/src/lib/paths.ts @@ -6,6 +6,7 @@ import { ProjectRoute } from 'wasm-lib/kcl/bindings/ProjectRoute' import { parseProjectRoute, readAppSettingsFile } from './tauri' import { parseProjectRoute as parseProjectRouteWasm } from 'lang/wasm' import { readLocalStorageAppSettingsFile } from './settings/settingsUtils' +import { err } from 'lib/trap' const prependRoutes = (routesObject: Record) => (prepend: string) => { @@ -33,21 +34,25 @@ export const BROWSER_PATH = `%2F${BROWSER_PROJECT_NAME}%2F${BROWSER_FILE_NAME}${ export async function getProjectMetaByRouteId( id?: string, - configuration?: Configuration + configuration?: Configuration | Error ): Promise { if (!id) return undefined const inTauri = isTauri() - if (!configuration) { + if (configuration === undefined) { configuration = inTauri ? await readAppSettingsFile() : readLocalStorageAppSettingsFile() } + if (err(configuration)) return Promise.reject(configuration) + const route = inTauri ? await parseProjectRoute(configuration, id) : parseProjectRouteWasm(configuration, id) + if (err(route)) return Promise.reject(route) + return route } diff --git a/src/lib/screenshot.ts b/src/lib/screenshot.ts index 8b0bbebf9..f0441e5f0 100644 --- a/src/lib/screenshot.ts +++ b/src/lib/screenshot.ts @@ -6,16 +6,16 @@ export default async function screenshot( htmlRef: React.RefObject | null ): Promise { if (htmlRef === null) { - throw new Error('htmlRef is null') + return Promise.reject(new Error('htmlRef is null')) } if (htmlRef.current === null) { - throw new Error('htmlRef is null') + return Promise.reject(new Error('htmlRef is null')) } return html2canvas(htmlRef.current) .then((canvas) => { return canvas.toDataURL() }) .catch((error) => { - throw error + return Promise.reject(error) }) } diff --git a/src/lib/selections.ts b/src/lib/selections.ts index 04a9345ab..0b707f8bc 100644 --- a/src/lib/selections.ts +++ b/src/lib/selections.ts @@ -29,6 +29,7 @@ import { import { Mesh, Object3D, Object3DEventMap } from 'three' import { AXIS_GROUP, X_AXIS } from 'clientSideScene/sceneInfra' import { PathToNodeMap } from 'lang/std/sketchcombos' +import { err } from 'lib/trap' export const X_AXIS_UUID = 'ad792545-7fd3-482a-a602-a93924e3055b' export const Y_AXIS_UUID = '680fd157-266f-4b8a-984f-cdf46b8bdf01' @@ -168,11 +169,16 @@ export function getEventForSegmentSelection( // So we want to make sure we have and updated ast with // accurate source ranges const updatedAst = parse(codeManager.code) - const node = getNodeFromPath( + if (err(updatedAst)) return null + + const nodeMeta = getNodeFromPath( updatedAst, pathToNode, 'CallExpression' - ).node + ) + if (err(nodeMeta)) return null + + const node = nodeMeta.node const range: SourceRange = [node.start, node.end] return { type: 'Set selection', @@ -278,14 +284,10 @@ export function processCodeMirrorRanges({ } } -export function updateSceneObjectColors(codeBasedSelections: Selection[]) { - let updated: Program - try { - updated = parse(recast(kclManager.ast)) - } catch (e) { - console.error('error parsing code in processCodeMirrorRanges', e) - return - } +function updateSceneObjectColors(codeBasedSelections: Selection[]) { + const updated = parse(recast(kclManager.ast)) + if (err(updated)) return + Object.values(sceneEntitiesManager.activeSegments).forEach((segmentGroup) => { if ( ![STRAIGHT_SEGMENT, TANGENTIAL_ARC_TO_SEGMENT, PROFILE_START].includes( @@ -293,11 +295,13 @@ export function updateSceneObjectColors(codeBasedSelections: Selection[]) { ) ) return - const node = getNodeFromPath( + const nodeMeta = getNodeFromPath( updated, segmentGroup.userData.pathToNode, 'CallExpression' - ).node + ) + if (err(nodeMeta)) return + const node = nodeMeta.node const groupHasCursor = codeBasedSelections.some((selection) => { return isOverlap(selection.range, [node.start, node.end]) }) @@ -571,18 +575,27 @@ export async function sendSelectEventToEngine( export function updateSelections( pathToNodeMap: PathToNodeMap, prevSelectionRanges: Selections, - ast: Program -): Selections { - return { - ...prevSelectionRanges, - codeBasedSelections: Object.entries(pathToNodeMap).map( - ([index, pathToNode]): Selection => { - const node = getNodeFromPath(ast, pathToNode).node - return { - range: [node.start, node.end], - type: prevSelectionRanges.codeBasedSelections[Number(index)]?.type, - } + ast: Program | Error +): Selections | Error { + if (err(ast)) return ast + + const newSelections = Object.entries(pathToNodeMap) + .map(([index, pathToNode]): Selection | undefined => { + const nodeMeta = getNodeFromPath(ast, pathToNode) + if (err(nodeMeta)) return undefined + const node = nodeMeta.node + return { + range: [node.start, node.end], + type: prevSelectionRanges.codeBasedSelections[Number(index)]?.type, } - ), + }) + .filter((x?: Selection) => x !== undefined) as Selection[] + + return { + codeBasedSelections: + newSelections.length > 0 + ? newSelections + : prevSelectionRanges.codeBasedSelections, + otherSelections: prevSelectionRanges.otherSelections, } } diff --git a/src/lib/settings/settingsUtils.ts b/src/lib/settings/settingsUtils.ts index 59c2ebc51..daf4af47e 100644 --- a/src/lib/settings/settingsUtils.ts +++ b/src/lib/settings/settingsUtils.ts @@ -1,6 +1,7 @@ import { Setting, createSettings, settings } from 'lib/settings/initialSettings' import { SaveSettingsPayload, SettingsLevel } from './settingsTypes' import { isTauri } from 'lib/isTauri' +import { err } from 'lib/trap' import { defaultAppSettings, defaultProjectSettings, @@ -101,7 +102,7 @@ function localStorageProjectSettingsPath() { return '/' + BROWSER_PROJECT_NAME + '/project.toml' } -export function readLocalStorageAppSettingsFile(): Configuration { +export function readLocalStorageAppSettingsFile(): Configuration | Error { // TODO: Remove backwards compatibility after a few releases. let stored = localStorage.getItem(localStorageAppSettingsPath()) ?? @@ -116,12 +117,16 @@ export function readLocalStorageAppSettingsFile(): Configuration { return parseAppSettings(stored) } catch (e) { const settings = defaultAppSettings() - localStorage.setItem(localStorageAppSettingsPath(), tomlStringify(settings)) + if (err(settings)) return settings + const tomlStr = tomlStringify(settings) + if (err(tomlStr)) return tomlStr + + localStorage.setItem(localStorageAppSettingsPath(), tomlStr) return settings } } -function readLocalStorageProjectSettingsFile(): ProjectConfiguration { +function readLocalStorageProjectSettingsFile(): ProjectConfiguration | Error { // TODO: Remove backwards compatibility after a few releases. let stored = localStorage.getItem(localStorageProjectSettingsPath()) ?? '' @@ -129,15 +134,16 @@ function readLocalStorageProjectSettingsFile(): ProjectConfiguration { return defaultProjectSettings() } - try { - return parseProjectSettings(stored) - } catch (e) { + const projectSettings = parseProjectSettings(stored) + if (err(projectSettings)) { const settings = defaultProjectSettings() - localStorage.setItem( - localStorageProjectSettingsPath(), - tomlStringify(settings) - ) + const tomlStr = tomlStringify(settings) + if (err(tomlStr)) return tomlStr + + localStorage.setItem(localStorageProjectSettingsPath(), tomlStr) return settings + } else { + return projectSettings } } @@ -161,6 +167,9 @@ export async function loadAndValidateSettings( const appSettings = inTauri ? await readAppSettingsFile() : readLocalStorageAppSettingsFile() + + if (err(appSettings)) return Promise.reject(appSettings) + // Convert the app settings to the JS settings format. const appSettingsPayload = configurationToSettingsPayload(appSettings) setSettingsAtLevel(settings, 'user', appSettingsPayload) @@ -171,6 +180,9 @@ export async function loadAndValidateSettings( ? await readProjectSettingsFile(projectPath) : readLocalStorageProjectSettingsFile() + if (err(projectSettings)) + return Promise.reject(new Error('Invalid project settings')) + const projectSettingsPayload = projectConfigurationToSettingsPayload(projectSettings) setSettingsAtLevel(settings, 'project', projectSettingsPayload) @@ -191,17 +203,20 @@ export async function saveSettings( // Get the user settings. const jsAppSettings = getChangedSettingsAtLevel(allSettings, 'user') const tomlString = tomlStringify({ settings: jsAppSettings }) + if (err(tomlString)) return + // Parse this as a Configuration. const appSettings = parseAppSettings(tomlString) + if (err(appSettings)) return + + const tomlString2 = tomlStringify(appSettings) + if (err(tomlString2)) return // Write the app settings. if (inTauri) { await writeAppSettingsFile(appSettings) } else { - localStorage.setItem( - localStorageAppSettingsPath(), - tomlStringify(appSettings) - ) + localStorage.setItem(localStorageAppSettingsPath(), tomlString2) } if (!projectPath) { @@ -212,17 +227,21 @@ export async function saveSettings( // Get the project settings. const jsProjectSettings = getChangedSettingsAtLevel(allSettings, 'project') const projectTomlString = tomlStringify({ settings: jsProjectSettings }) + if (err(projectTomlString)) return + // Parse this as a Configuration. const projectSettings = parseProjectSettings(projectTomlString) + if (err(projectSettings)) return + + const tomlStr = tomlStringify(projectSettings) + + if (err(tomlStr)) return // Write the project settings. if (inTauri) { await writeProjectSettingsFile(projectPath, projectSettings) } else { - localStorage.setItem( - localStorageProjectSettingsPath(), - tomlStringify(projectSettings) - ) + localStorage.setItem(localStorageProjectSettingsPath(), tomlStr) } } diff --git a/src/lib/testHelpers.ts b/src/lib/testHelpers.ts index 02356cf5a..eabfb6a0e 100644 --- a/src/lib/testHelpers.ts +++ b/src/lib/testHelpers.ts @@ -6,6 +6,7 @@ import { import { Models } from '@kittycad/lib' import { v4 as uuidv4 } from 'uuid' import { DefaultPlanes } from 'wasm-lib/kcl/bindings/DefaultPlanes' +import { err } from 'lib/trap' type WebSocketResponse = Models['WebSocketResponse_type'] @@ -56,13 +57,13 @@ class MockEngineCommandManager { commandStr: string ): Promise { if (id === undefined) { - throw new Error('id is undefined') + return Promise.reject(new Error('id is undefined')) } if (rangeStr === undefined) { - throw new Error('rangeStr is undefined') + return Promise.reject(new Error('rangeStr is undefined')) } if (commandStr === undefined) { - throw new Error('commandStr is undefined') + return Promise.reject(new Error('commandStr is undefined')) } const command: EngineCommand = JSON.parse(commandStr) const range: SourceRange = JSON.parse(rangeStr) @@ -73,9 +74,12 @@ class MockEngineCommandManager { } export async function enginelessExecutor( - ast: Program, - pm: ProgramMemory = { root: {}, return: null } + ast: Program | Error, + pm: ProgramMemory | Error = { root: {}, return: null } ): Promise { + if (err(ast)) return Promise.reject(ast) + if (err(pm)) return Promise.reject(pm) + const mockEngineCommandManager = new MockEngineCommandManager({ setIsStreamReady: () => {}, setMediaStream: () => {}, diff --git a/src/lib/trap.ts b/src/lib/trap.ts new file mode 100644 index 000000000..449e93770 --- /dev/null +++ b/src/lib/trap.ts @@ -0,0 +1,48 @@ +import toast from 'react-hot-toast' + +type ExcludeErr = Exclude + +// Used to bubble errors up +export function err(value: ExcludeErr | Error): value is Error { + if (!(value instanceof Error)) { + return false + } + + return true +} + +/** Takes array of maybe error and types narrows them into + * @returns [hasErr, arrayWithoutErr, arrayWithErr] + */ +export function cleanErrs( + value: Array | Error> +): [boolean, Array>, Array] { + const argsWOutErr: Array> = [] + const argsWErr: Array = [] + for (const v of value) { + if (err(v)) { + argsWErr.push(v) + } else { + argsWOutErr.push(v) + } + } + return [argsWOutErr.length !== value.length, argsWOutErr, argsWErr] +} + +// Used to report errors to user at a certain point in execution +export function trap( + value: ExcludeErr | Error, + opts?: { + altErr?: Error + suppress?: boolean + } +): value is Error { + if (!err(value)) { + return false + } + + console.error(value) + opts?.suppress || + toast.error((opts?.altErr ?? value ?? new Error('Unknown')).toString()) + return true +} diff --git a/src/lib/useCalculateKclExpression.ts b/src/lib/useCalculateKclExpression.ts index 60dd3f282..333474221 100644 --- a/src/lib/useCalculateKclExpression.ts +++ b/src/lib/useCalculateKclExpression.ts @@ -6,6 +6,7 @@ import { PrevVariable, findAllPreviousVariables } from 'lang/queryAst' import { Value, parse } from 'lang/wasm' import { useEffect, useRef, useState } from 'react' import { executeAst } from 'useStore' +import { trap } from 'lib/trap' const isValidVariableName = (name: string) => /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name) @@ -85,6 +86,8 @@ export function useCalculateKclExpression({ const execAstAndSetResult = async () => { const _code = `const __result__ = ${value}` const ast = parse(_code) + if (trap(ast, { suppress: true })) return + const _programMem: any = { root: {}, return: null } availableVarInfo.variables.forEach(({ key, value }) => { _programMem.root[key] = { type: 'userVal', value, __meta: [] } diff --git a/src/machines/authMachine.ts b/src/machines/authMachine.ts index d08c039e2..547a0e4c8 100644 --- a/src/machines/authMachine.ts +++ b/src/machines/authMachine.ts @@ -123,7 +123,7 @@ async function getUser(context: UserContext) { 'Content-Type': 'application/json', } - if (!token && isTauri()) throw new Error('No token found') + if (!token && isTauri()) return Promise.reject(new Error('No token found')) if (token) headers['Authorization'] = `Bearer ${context.token}` if (SKIP_AUTH) @@ -144,7 +144,7 @@ async function getUser(context: UserContext) { const user = await userPromise - if ('error_code' in user) throw new Error(user.message) + if ('error_code' in user) return Promise.reject(new Error(user.message)) return { user: user as Models['User_type'], diff --git a/src/machines/commandBarMachine.ts b/src/machines/commandBarMachine.ts index 20e64d441..d3491dde6 100644 --- a/src/machines/commandBarMachine.ts +++ b/src/machines/commandBarMachine.ts @@ -501,7 +501,7 @@ export const commandBarMachine = createMachine( } } catch (e) { console.error('Error validating argument', context, e) - throw e + return reject(e) } } diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index fcfc0bdf7..da1076f6d 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -43,6 +43,7 @@ import { } from 'components/Toolbar/SetAbsDistance' import { Models } from '@kittycad/lib/dist/types/src' import { ModelingCommandSchema } from 'lib/commandBarConfigs/modelingCommandConfig' +import { err, trap } from 'lib/trap' import { DefaultPlaneStr } from 'clientSideScene/sceneEntities' import { Vector3 } from 'three' import { quaternionFromUpNForward } from 'clientSideScene/helpers' @@ -191,10 +192,6 @@ export type ModelingMachineEvent = type: 'done.invoke.animate-to-face' | 'done.invoke.animate-to-sketch' data: SketchDetails } - | { - type: 'done.invoke.get-convert-to-variable-info' - data: PathToNode - } | { type: 'Set mouse state'; data: MouseState } | { type: 'Set Segment Overlays' @@ -219,7 +216,7 @@ export type MoveDesc = { line: number; snippet: string } export const modelingMachine = createMachine( { - /** @xstate-layout N4IgpgJg5mDOIC5QFkD2EwBsCWA7KAxAMICGuAxlgNoAMAuoqAA6qzYAu2qujIAHogC0ANhoAWAHQB2GgE4ATLNEAOAKwBGAMyzNAGhABPRFNWaJmscOXyp61aplWAvk-1oMOfAQDKYdgAJYLDByTm5aBiQQFjYwniiBBEFlK2l1Gil5UxpreTEpfSMEeTyJYU0reW1hVRTxYRc3dCw8Ql8AgFtUAFcgwPYSdjAI3hiOLnjQROTlGgl5ZUWxDK0ZVVlCxE1VOfXxGlUq2R1NKUaQdxavdv9fKA6wXACAeQA3MAAnTBIDWBGosZxXiJGibBA0c6XTxQCTYCCYMAEACiT0+gQA1n5yAALf7MVjjbjAoTyYRSCTqUk6NSadSyMTyMGabQSZQ6dn2CwaM6uC7NaGw+GIlFDD4YrG49SRfGxCbEpJ5OZidSiOw5TQ5DJg5byCQKKQ1SlWLTKFWQ-mtQUI5F8dgfboYPHRAlAhJCezkxQHYSyVRiWrqMHqNXzFJs33ienK80eS1w61IvgsD7sJ2AuVuhWLUOKkrqMT02pgqS2MomCw1WY2f0xq4w7yY9g44hkSiYBsStMujNTRDBlIUjJiMSzWbaTSMwx99Smikz01aGgz2q1gUdpvYggAEWCQ0CYHuj1T9FG3aJmYNygkI4qWWZwjyw+16wkDkyPsU6yq+dXlvXzfIZp-EgDh-AgboPlacUNy7WVz17BAtH9ClhxqTRclUYQnynBB6WEaRMiqB9hCsGlf3wCR-2xSjGxxABJIUCGQEhMX3Q8nn8d4U2wcgSEwWDCUmfg+0UdQKWsZR8isHUChw-MtHMGglKyUwbGUCxyPrWjqKohjrWY1ignYgJsVQSCAC9uAGfiTwBM8hMSSkpEkFRRA0JyyUnIotGDV9-RkFVaQOQ5NJoiUwo3PTESIbhYDtEg8H8UyLKsviwOwOLW2GWyZUE+VKT9CRxCqOR1ILecwSOfDgp2cR1mDTRQqoiL6MYmLcDij4EtwTjPk4XjMHSzKKGy6VnTghyRNSX0Fg0LD0kkrzEBKKQzEOZVJJLd8-Sa7SWuxKLiFi+LEoAQQAIW8fwAA0BNdBDKTUa9Tg0AtaUUKpKt9SRfTJWYaCyWRVsa3koT-PbdLa46urOy7-AATTunthMQ2b5gZFUsjsGoHyZHIr0yew5pyZyxF28LIetdrOu6-wyCgBEkfglGkLMdD0NmqRTSkDYcKyDJ5lqN8TDJY4eSaWMKOaynouh2mEXwdhcRy8a8szLRTnMHG5C0b9VEq4QZ2kH1lR54d1LJcmN32w7qZOnqmE+R3cAgHjum+MVXeGygmcm1GFmvY53uWGdRGESrTUkWxZDZEtH3yVQrZxG2oY6+2krM7BLKePjMAMOmcCgXBffy0ldTUSSaX9ZZyiDOb5l9TbMhF5kk507TbblxKuP63P8747Ai5L9WbFkZ6Fh5ubtA0IMH1UV9Y5jyoY9WtuU6pruetgXASCYfx2FQG7h4e2kzFJdCciB6xtEq4r5iyEiSIOZRCLXmWjrTmGt53veD4R4+WanyKgaWkJZTjpDEJVfM5I-Qv0BuoZyWEQYSzrPtdestP60zAAAR26GlBWUAlYAMcooNa0CeZrDvLJbyq0lQag1EpTCmFZBvw7qnGmiUmAkC6pgBENkxrpmZo5Cc5IAYkRnCUfU8hAxyXpOSQ2Sk7CLFHCw0GFopYQzYRvTBiUPhgC6O8fwgEdFPD+CrQRftKQjjKFYzCCxlS1D0HJdSYklwfnEMyHID5WESkOgAJTAIIMAfAQjdCGMQvshwryYXQqYTCD5pHUL7DQbYz05DbAsJYYM4s+SSy0hTLRwpcHYD3gAGTwGAfeqBUD8NPBNfKbJ8KmAqAWX0FhFhgnUvPHYmQGRZEsO5HxkVGJImKb-emR5sBpW4eQKpETigFWvHIA4bSKxOO8pfQWpgw5LwOMg3JqDpaFORGM-wejQj0wRFUmp8ybATj1LMBkw4kJ2CSajWo14XnzWDLIGgDQ1F5LQe-QCGBgKuwCOBSC+BoI4nmUhee+Z-KYQZNYMEMcrzMmVLSOwtIY5kwBYczRvjU49yqZxbhUyABGjNzH2XytsXUZIZwjiyXISBOEJwC2VBkcMig2SJwJWuPap0ADuCUTKZ2ztZIaAwRr+DwAAM1QAQCA3AwCwlwK8VAmIJAwHYIIZKWdUqYEEIq1AtyNSSFQssIG2ggarUqsqMeagFjfg-JhHJYMNHhVFeKjOKUc6DS9rKyg8rcBKoIJ8D4ZkJBMG+OwJVHwOi6r8AayVxrTXhvNbS+pmYSoIsRQ1f0CwgaVQ5kVGuSkGUGnUGvX1oEe48TSsGrKYaI2qtwOqvAWqdV6sEI2gamalUWspBSU4poUlMv1JVBYZgX6HEOBrBB8g61iobX1JtQaMohsqWayNHxo0fFjfGxNya+0Dr4kO7NAi6V5veqyA4JhZAINqOyooJQGQUm1lURYCx1Krr9RdK61023Ko7V2zV2r1V9pIJS2Agg+BXpHfhA08hlJ3iLHzJQup8ziBVGICcD5V6CvBj6tdAQgM3VA-uw9x7BinpTfq2D8HENmpHeSAj6Eum-NgV9FU5hahoQgc5VRKChVkcA3DeG1HwMap7dB1NzHBAGCQzmtWCE3UCYcPYBQOhnL6w5X8jjMcIyOIOPisTpHrb1oo1J6jUaY1xvo2ZM9im4PKdUze3NGnQFFRsOUd85RlThw5fhoqPoSIlA0KcFdJHvXWfI3TfAVy92ye7VBxjghLmBLY2p+6KNvzkg1A1BdxwZ583sPhHQBwlx2EEyWADoFsv2YPY5k9LnMvZc83U9TBXaQEzwwsSkl8EGVW5HObYMh+aHEtnF-JCW-UEKVjJtVcmMt9qW9ibrdlvN9bsOPbQpsGQAzeaSJ6fzmQIIqAgykjWAibZa7RpzCaOsbceIQrbuWvO9cSJp9IKSAzSUyAbT9kWRxyLfJhO7-hHYfGdq7cg7tuEytbal1b6Xe2pth-Dt2HtBAtpGtt3K+Xftlz1I4vICTKgGffdYee4DLA1DK3eaH2PHgI6R57bdqOs00ba85pNmW2cu1x9w-H3PCdfZ6yT5aZPG4TksCUanlUtrmFsIz9YM1TBr3KZ265mATndBKfvCZTwpmDRmXMvLyNfs8yq5HGQBG9M6DRVzJZtIRw1HfDOHXFT9eG+N+c2VDNKkHxudboRy1Vq6hjsVZ5FgVRBjQ2PMkPpaQmysPsr183k669D9UzAEg6K4A4AQW5RFWSxJnGywGYJjTzHQuyFJJYFBZ-UTn6ief9dF5L+wMvUppc29l5kV8ANTTzTQz6YsPNrzlFMAoZhjDfd67D4XgAcofAACqgPA7BYAEFOhACA-RuEBBYLv25JEfrenWCiv5b7EAkTHk7ihPL1LKGX-nmpEgN-+G37v-fUgEaWpHbH7PsSSMeFJH9ZPEcWoZQYsJcQOQ2E4R6coNeYvUvOFNxa8NQGQCoA4GApPZkWfVDMOMRaMObNBDAvvKgAfUAmXRCA4MSNkZZSwTlJcB-VGZ9aQKuQ2UkN6f5SzeLZOAAFVN04GmQ+FmQPgDzKT91X0v2HDSS5nWB2FxhwjwgIhKEmyUiwlmyEI7wkG6BdkPkyhTComeFwBVXR0gx1VOm8BEMEGMNVUEDMPYAsOLgj0sWZGiTuWfURW2ByDBFqDmCUDpByHyHZlODXgCQuWSy-0LxsygkzigDwAPyPzORCGDyuRSLwHmWxXwhSHKF+UUG+hkW8ksGdWOCXB5igMrDXnIARDIECHjURDhWVBchqhdXzGaSDAaiKj+XSCvjtVu0oOahsyMW4FJT-leApVg2tDS1sIU31WMR7kEAPn7TmOpRyyzXLxMDnEjHHXSENhpy2GkTHjpCfnpDZFsWh1WL6jJVmMgnmMRAcyPWewYz7XuJTHWNQE2OeO2KJ1VgYJKBfiKmXCqFATq1OIQE8TZhVGOAUDqFHDuM3kyIMUqWMQ4VMWsM7TWx1RcKxPtkED0QxMECJK-mPG+xBOrHMB0AIxnAQUV04IkSjhqFQl-WKliwMLQQmIpNpkNSlT7lxIg3kwkEJM3jTQDWsjzgtUQPWB9FvxSSxSDGK2kH2AthMGYUEIOXEwW1An5O7g3QGjzhFPxPVQlJMX7WNL7jlLHg+jyHpH7GcngLkjtWvFBLZA-RNDb0BXGMS0NJ6kFONTzgLkHisMWLFMtOxKlKNUDTziy0Lk8OpKH2KA+lfDqwfknVsDrhyD1FQhehHFNAWFRJMV6m4hNP7iTLNIxwtL+MDOtIrL7kTPDL2KtT9HwyUnv3KL7FEEkAqHvHWhdOfVLOxMCB-jJWuhrKWPFPrMlO3l3l+IQzlLmDn1sG2Ccn9FvlSUpEfBiWqxCjGOFQDLRIXN-kPnhmnKjLnKtLPKXIMDlPwnyBnBkDHCySgVJHMBKA+hHEuJ1Oz15JPLLJwTwUGk2yvIy2jOJJAsvU23L24IUATnzCvjUBCxoX4zVAfDUHzAnl9MJQkwNLRK4R4T4QgoJJvJjOItzmoC8PlBKivF+T+hUjfFdO8mpAb1WhfgcQ0DUDbn8FwEPgVRIEoB8GCFCDAjACEvdjP2+E7XmUEGkTEhnDwgqFT2kRhLQmkE10xQjAB1CjIGwA6EGCgj-ic07TIvVQMqMqGCXKEp9loszHsCUqBiiQI1EBULr3sHmFECrWcm9BKH0pL2spMsPmCW3SglgG0gsokCssGECQ2Mis7AcoQjnj8yIxjjsAI2B1CyvBIk4qUEWDkQ-3OAEowHgCiGz0H0jySAi1fFFk4v9E2iDE-SyTZF-Iyv61CnjDACqr9hEGsQ9VtUklfTeUWDEmyFNFMEpGK1E11KsxxF6vlAKpwIcEnQILZRnTHjCOfTwzqA-CGVagREWvVmWDPiBnyCRP8hjj6PpBQmmou1OBSTwr1OTgmODMDRRzlTNWOoejDGvBtS5lsBsCmzLQUHMH9AYSfxsFrSPIIoCAvS3W9l3SzR+pZl-S-UUQyQfGfRnR2D8w2nzBIicuh0oxA2+voNTOUrMHVEpB0AfH+15nfR0DEn9D+lVDcmsBJrs3JuJ0pq9NfHsX62KjxhqHviJifV-VmoAv9L9Wax5uBL5t9DKAYU4xjkOBdwqzzOvjUEwgyAfG2Ghwe3losQaV+XdyYVNDppIgNgqGkGfRXlFlZuevmuogmOFw5w9k+tDWNtvV+swjtpqAiMjHKHWSj1nGjjUGfQ9CUE-311Rt+3SGpuBjUALEWCsGCNnHZFmD9G0COGduEM73kILx7w4HjuWjsFcWTr9HRXTpwg-C-SCzYN+UqNjtXwkAEqTT4jLuKALA4zAS9DHBKAQJZu2suwWHKG5LmoLokC7zbt-3-1MW7ryFMFDA9wnQnAHOLAfFDGDB8hfiwlNHQN727vSBfCwj9EVHZmfRZMZLnDGsXGXGKp5OajEPwEmUkOkNQCXtqFEQ5ieWIkJqDD+XniwhcpXgyGOEnulr2mcNMIGHMO0ksJPqsDHjiVgLn3UkUGCMsFnzpGXo9VQpiKyOa1XyXpLHtxVFqKJgV1VNSTtRSTVpyBXFhutliOyISIkCSOhSCGMWP0Ag+E7Q+CXusB+nHyoc5DyFniUIhqsCXBTosynsMLYZIeLq4agH8FyKEhNrzVQukALDQ1HjKOap9FZGqIQV+UI2Yefr2kaLAGaNgFaJPvHD8lKN6QnAUCAfKD1Dcn5lsB9FLOmMPieKpSOopuquXEKKUkasuycqZBKDmAyRmkLGQKfsUcAr9UDPRNQEMUDL3xPskjnSUA3snhIlDsQmLL1AUA8XvyknzsML5LRPeplKKF5vCYKdMYntOF+gnqTzZD1A1G0ywjkEhNHPTgRrznyYIw6eKe6YnFVKBlZB6OknyABmiJYdeqArHKab7jDKLkmcKbnydOKJSGaoWZuyNAfh6U9Xb3ScIrLPGarPDP2emdv0CnRTrjBtqBjhKkp20NGa-nHN3knPyf9v+hsBLVsGRVviqHBrZAsAsGub9OPIydPInL-nhhBciZOwhexk4OkQDmZESXM3xl4vWdds2fThgrAveyVmecaW2COe0BObkh9A43oQkf3vsH+dpiot4SwBBYRWHAyW0B5h7MQgUCfKGaqC5nEEIbJf4sEuEp6rCb6shLKFqAMYZCwgMe1FWkFmxqIxAR0ECsMuMuhVMtkuVdacsS8e+ZHBAQcCZbQsf0OAeUDvhbfCgZudis4HNdCr4HCu4e0hPoWYNC5m0K5jJHEDeXTzpMO0WFOENhMBcBcCAA */ + /** @xstate-layout N4IgpgJg5mDOIC5QFkD2EwBsCWA7KAxAMICGuAxlgNoAMAuoqAA6qzYAu2qujIAHogC0ANhoAWAHQB2GgE4ATLNEAOAKwBGAMyzNAGhABPRFNWaJmscOXyp61aplWAvk-1oMOfAQDKYdgAJYLDByTm5aBiQQFjYwniiBBEFlK2l1Gil5UxpreTEpfSMEeTyJYU0reW1hVRTxYRc3dCw8Ql8AgFtUAFcgwPYSdjAI3hiOLnjQROTlGgl5ZUWxDK0ZVVlCxE1VOfXxGlUq2R1NKUaQdxavdv9fKA6wXACAeQA3MAAnTBIDWBGosZxXiJGibBA0c6XTxQCTYCCYMAEACiT0+gQA1n5yAALf7MVjjbjAoTyYRSCTqUk6NSadSyMTyMGabQSZQ6dn2CwaM6uC7NaGw+GIlFDD4YrG49SRfGxCbEpJ5OZidSiOw5TQ5DJg5byCQKKQ1SlWLTKFWQ-mtQUI5F8dgfboYPHRAlAhJCezkxQHYSyVRiWrqMHqNXzFJs33ienK80eS1w61IvgsD7sJ2AuVuhWLUOKkrqMT02pgqS2MomCw1WY2f0xq4w7yY9g44hkSiYBsStMujNTRDBlIUjJiMSzWbaTSMwx99Smikz01aGgz2q1gUdpvYggAEWCQ0CYHuj1T9FG3aJmYNygkI4qWWZwjyw+16wkDkyPsU6yq+dXlvXzfIZp-EgDh-AgboPlacUNy7WVz17BAtH9ClhxqTRclUYQnynBB6WEaRMiqB9hCsGlf3wCR-2xSjGxxABJIUCGQEhMX3Q8nn8d4U2wcgSEwWDCUmfg+0UdQKWsZR8isHUChw-MtHMGglKyUwbGUCxyPrWjqKohjrWY1ignYgJsVQSCAC9uAGfiTwBM8hMSSkpEkFRRA0JyyUnIotGDV9-RkFVaQOQ5NJoiUwo3PTESIbhYDtEg8H8UyLKsviwOwOLW2GWyZUE+VKT9CRxCqOR1ILecwSOfDgp2cR1mDTRQqoiL6MYmLcDij4EtwTjPk4XjMHSzKKGy6VnTghyRNSX0Fg0LD0kkrzEBKKQzEOZVJJLd8-Sa7SWuxKLiFi+LEoAQQAIW8fwAA0BNdBDKTUa9Tg0AtaUUKpKt9SRfTJWYaCyWRVsa3koT-PbdLa46urOy7-AATTunthMQ2b5gZFUsjsGoHyZHIr0yew5pyZyxF28LIetdrOu6-wyCgBEkfglGkLMdD0NmqRTSkDYcKyDJ5lqN8TDJY4eSaWMKOaynouh2mEXwdhcRy8a8szLRTnMHG5C0b9VEq4QZ2kH1lR54d1LJcmN32w7qZOnqmE+R3cAgHjum+MVXeGygmcm1GFmvY53uWGdRGESrTUkWxZDZEtH3yVQrZxG2oY6+2krM7BLKePjMAMOmcCgXBffy0ldTUSSaX9ZZyiDOb5l9TbMhF5kk507TbblxKuP63P8747Ai5L9WbFkZ6Fh5ubtA0IMH1UV9Y5jyoY9WtuU6pruetgXASCYfx2FQG7h4e2kzFJdCciB6xtEq4r5iyEiSIOZRCLXmWjrTmGt53veD4R4+WanyKgaWkJZTjpDEJVfM5I-Qv0BuoZyWEQYSzrPtdestP60zAAAR26GlBWUAlYAMcooNa0CeZrDvLJbyq0lQag1EpTCmFZBvw7qnGmiUmAkC6pgBENkxrpmZo5Cc5IAYkRnCUfU8hAxyXpOSQ2Sk7CLFHCw0GFopYQzYRvTBiUPhgC6O8fwgEdFPD+CrQRftKQjjKFYzCCxlS1D0HJdSYklwfnEMyHID5WESkOgAJTAIIMAfAQjdCGMQvshwryYXQqYTCD5pHUL7DQbYz05DbAsJYYM4s+SSy0hTLRwpcHYD3gAGTwGAfeqBUD8NPBNfKbJ8KmAqAWX0FhFhgnUvPHYmQGRZEsO5HxkVGJImKb-emR5sBpW4eQKpETigFWvHIA4bSKxOO8pfQWpgw5LwOMg3JqDpaFORGM-wejQj0wRFUmp8ybATj1LMBkw4kJ2CSajWo14XnzWDLIGgDQ1F5LQe-QCGBgKuwCOBSC+BoI4nmUhee+Z-KYQZNYMEMcrzMmVLSOwtIY5kwBYczRvjU49yqZxbhUyABGjNzH2XytsXUZIZwjiyXISBOEJwC2VBkcMig2SJwJWuPap0ADuCUTKZ2ztZIaAwRr+DwAAM1QAQCA3AwCwlwK8VAmIJAwHYIIZKWdUqYEEIq1AtyNSSFQssIG2ggarUqsqMeagFjfg-JhHJYMNHhVFeKjOKUc6DS9rKyg8rcBKoIJ8D4ZkJBMG+OwJVHwOi6r8AayVxrTXhvNbS+pmYSoIsRQ1f0CwgaVQ5kVGuSkGUGnUGvX1oEe48TSsGrKYaI2qtwOqvAWqdV6sEI2gamalUWspBSU4poUlMv1JVBYZgX6HEOBrBB8g61iobX1JtQaMohsqWayNHxo0fFjfGxNya+0Dr4kO7NAi6V5veqyA4JhZAINqOyooJQGQUm1lURYCx1Krr9RdK61023Ko7V2zV2r1V9pIJS2Agg+BXpHfhA08hlJ3iLHzJQup8ziBVGICcD5V6CvBj6tdAQgM3VA-uw9x7BinpTfq2D8HENmpHeSAj6Eum-NgV9FU5hahoQgc5VRKChVkcA3DeG1HwMap7dB1NzHBAGCQzmtWCE3UCYcPYBQOhnL6w5X8jjMcIyOIOPisTpHrb1oo1J6jUaY1xvo2ZM9im4PKdUze3NGnQFFRsOUd85RlThw5fhoqPoSIlA0KcFdJHvXWfI3TfAVy92ye7VBxjghLmBLY2p+6KNvzkg1A1BdxwZ583sPhHQBwlx2EEyWADoFsv2YPY5k9LnMvZc83U9TBXaQEzwwsSkl8EGVW5HObYMh+aHEtnF-JCW-UEKVjJtVcmMt9qW9ibrdlvN9bsOPbQpsGQAzeaSJ6fzmQIIqAgykjWAibZa7RpzCaOsbceIQrbuWvO9cSJp9IKSAzSUyAbT9kWRxyLfJhO7-hHYfGdq7cg7tuEytbal1b6Xe2pth-Dt2HtBAtpGtt3K+Xftlz1I4vICTKgGffdYee4DLA1DK3eaH2PHgI6R57bdqOs00ba85pNmW2cu1x9w-H3PCdfZ6yT5aZPG4TksCUanlUtrmFsIz9YM1TBr3KZ265mATndBKfvCZTwpmDRmXMvLyNfs8yq5HGQBG9M6DRVzJZtIRw1HfDOHXFT9eG+N+c2VDNKkHxudboRy1Vq6hjsVZ5FgVRBjQ2PMkPpaQmysPsr183k669D9UzAEg6K4A4AQW5RFWSxJnGywGYJjTzHQuyFJJYFBZ-UTn6ief9dF5L+wMvUppc29l5kV8ANTTzTQz6YsPNrzlFMAoZhjDfd67D4XgAcofAACqgPA7BYAEFOhACA-RuEBBYLv25JEfrenWCiv5b7EAkTHk7ihPL1LKGX-nmpEgN-+G37v-fUgEaWpHbH7PsSSMeFJH9ZPEcWoZQYsJcQOQ2E4R6coNeYvUvOFNxa8NQGQCoA4GApPZkWfVDMOMRaMObNBDAvvKgAfUAmXRCA4MSNkZZSwTlJcB-VGZ9aQKuQ2UkN6f5SzeLZOAAFVN04GmQ+FmQPgDzKT91X0v2HDSS5nWB2FxhwjwgIhKEmyUiwlmyEI7wkG6BdkPkyhTComeFwBVXR0gx1VOm8BEMEGMNVUEDMPYAsOLgj0sWZGiTuWfURW2ByDBFqDmCUDpByHyHZlODXgCQuWSy-0LxsygkzigDwAPyPzORCGDyuRSLwHmWxXwhSHKF+UUG+hkW8ksGdWOCXB5igMrDXnIARDIECHjURDhWVBchqhdXzGaSDAaiKj+XSCvjtVu0oOahsyMW4FJT-leApVg2tDS1sIU31WMR7kEAPn7TmOpRyyzXLxMDnEjHHXSENhpy2GkTHjpCfnpDZFsWh1WL6jJVmMgnmMRAcyPWewYz7XuJTHWNQE2OeO2KJ1VgYMkSVBLB9ExiXAqDeWZBfGsFsBnFhJLHyDuM3kyIMUqWMQ4VMWsM7TWx1RcKxPtkED0QxMECJK-mPG+xBOrHMB0AIxnAQUV04IkSjhqFQl-WKliwMLQQmIpNpkNSlT7lxIg3kwkEJM3jTQDWsjzgtUQPWB9FvxSSxSDGK2kH2AthMGYUEIOXEwW1An5O7g3QGjzhFPxPVQlJMX7WNL7jlLHg+jyHpH7GcngLkjtWvBKEWAUDyBNDb0BXGMS0NJ6kFONTzgLkHisMWLFMtOxKlKNUDTziy0Lk8OpKH2KA+lfDqwfknVsDrhyD1FQhehHFNAWFRJMV6m4hNP7mTLNIxwtL+KDOtMrL7iTIjL2KtT9HwyUnv3KL7FEEkAqHvHWhdOfTLOxMCB-jJWulrKWPFIbMlO3l3l+IQzlLmDn1sG2Ccn9FvlSUpEfBiWqxCjGOFUDLRMXN-kPnhhnOjPnKtPPOXIMDlPwnyBnBkDHCySgVJHMBKA+hHEuJ1Oz15NPPLJwTwUGk22vIyxjOJNAsvU23L24IUATnzCvjUBCxoX4zVAfDUHzAnj9MJQkwNLRK4R4T4UgoJNvNjJItzmoC8PlBKivF+T+hUjfFdO8mpAb1WhfgcQ0DUDbn8FwEPgVRIEoB8GCFCDAjAGEvdjP2+E7XmUEGkTEhnDwgqFT2kVOIQDQmkE10xQjAB1CjIGwA6EGCgj-ic07XIvVSMpMqGGXOEp9joszHsGUqBiiQI1EBULr3sHmFECrWcm9BKEMpL1srMsPmCW3SglgG0isokBssGECQ2Ois7CcoQjnj8yIxjjsAI2B1CyvBIi4qUC9PyA-3OEEowHgCiGz0H0jySAi1fFFi4v9E2iDE-SyUaRuIgVE11LjCFBqr9hEGsQ9VtUklfTeUWDEmyFNFMEpGK26sAqon6vlCKpwIcEnQILZRnTHjCK9NUNOCXCGVagRCWvVmWDPiBnyAUFGp5jYunHpBQlmou32tbmPMIolWlObQl1DTNROoejDGvBtS5lsBsCmzLQUHMH9AYSfxsFrVev1ICAvS3W9l3SzV+pZl-S-UUQyQfGfRnR2D8w2nzBIhcuh0oxAx+voLTJUrMHVEpB0AfH+15nfR0DEn9D+lVDcmsFJrswpuJyprZF1Hcv62KjxhqHviJifV-XmvbyAr9Wa15uBP5t9DKAYU4xjkOBdwq3zOvjUEwgyAfG2GhwewVosQaV+XdyYVNHppIgNgqGkGfRXlFjZvwr1OTgmOFw5w9hRzlRNtvT+swntpqAiMjHKHWSj1nGjjUGfQ9CUE-31zRt+3SBpuBjUALEWCsGCNnHZBb3fF0M9Rluai71Xx7w4ATuWjsFcRTr9HRQzpwg-C-SCzYN+UqLjuLsEqTT4jLuKALA4zAS9DHBKAQNZrCJQIWHKG5J6uEM73kILx-y3x31MS7ryFMFDA9wnQnEHOLAfFDGDB8hfiwlNHQN7y7vSBfCwj9EVHZmfRZMZLnAmsXGXFKp5OajEPwEmUkOkNQCXtqFEQ5ieWIiJqDD+XniwjcpXgyGOAnoWr2mcNMIGHMO0ksJPqsDHjiVgLn3UkUGCMsFnzpGXo9TQpiKyOa1XyXvBIeRVFqKJgV1VNSTtTcTkB0xdqs2TliOyISIkCSOhSCGMWP0Ag+E7Q+CXusB+nHyoc5DyFniUMhqsCXFTos0nsMLYZIdnq4agH8FyKElNrzTQukALDQ1HjKNap9FZGqIQV+UIxXDhuTkaLAGaNgFaJPvHD8lKN6QnAUCAfKD1Dcn5lsB9DLOmMPieKpWOsptquXEKKUmasuxcqZBKDmAyRmkLGQKfsUdlqIvLNJNQEMSDL3xPskjnSUA3snhIjDsQhLL1AUA8XvykmYans4eAvHJDITKKD5vCYKdMfHtOF+nHqTzZD1A1G0ywjkCqDqcML5LRMRrznyYI06eKZ6YnFVKBlZB6OknyABmiOseogmfLOaZlOrIjJmcKbnydOKJSFauWZuyNAfh6Xzv9JPL9SDIrN7l4QOaLiObmdv0CnRTrnBtqBjhKkp20LHPTnPKnPyYDv+hsBLVsGRVviqAhrZAsAsDuYIvhsmPLLBb-nhghciZOxhexk4OkQDmZESXM3xj4q2YacebRNgvAveyVg+caW2FOe0HObkh9A43oQkf3vsBBa-hh24RoswAhYRWHAyW0B5l7MQgUGfOGaqC5nEEIa2YEqEpErAC7sUuIMrAMYZCwgMe1FWkFhxqIxAR0GCuMtMuhXMrko1bCcsS8YBZHBAQcDZfQsf0OAeSDuRbfCgZlvis4GtfCr4Eiu4e0hPuWYNC5m0K5jJHEBhP43HGuPUhrRMBcBcCAA */ id: 'Modeling', tsTypes: {} as import('./modelingMachine.typegen').Typegen0, @@ -580,7 +577,7 @@ export const modelingMachine = createMachine( onError: 'SketchIdle', onDone: { target: 'SketchIdle', - actions: 'Set sketchDetails', + actions: ['Set selection'], }, }, }, @@ -685,7 +682,7 @@ export const modelingMachine = createMachine( 'Delete segment': { internal: true, - actions: 'Delete segment', + actions: ['Delete segment', 'Set sketchDetails'], }, 'code edit during sketch': '.clean slate', }, @@ -777,9 +774,10 @@ export const modelingMachine = createMachine( kclManager.ast, sketchDetails.sketchPathToNode, 'VariableDeclarator' - ).node - if (variableDeclaration.type !== 'VariableDeclarator') return false - const pipeExpression = variableDeclaration.init + ) + if (err(variableDeclaration)) return false + if (variableDeclaration.node.type !== 'VariableDeclarator') return false + const pipeExpression = variableDeclaration.node.init if (pipeExpression.type !== 'PipeExpression') return false const hasStartProfileAt = pipeExpression.body.some( (item) => @@ -788,52 +786,119 @@ export const modelingMachine = createMachine( ) return hasStartProfileAt && pipeExpression.body.length > 2 }, - 'Can make selection horizontal': ({ selectionRanges }) => - horzVertInfo(selectionRanges, 'horizontal').enabled, - 'Can make selection vertical': ({ selectionRanges }) => - horzVertInfo(selectionRanges, 'vertical').enabled, - 'Can constrain horizontal distance': ({ selectionRanges }) => - horzVertDistanceInfo({ selectionRanges, constraint: 'setHorzDistance' }) - .enabled, - 'Can constrain vertical distance': ({ selectionRanges }) => - horzVertDistanceInfo({ selectionRanges, constraint: 'setVertDistance' }) - .enabled, - 'Can constrain ABS X': ({ selectionRanges }) => - absDistanceInfo({ selectionRanges, constraint: 'xAbs' }).enabled, - 'Can constrain ABS Y': ({ selectionRanges }) => - absDistanceInfo({ selectionRanges, constraint: 'yAbs' }).enabled, - 'Can constrain angle': ({ selectionRanges }) => - angleBetweenInfo({ selectionRanges }).enabled || - angleLengthInfo({ selectionRanges, angleOrLength: 'setAngle' }).enabled, - 'Can constrain length': ({ selectionRanges }) => - angleLengthInfo({ selectionRanges }).enabled, - 'Can constrain perpendicular distance': ({ selectionRanges }) => - intersectInfo({ selectionRanges }).enabled, - 'Can constrain horizontally align': ({ selectionRanges }) => - horzVertDistanceInfo({ selectionRanges, constraint: 'setHorzDistance' }) - .enabled, - 'Can constrain vertically align': ({ selectionRanges }) => - horzVertDistanceInfo({ selectionRanges, constraint: 'setHorzDistance' }) - .enabled, - 'Can constrain snap to X': ({ selectionRanges }) => - absDistanceInfo({ selectionRanges, constraint: 'snapToXAxis' }).enabled, - 'Can constrain snap to Y': ({ selectionRanges }) => - absDistanceInfo({ selectionRanges, constraint: 'snapToYAxis' }).enabled, - 'Can constrain equal length': ({ selectionRanges }) => - setEqualLengthInfo({ selectionRanges }).enabled, - 'Can canstrain parallel': ({ selectionRanges }) => - equalAngleInfo({ selectionRanges }).enabled, - 'Can constrain remove constraints': ({ selectionRanges }, { data }) => - removeConstrainingValuesInfo({ + 'Can make selection horizontal': ({ selectionRanges }) => { + const info = horzVertInfo(selectionRanges, 'horizontal') + if (trap(info)) return false + return info.enabled + }, + 'Can make selection vertical': ({ selectionRanges }) => { + const info = horzVertInfo(selectionRanges, 'vertical') + if (trap(info)) return false + return info.enabled + }, + 'Can constrain horizontal distance': ({ selectionRanges }) => { + const info = horzVertDistanceInfo({ + selectionRanges, + constraint: 'setHorzDistance', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain vertical distance': ({ selectionRanges }) => { + const info = horzVertDistanceInfo({ + selectionRanges, + constraint: 'setVertDistance', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain ABS X': ({ selectionRanges }) => { + const info = absDistanceInfo({ selectionRanges, constraint: 'xAbs' }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain ABS Y': ({ selectionRanges }) => { + const info = absDistanceInfo({ selectionRanges, constraint: 'yAbs' }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain angle': ({ selectionRanges }) => { + const angleBetween = angleBetweenInfo({ selectionRanges }) + if (trap(angleBetween)) return false + const angleLength = angleLengthInfo({ + selectionRanges, + angleOrLength: 'setAngle', + }) + if (trap(angleLength)) return false + return angleBetween.enabled || angleLength.enabled + }, + 'Can constrain length': ({ selectionRanges }) => { + const angleLength = angleLengthInfo({ selectionRanges }) + if (trap(angleLength)) return false + return angleLength.enabled + }, + 'Can constrain perpendicular distance': ({ selectionRanges }) => { + const info = intersectInfo({ selectionRanges }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain horizontally align': ({ selectionRanges }) => { + const info = horzVertDistanceInfo({ + selectionRanges, + constraint: 'setHorzDistance', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain vertically align': ({ selectionRanges }) => { + const info = horzVertDistanceInfo({ + selectionRanges, + constraint: 'setHorzDistance', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain snap to X': ({ selectionRanges }) => { + const info = absDistanceInfo({ + selectionRanges, + constraint: 'snapToXAxis', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain snap to Y': ({ selectionRanges }) => { + const info = absDistanceInfo({ + selectionRanges, + constraint: 'snapToYAxis', + }) + if (trap(info)) return false + return info.enabled + }, + 'Can constrain equal length': ({ selectionRanges }) => { + const info = setEqualLengthInfo({ selectionRanges }) + if (trap(info)) return false + return info.enabled + }, + 'Can canstrain parallel': ({ selectionRanges }) => { + const info = equalAngleInfo({ selectionRanges }) + if (err(info)) return false + return info.enabled + }, + 'Can constrain remove constraints': ({ selectionRanges }, { data }) => { + const info = removeConstrainingValuesInfo({ selectionRanges, pathToNodes: data && [data], - }).enabled, + }) + if (trap(info)) return false + return info.enabled + }, 'Can convert to variable': (_, { data }) => { if (!data) return false - return isNodeSafeToReplacePath( - parse(recast(kclManager.ast)), - data.pathToNode - ).isSafe + const ast = parse(recast(kclManager.ast)) + if (err(ast)) return false + const isSafeRetVal = isNodeSafeToReplacePath(ast, data.pathToNode) + if (err(isSafeRetVal)) return false + return isSafeRetVal.isSafe }, }, // end guards @@ -880,7 +945,7 @@ export const modelingMachine = createMachine( ast, selection.codeBasedSelections[0].range ) - const { modifiedAst, pathToExtrudeArg } = extrudeSketch( + const extrudeSketchRes = extrudeSketch( ast, pathToNode, false, @@ -888,11 +953,14 @@ export const modelingMachine = createMachine( ? distance.variableIdentifierAst : distance.valueAst ) - const selections = await kclManager.updateAst(modifiedAst, true, { + if (trap(extrudeSketchRes)) return + const { modifiedAst, pathToExtrudeArg } = extrudeSketchRes + + const updatedAst = await kclManager.updateAst(modifiedAst, true, { focusPath: pathToExtrudeArg, }) - if (selections) { - editorManager.selectRange(selections) + if (updatedAst?.selections) { + editorManager.selectRange(updatedAst?.selections) } }, 'conditionally equip line tool': (_, { type }) => { @@ -1005,11 +1073,15 @@ export const modelingMachine = createMachine( const { intersectionPoint } = args if (!intersectionPoint?.twoD || !sketchDetails?.sketchPathToNode) return - const { modifiedAst } = addStartProfileAt( + const addStartProfileAtRes = addStartProfileAt( kclManager.ast, sketchDetails.sketchPathToNode, [intersectionPoint.twoD.x, intersectionPoint.twoD.y] ) + + if (trap(addStartProfileAtRes)) return + const { modifiedAst } = addStartProfileAtRes + await kclManager.updateAst(modifiedAst, false) sceneEntitiesManager.removeIntersectionPlane() sceneInfra.modelingSend('Add start point') @@ -1018,6 +1090,7 @@ export const modelingMachine = createMachine( }, 'add axis n grid': ({ sketchDetails }) => { if (!sketchDetails) return + if (localStorage.getItem('disableAxis')) return sceneEntitiesManager.createSketchAxis( sketchDetails.sketchPathToNode || [], sketchDetails.zAxis, @@ -1057,32 +1130,28 @@ export const modelingMachine = createMachine( { selectionRanges, sketchDetails }, { data } ) => { - const { modifiedAst, pathToNodeMap } = applyRemoveConstrainingValues({ + const constraint = applyRemoveConstrainingValues({ selectionRanges, pathToNodes: data && [data], }) + if (trap(constraint)) return + const { pathToNodeMap } = constraint if (!sketchDetails) return - sceneEntitiesManager.updateAstAndRejigSketch( - sketchDetails?.sketchPathToNode || [], - modifiedAst, - sketchDetails.zAxis, - sketchDetails.yAxis, - sketchDetails.origin - ) - if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( - sketchDetails.sketchPathToNode, - modifiedAst, + let updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( + pathToNodeMap[0], + constraint.modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return return { selectionType: 'completeSelection', selection: updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ), } }, @@ -1090,50 +1159,58 @@ export const modelingMachine = createMachine( selectionRanges, sketchDetails, }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintHorzVert( + const constraint = applyConstraintHorzVert( selectionRanges, 'horizontal', kclManager.ast, kclManager.programMemory ) + if (trap(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails.sketchPathToNode, modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return return { selectionType: 'completeSelection', selection: updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ), } }, 'do-constrain-vertically': async ({ selectionRanges, sketchDetails }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintHorzVert( + const constraint = applyConstraintHorzVert( selectionRanges, 'vertical', kclManager.ast, kclManager.programMemory ) + if (trap(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return return { selectionType: 'completeSelection', selection: updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ), } }, @@ -1141,22 +1218,26 @@ export const modelingMachine = createMachine( selectionRanges, sketchDetails, }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintHorzVertAlign({ + const constraint = applyConstraintHorzVertAlign({ selectionRanges, constraint: 'setVertDistance', }) + if (trap(constraint)) return + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', @@ -1167,22 +1248,26 @@ export const modelingMachine = createMachine( selectionRanges, sketchDetails, }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintHorzVertAlign({ + const constraint = applyConstraintHorzVertAlign({ selectionRanges, constraint: 'setHorzDistance', }) + if (trap(constraint)) return + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', @@ -1190,22 +1275,26 @@ export const modelingMachine = createMachine( } }, 'do-constrain-snap-to-x': async ({ selectionRanges, sketchDetails }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintAxisAlign({ + const constraint = applyConstraintAxisAlign({ selectionRanges, constraint: 'snapToXAxis', }) + if (err(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', @@ -1213,22 +1302,26 @@ export const modelingMachine = createMachine( } }, 'do-constrain-snap-to-y': async ({ selectionRanges, sketchDetails }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintAxisAlign({ + const constraint = applyConstraintAxisAlign({ selectionRanges, constraint: 'snapToYAxis', }) + if (trap(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', @@ -1236,21 +1329,30 @@ export const modelingMachine = createMachine( } }, 'do-constrain-parallel': async ({ selectionRanges, sketchDetails }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintEqualAngle({ + const constraint = applyConstraintEqualAngle({ selectionRanges, }) - if (!sketchDetails) throw new Error('No sketch details') - await sceneEntitiesManager.updateAstAndRejigSketch( + if (trap(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint + + if (!sketchDetails) { + trap(new Error('No sketch details')) + return + } + + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], parse(recast(modifiedAst)), sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', @@ -1261,21 +1363,25 @@ export const modelingMachine = createMachine( selectionRanges, sketchDetails, }) => { - const { modifiedAst, pathToNodeMap } = applyConstraintEqualLength({ + const constraint = applyConstraintEqualLength({ selectionRanges, }) + if (trap(constraint)) return false + const { modifiedAst, pathToNodeMap } = constraint if (!sketchDetails) return - await sceneEntitiesManager.updateAstAndRejigSketch( + const updatedAst = await sceneEntitiesManager.updateAstAndRejigSketch( sketchDetails?.sketchPathToNode || [], modifiedAst, sketchDetails.zAxis, sketchDetails.yAxis, sketchDetails.origin ) + if (trap(updatedAst, { suppress: true })) return + if (!updatedAst) return const updatedSelectionRanges = updateSelections( pathToNodeMap, selectionRanges, - parse(recast(modifiedAst)) + updatedAst.newAst ) return { selectionType: 'completeSelection', diff --git a/yarn.lock b/yarn.lock index f7b1e8cdf..e2213167a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,10 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@adobe/css-tools@^4.0.1": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" - integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== + version "4.4.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.0.tgz#728c484f4e10df03d5a3acd0d8adcbbebff8ad63" + integrity sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -18,72 +13,41 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: - "@babel/highlight" "^7.22.5" - -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" - integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" + "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" - integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" + integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== "@babel/core@^7.16.0", "@babel/core@^7.21.4", "@babel/core@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" - integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" + integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.24.5" - "@babel/helpers" "^7.24.5" - "@babel/parser" "^7.24.5" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helpers" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -91,111 +55,78 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz#75f8aa978d1e76c87cc6f26c1ea16ae58804d390" - integrity sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz#27ebab1a1ec21f48ae191a8aaac5b82baf80d9c7" + integrity sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" + integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/generator@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" - integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== - dependencies: - "@babel/types" "^7.24.5" + "@babel/types" "^7.24.7" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== dependencies: - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" + integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" + "@babel/compat-data" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.6", "@babel/helper-create-class-features-plugin@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" - integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" + integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f" - integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" + integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" - integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -203,310 +134,187 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" + "@babel/types" "^7.24.7" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/types" "^7.24.7" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-member-expression-to-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" + integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-module-transforms@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" + integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== dependencies: - "@babel/types" "^7.23.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.7" -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@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.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" + integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== + +"@babel/helper-remap-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" + integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-wrap-function" "^7.24.7" -"@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== +"@babel/helper-replace-supers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" + integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== dependencies: - "@babel/types" "^7.24.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-optimise-call-expression" "^7.24.7" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545" - integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.24.3" - "@babel/helper-simple-access" "^7.24.5" - "@babel/helper-split-export-declaration" "^7.24.5" - "@babel/helper-validator-identifier" "^7.24.5" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.7" -"@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.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-string-parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" + integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== -"@babel/helper-plugin-utils@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a" - integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== +"@babel/helper-validator-option@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" + integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== + +"@babel/helper-wrap-function@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" + integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" + "@babel/helper-function-name" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" - integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== +"@babel/helpers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" + integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-simple-access@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba" - integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6" - integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-string-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-identifier@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" - integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== - -"@babel/helper-validator-option@^7.22.5", "@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" - integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== - dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.5", "@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/highlight@^7.24.2": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" - integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.5" + "@babel/helper-validator-identifier" "^7.24.7" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4", "@babel/parser@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" + integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== -"@babel/parser@^7.21.4", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== - -"@babel/parser@^7.22.5": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== - -"@babel/parser@^7.24.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" - integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== - -"@babel/parser@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" - integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" + integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" + integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" + integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-proposal-class-properties@^7.16.0": version "7.18.6" @@ -517,15 +325,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.7.tgz#9b5b73c2e404f0869ef8a8a53765f8203c5467a7" - integrity sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" + integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-decorators" "^7.24.7" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.18.6" @@ -596,12 +402,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz#329fe2907c73de184033775637dbbc507f09116a" - integrity sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA== +"@babel/plugin-syntax-decorators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -617,26 +423,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== +"@babel/plugin-syntax-flow@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -652,12 +458,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -715,12 +521,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" + integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -730,490 +536,491 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== +"@babel/plugin-transform-async-generator-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" + integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-block-scoping@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz#27af183d7f6dad890531256c7a45019df768ac1f" - integrity sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw== +"@babel/plugin-transform-block-scoping@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" + integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-class-static-block@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz#4e37efcca1d9f2fcb908d1bae8b56b4b6e9e1cb6" - integrity sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA== +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== +"@babel/plugin-transform-classes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf" + integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== +"@babel/plugin-transform-destructuring@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e" + integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz#ae454e62219288fbb734541ab00389bfb13c063e" + integrity sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-flow" "^7.24.7" -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== +"@babel/plugin-transform-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" + integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== +"@babel/plugin-transform-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" + integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-modules-commonjs@^7.22.5", "@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== +"@babel/plugin-transform-modules-commonjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" + integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== +"@babel/plugin-transform-modules-systemjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" + integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.7" -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== +"@babel/plugin-transform-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" + integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.7" "@babel/plugin-transform-react-jsx-self@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz#22cc7572947895c8e4cd034462e65d8ecf857756" - integrity sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== dependencies: - "@babel/helper-plugin-utils" "^7.24.5" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-source@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" - integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" - integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== +"@babel/plugin-transform-react-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4" + integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-runtime@^7.16.4": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" - integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.1" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== +"@babel/plugin-transform-typeof-symbol@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0" + integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typescript@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" - integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== +"@babel/plugin-transform-typescript@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" + integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.9" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.3.tgz#f3f138c844ffeeac372597b29c51b5259e8323a3" - integrity sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37" + integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ== dependencies: - "@babel/compat-data" "^7.24.1" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" + "@babel/compat-data" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1225,54 +1032,54 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.1" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.1" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.24.7" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.24.7" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.24.7" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.7" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.24.7" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.24.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-modules-systemjs" "^7.24.7" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.7" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.4" @@ -1290,139 +1097,78 @@ esutils "^2.0.2" "@babel/preset-react@^7.16.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" - integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.5" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" "@babel/preset-typescript@^7.16.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" - integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.5" - "@babel/plugin-transform-typescript" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" - integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== +"@babel/traverse@^7.21.4", "@babel/traverse@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" + integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" - -"@babel/traverse@^7.21.4": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" debug "^4.3.1" globals "^11.1.0" -"@babel/traverse@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" - integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.4", "@babel/types@^7.24.7", "@babel/types@^7.4.4": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" + integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== dependencies: - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.24.5" - "@babel/parser" "^7.24.5" - "@babel/types" "^7.24.5" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" - integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.21.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" - integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== - dependencies: - "@babel/helper-string-parser" "^7.24.1" - "@babel/helper-validator-identifier" "^7.24.5" + "@babel/helper-string-parser" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" "@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.16.0.tgz#595eb30099ba91a835ed65ed8ff7497388f604b3" - integrity sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg== + version "6.16.2" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.16.2.tgz#ac4e191cd599503e45f35e97366b432d30b8f37a" + integrity sha512-MjfDrHy0gHKlPWsvSsikhO1+BOh+eBHNgfH1OXs1+DAf30IonQldgMM3kxLDTG9ktE7kDLaA1j/l7KMPA4KNfw== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" @@ -1430,49 +1176,49 @@ "@lezer/common" "^1.0.0" "@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.2.4.tgz#b8a0e5ce72448c092ba4c4b1d902e6f183948aec" - integrity sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA== + version "6.6.0" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.6.0.tgz#d308f143fe1b8896ca25fdb855f66acdaf019dd4" + integrity sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg== dependencies: "@codemirror/language" "^6.0.0" - "@codemirror/state" "^6.2.0" - "@codemirror/view" "^6.0.0" - "@lezer/common" "^1.0.0" + "@codemirror/state" "^6.4.0" + "@codemirror/view" "^6.27.0" + "@lezer/common" "^1.1.0" "@codemirror/language@^6.0.0": - version "6.8.0" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.8.0.tgz#f2d7eea6b338c25593d800f2293b062d9f9856db" - integrity sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g== + version "6.10.2" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.2.tgz#4056dc219619627ffe995832eeb09cea6060be61" + integrity sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA== dependencies: "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" - "@lezer/common" "^1.0.0" + "@codemirror/view" "^6.23.0" + "@lezer/common" "^1.1.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" style-mod "^4.0.0" "@codemirror/lint@^6.0.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.4.0.tgz#3507e937aa9415ef0831ff04734ef0e736e75014" - integrity sha512-6VZ44Ysh/Zn07xrGkdtNfmHCbGSHZzFBdzWi0pbd7chAQ/iUcpLGX99NYRZTa7Ugqg4kEHCqiHhcZnH0gLIgSg== + version "6.8.0" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.0.tgz#cf9067c7041c1f6c9f20bab411dac9323aab54f0" + integrity sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" crelt "^1.0.5" "@codemirror/search@^6.0.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.0.tgz#308f9968434e0e6ed59c9ec36a0239eb1dfc5d92" - integrity sha512-64/M40YeJPToKvGO6p3fijo2vwUEj4nACEAXElCaYQ50HrXSvRaK+NHEhSh73WFBGdvIdhrV+lL9PdJy2RfCYA== + version "6.5.6" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93" + integrity sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.1.4", "@codemirror/state@^6.2.0", "@codemirror/state@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.2.1.tgz#6dc8d8e5abb26b875e3164191872d69a5e85bd73" - integrity sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.2.1", "@codemirror/state@^6.4.0": + version "6.4.1" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.4.1.tgz#da57143695c056d9a3c38705ed34136e2b68171b" + integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A== "@codemirror/theme-one-dark@^6.0.0": version "6.1.2" @@ -1484,12 +1230,12 @@ "@codemirror/view" "^6.0.0" "@lezer/highlight" "^1.0.0" -"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0": - version "6.21.4" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.21.4.tgz#6ec83ea238e16b2e1fc149ef9d1a36db2b1f3863" - integrity sha512-WKVZ7nvN0lwWPfAf05WxWqTpwjC8YN3q5goj3CsSig7//DD81LULgOx3nBegqpqP0iygBqRmW8z0KSc2QTAdAg== +"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0": + version "6.28.1" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.28.1.tgz#566b89b0513ccfc4e5518a48f5d1962bc6ea5a66" + integrity sha512-BUWr+zCJpMkA/u69HlJmR+YkV4yPpM81HeMkOMZuwFa8iM5uJdEPKAs1icIRZKkKmy0Ub1x9/G3PQLTXdpBxrQ== dependencies: - "@codemirror/state" "^6.1.4" + "@codemirror/state" "^6.4.0" style-mod "^4.1.0" w3c-keyname "^2.2.4" @@ -1500,120 +1246,120 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -1623,9 +1369,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" - integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + version "4.10.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" + integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1647,11 +1393,6 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@fortawesome/fontawesome-common-types@6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz#1766039cad33f8ad87f9467b98e0d18fbc8f01c5" - integrity sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA== - "@fortawesome/fontawesome-common-types@6.5.2": version "6.5.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz#eaf2f5699f73cef198454ebc0c414e3688898179" @@ -1672,25 +1413,25 @@ "@fortawesome/fontawesome-common-types" "6.5.2" "@fortawesome/free-solid-svg-icons@^6.4.2": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz#33a02c4cb6aa28abea7bc082a9626b7922099df4" - integrity sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA== + version "6.5.2" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz#9b40b077b27400a5e9fcbf2d15b986c7be69e9ca" + integrity sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw== dependencies: - "@fortawesome/fontawesome-common-types" "6.4.2" + "@fortawesome/fontawesome-common-types" "6.5.2" "@fortawesome/react-fontawesome@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz#d90dd8a9211830b4e3c08e94b63a0ba7291ddcf4" - integrity sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw== + version "0.2.2" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz#68b058f9132b46c8599875f6a636dad231af78d4" + integrity sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g== dependencies: prop-types "^15.8.1" -"@hapi/hoek@^9.0.0": +"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== -"@hapi/topo@^5.0.0": +"@hapi/topo@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== @@ -1706,9 +1447,9 @@ client-only "^0.0.1" "@headlessui/tailwindcss@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@headlessui/tailwindcss/-/tailwindcss-0.2.0.tgz#2c55c98fd8eee4b4f21ec6eb35a014b840059eec" - integrity sha512-fpL830Fln1SykOCboExsWr3JIVeQKieLJ3XytLe/tt1A0XzqUthOftDmjcCYLW62w7mQI7wXcoPXr3tZ9QfGxw== + version "0.2.1" + resolved "https://registry.yarnpkg.com/@headlessui/tailwindcss/-/tailwindcss-0.2.1.tgz#1becc201f69358a40e08bd676acc234b2cabe6e4" + integrity sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA== "@humanwhocodes/config-array@^0.11.14": version "0.11.14" @@ -1746,13 +1487,6 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@jest/expect-utils@^29.6.2": - version "29.6.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534" - integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg== - dependencies: - jest-get-type "^29.4.3" - "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" @@ -1760,13 +1494,6 @@ dependencies: jest-get-type "^29.6.3" -"@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== - dependencies: - "@sinclair/typebox" "^0.27.8" - "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -1774,18 +1501,6 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== - dependencies: - "@jest/schemas" "^29.6.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - "@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" @@ -1798,16 +1513,7 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -1816,36 +1522,16 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/set-array@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -1859,14 +1545,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1890,39 +1568,40 @@ ts-node "^10.9.1" tslib "~2.4" -"@lezer/common@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.0.3.tgz#1808f70e2b0a7b1fdcbaf5c074723d2d4ed1e4c5" - integrity sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA== +"@lezer/common@^1.0.0", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" + integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== "@lezer/highlight@^1.0.0", "@lezer/highlight@^1.1.3": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.1.6.tgz#87e56468c0f43c2a8b3dc7f0b7c2804b34901556" - integrity sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780" + integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA== dependencies: "@lezer/common" "^1.0.0" "@lezer/javascript@^1.4.9": - version "1.4.9" - resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.4.9.tgz#1536427af5187621b3b616f21b6a21df3ffd1dbe" - integrity sha512-7Uv8mBBE6l44spgWEZvEMdDqGV+FIuY7kJ1o5TFm+jxIuxydO3PcKJYiINij09igd1D/9P7l2KDqpkN8c3bM6A== + version "1.4.17" + resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.4.17.tgz#8456e369f960c328b9e823342d0c72d704238c31" + integrity sha512-bYW4ctpyGK+JMumDApeUzuIezX01H76R1foD6LcRX224FWfyYit/HYxiPGDjXXe/wQWASjCvVGoukTH68+0HIA== dependencies: + "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.1.3" "@lezer/lr" "^1.3.0" "@lezer/lr@^1.0.0", "@lezer/lr@^1.3.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.3.9.tgz#cb299816d1c58efcca23ebbeb70bb4204fdd001b" - integrity sha512-XPz6dzuTHlnsbA5M2DZgjflNQ+9Hi5Swhic0RULdp3oOs3rh6bqGZolosVqN/fQIT8uNiepzINJDnS39oweTHQ== + version "1.4.1" + resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.1.tgz#fe25f051880a754e820b28148d90aa2a96b8bdd2" + integrity sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw== dependencies: "@lezer/common" "^1.0.0" "@ljharb/through@^2.3.11": - version "2.3.11" - resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.11.tgz#783600ff12c06f21a76cc26e33abd0b1595092f9" - integrity sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w== + version "2.3.13" + resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.13.tgz#b7e4766e0b65aa82e529be945ab078de79874edc" + integrity sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" @@ -1967,12 +1646,21 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@playwright/test@^1.43.1": - version "1.43.1" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.43.1.tgz#16728a59eb8ce0f60472f98d8886d6cab0fa3e42" - integrity sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA== +"@playwright/test@^1.44.1": + version "1.44.1" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.44.1.tgz#cc874ec31342479ad99838040e99b5f604299bcb" + integrity sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q== dependencies: - playwright "1.43.1" + playwright "1.44.1" + +"@promptbook/utils@0.50.0-10": + version "0.50.0-10" + resolved "https://registry.yarnpkg.com/@promptbook/utils/-/utils-0.50.0-10.tgz#a3bb2330461b5bc868382188688c88959143dc08" + integrity sha512-Z94YoY/wcZb5m1QoXgmIC1rVeDguGK5bWmUTYdWCqh/LHVifRdJ1C+tBzS0h+HMOD0XzMjZhBQ/mBgTZ/QNW/g== + dependencies: + moment "2.30.1" + prettier "2.8.1" + spacetrim "0.11.25" "@puppeteer/browsers@1.4.6": version "1.4.6" @@ -1988,9 +1676,9 @@ yargs "17.7.1" "@puppeteer/browsers@^1.6.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.8.0.tgz#fb6ee61de15e7f0e67737aea9f9bab1512dbd7d8" - integrity sha512-TkRHIV6k2D8OlUe8RtG+5jgOF/H98Myx0M6AOafC8DdNVOFiBSFa5cpRDtpm8LXOa9sVwe0+e6Q3FC56X/DZfg== + version "1.9.1" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.9.1.tgz#384ee8b09786f0e8f62b1925e4c492424cb549ee" + integrity sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA== dependencies: debug "4.3.4" extract-zip "2.0.1" @@ -2039,80 +1727,95 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/rollup-android-arm-eabi@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" - integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg== +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== -"@rollup/rollup-android-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e" - integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q== +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== -"@rollup/rollup-darwin-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b" - integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g== +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== -"@rollup/rollup-darwin-x64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455" - integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg== +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== -"@rollup/rollup-linux-arm-gnueabihf@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4" - integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ== +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== -"@rollup/rollup-linux-arm64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143" - integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w== +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== -"@rollup/rollup-linux-arm64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef" - integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw== +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== -"@rollup/rollup-linux-riscv64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6" - integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA== +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== -"@rollup/rollup-linux-x64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778" - integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA== +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== -"@rollup/rollup-linux-x64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89" - integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw== +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== -"@rollup/rollup-win32-arm64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b" - integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA== +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== -"@rollup/rollup-win32-ia32-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2" - integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw== +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== -"@rollup/rollup-win32-x64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" - integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== "@rushstack/eslint-patch@^1.1.0": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf" - integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw== + version "1.10.3" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz#391d528054f758f81e53210f1a1eebcf1a8b1d20" + integrity sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg== -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== +"@sideway/address@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" + integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== dependencies: "@hapi/hoek" "^9.0.0" @@ -2144,151 +1847,146 @@ defer-to-connect "^2.0.1" "@tanstack/react-virtual@^3.0.0-beta.60": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.2.0.tgz#fb70f9c6baee753a5a0f7618ac886205d5a02af9" - integrity sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg== + version "3.5.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.5.1.tgz#1ce466f530a10f781871360ed2bf7ff83e664f85" + integrity sha512-jIsuhfgy8GqA67PdWqg73ZB2LFE+HD9hjWL1L6ifEIZVyZVAKpYmgUG4WsKQ005aEyImJmbuimPiEvc57IY0Aw== dependencies: - "@tanstack/virtual-core" "3.2.0" + "@tanstack/virtual-core" "3.5.1" -"@tanstack/virtual-core@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.2.0.tgz#874d36135e4badce2719e7bdc556ce240cbaff14" - integrity sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ== - -"@tauri-apps/api@2.0.0-beta.11": - version "2.0.0-beta.11" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.11.tgz#7ec6f6f007da4e55315270619448ce39fd11b4e3" - integrity sha512-wJRY+fBUm3KpqZDHMIz5HRv+1vlnvRJ/dFxiyY3NlINTx2qXqDou5qWYcP1CuZXsd39InWVPV3FAZvno/kGCkA== +"@tanstack/virtual-core@3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.5.1.tgz#f519149bce9156d0e7954b9531df15f446f2fc12" + integrity sha512-046+AUSiDru/V9pajE1du8WayvBKeCvJ2NmKPy/mR8/SbKKrqmSbj7LJBfXE+nSq4f5TBXvnCzu0kcYebI9WdQ== "@tauri-apps/api@2.0.0-beta.12": version "2.0.0-beta.12" resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.12.tgz#0b552086e6382cfd5798537b304d00cbf42db7a1" integrity sha512-77OvAnsExtiprnjQcvmDyZGfnIvMF/zVL5+8Vkl1R8o8E3iDtvEJZpbbH1F4dPtNa3gr4byp/5dm8hAa1+r3AA== -"@tauri-apps/api@2.0.0-beta.4": - version "2.0.0-beta.4" - resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.4.tgz#7688950f6e03f38b3bac73585f8f4cdd61be6aa6" - integrity sha512-Nxtj28NYUo5iwYkpYslxmOPkdI2WkELU2e3UH9nbJm9Ydki2CQwJVGQxx4EANtdZcMNsEsUzRqaDTvEUYH1l6w== - -"@tauri-apps/cli-darwin-arm64@2.0.0-beta.13": +"@tauri-apps/api@2.0.0-beta.13": version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.13.tgz#4926b310f5c39f967753c1c6b9aa20916011ebb6" - integrity sha512-/ibwIj1n2TQSXazGr79K4sfiZ85JndGXjMVN5QD9M8AkhpqgiSM+QT+qfIb+Y8p/RY9v1w1h3+zKMJXjhIppbA== + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.13.tgz#53ec5117d042d560615afec2d38a6d38ee20ff22" + integrity sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg== -"@tauri-apps/cli-darwin-x64@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.13.tgz#50fee7410ef12e705aa446be7f640b7da504c0e3" - integrity sha512-DNqvRzlrH0ZEo+MxdbJIFOYGPCI7iVXzPxSRU+WFz9aa388fZSVEw9jWer5WaAR5FBgp3bDjrkjPuejSb2A8fw== +"@tauri-apps/cli-darwin-arm64@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.20.tgz#d01f6af21cbe3a7af685388a518fe35a22a33ceb" + integrity sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA== -"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.13.tgz#209af191283ec4730fed8fe8e5299a91710e4b38" - integrity sha512-DACLzD8PqgURFBDTnxGODBw/8AP1M5etMrc73dCYs2d4aingc2fVxGYeIQBA0SgijznoCk+pcOmiRsNKO6gemw== +"@tauri-apps/cli-darwin-x64@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.20.tgz#18f4992ba418d97a4a3b0fa03d2d3e9a66f6bfe7" + integrity sha512-lC5QSnRExedYN4Ds6ZlSvC2PxP8qfIYBJQ5ktf+PJI5gQALdNeVtd6YnTG1ODCEklfLq9WKkGwp7JdALTU5wDA== -"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.13.tgz#01064bcc7cad8db596e7b54382f7b8e7a96d60e9" - integrity sha512-qm141KNMD6ZjbtAntEZYqiEbiAD0Y6CQnfzmARM9OAPkHD2vk0rnGWSa87N8lnAA27LVAnKj+nTtt77dRLlaVA== +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.20.tgz#57e737ab475d2a8a52d7c99a8f9d524c356b89d4" + integrity sha512-nZCeBMHHye5DLOJV5k2w658hnCS+LYaOZ8y/G9l3ei+g0L/HBjlSy6r4simsAT5TG8+l3oCZzLBngfTMdDS/YA== -"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.13.tgz#1974a209612fd2bbd2b66dc13406f495e5e38dbd" - integrity sha512-AnB+FaqnKfGszStoj7NFZyxMV3Dz4jJcTcCE+EUYJ8Tctah35EJS/39ykskXjXonhxzg8Zr7joXRUVgGFk/yVA== +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.20.tgz#8c0bd95f08ecd6cfe93a5e317d21d19df9cf492c" + integrity sha512-B79ISVLPVBgwnCchVqwTKU+vxnFYqxKomcR4rmsvxfs0NVtT5QuNzE1k4NUQnw3966yjwhYR3mnHsSJQSB4Eyw== -"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.13.tgz#55fbbb3fe12c1c6fe1e4cae6dce055dcb23a522b" - integrity sha512-do+H48Sq/CJPRCSj7aK4j+QXi5OLbqmVt3YUB7H/krH4PFobveIhm2UpEwTjdEWO2tFTCttj07GD/OYxDhzD/g== +"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.20.tgz#1b00f80988c7c34f1b491e9a666ee28193e10945" + integrity sha512-ojIkv/1uZHhcrgfIN8xgn4BBeo/Xg+bnV0wer6lD78zyxkUMWeEZ+u3mae1ejCJNhhaZOxNaUQ67MvDOiGyr5Q== -"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.13.tgz#67b0f6859072ec297b39dfb5bdf76fc897cfe6f4" - integrity sha512-txkn8CAb8/n6vOHvuXhUBKBJFAip6dF11qqK1lcpsgpNdv1UbvpZYYbjEd8y4jWyjN7OEoIseTtzFzXdezycDw== +"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.20.tgz#e7591785dc54911c76a2fb84586b9d08f94379bb" + integrity sha512-xBy1FNbHKlc7T6pOmFQQPECxJaI5A9QWX7Kb9N64cNVusoOGlvc3xHYkXMS4PTr7xXOT0yiE1Ww2OwDRJ3lYsg== -"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.13.tgz#96de65e90b29545ac3825ed51c1fd22648a40299" - integrity sha512-SKa+qiZQ0+JXTHYtZKJw6RuUoolI/GU7E7pTHfkhYpGFO8UXLpTABkQ0KbN0RK0Bw/MOFFVqnAN2AoXLgPUDEA== +"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.20.tgz#c8c88789c6c312b126136a4a3e87166f6178171a" + integrity sha512-+O6zq5jmtUxA1FUAAwF2ywPysy4NRo2Y6G+ESZDkY9XosRwdt5OUjqAsYktZA3AxDMZVei8r9buwTqUwi9ny/g== -"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.13.tgz#ff3fe14c68abed27810d727a6d7e78c7f172785c" - integrity sha512-4i9MK2mxNVF2Y1Wp6r/73Xhpevaz1sXD1DezfCDC8Fdszxo2IhkIZ0AYF5/M+TnSLyJk2u5TtFCnbaOt5e4gCg== +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.20.tgz#96361d77e43e2e7c67e1dd8fc11562e053e90ab7" + integrity sha512-RswgMbWyOQcv53CHvIuiuhAh4kKDqaGyZfWD4VlxqX/XhkoF5gsNgr0MxzrY7pmoL+89oVI+fiGVJz4nOQE5vA== -"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.13.tgz#adac497f4cb289f147678ceced59102ae4d2696a" - integrity sha512-aQRwG/dc9zScIzCst646uyprppxc1Gx4jFJUw4yAEikO32SOS+90c8NFEj6H3HtZBmhzfI3JDxrGJl7ORAOCCQ== +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.20.tgz#1acedfc84941a205afc4eeff9e1ba02d6febc21f" + integrity sha512-5lgWmDVXhX3SBGbiv5SduM1yajiRnUEJClWhSdRrEEJeXdsxpCsBEhxYnUnDCEzPKxLLn5fdBv3VrVctJ03csQ== + +"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.20": + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.20.tgz#9dd3374271ab617ee640305226ac02fcbb2694b2" + integrity sha512-SuSiiVQTQPSzWlsxQp/NMzWbzDS9TdVDOw7CCfgiG5wnT2GsxzrcIAVN6i7ILsVFLxrjr0bIgPldSJcdcH84Yw== "@tauri-apps/cli@^2.0.0-beta.13": - version "2.0.0-beta.13" - resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.13.tgz#59f410c680cce0707675c78a745bf5c6faa1a6a3" - integrity sha512-Kp0zSvrhXrOQL+8evRMJufnDYDinWXaBb1Un8x4cptrM0GAKjYddV4vjNsXvEyjlXv0S+SWJD0OUNHQyMDUlAg== + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.20.tgz#c78fd4c4560a0281432a057bfff89f48c1df4e13" + integrity sha512-707q9uIc2oNrYHd2dtMvxTrpZXVpart5EIktnRymNOpphkLlB6WUBjHD+ga45WqTU6cNGKbYvkKqTNfshNul9Q== optionalDependencies: - "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.13" - "@tauri-apps/cli-darwin-x64" "2.0.0-beta.13" - "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.13" - "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.13" - "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.13" - "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.13" - "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.13" - "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.13" - "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.13" - "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.13" + "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.20" + "@tauri-apps/cli-darwin-x64" "2.0.0-beta.20" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.20" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.20" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.20" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.20" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.20" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.20" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.20" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.20" "@tauri-apps/plugin-dialog@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.2.tgz#64028104c51f018acfce96221a41f6389b9707b5" - integrity sha512-WugTn/8d5jYA0GL1JRIJgA1OSxG0h2V4PSZZzehgA3v7rPlIU6w9s2+dSRqj55aMj6hm3Az9YbQqC18nuaHkpw== + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.5.tgz#1ad9592d554bd5a4b4d41a9f4aa6e01aa33a9f6a" + integrity sha512-jkaBCsx2v6WB6sB77fTMCeijuvT3FlzwschiHnPlD7aU6CHvQgRlpCv/FttPdTq4ih2t6MIlM4oX85hNYgfs6w== dependencies: - "@tauri-apps/api" "2.0.0-beta.4" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-fs@^2.0.0-beta.3": - version "2.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.3.tgz#461628704a10ce5177c49f3f65153aa9ecd8df3b" - integrity sha512-LBgA7S10NwcitHaugIfmCSkewz45vSz1VOpMHhzvE38i1r1KpuTSHlr3MZ0LLq93tH/lvhYZ+3LAml4Sriwthw== + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.5.tgz#eea9161d33dafc592005e3ee1e74db6298b20398" + integrity sha512-uTqCDFA1z8KDtTe5fKlbRrKV4zxh63UVUvD/PR8GnyNLV+qxj/fEuJuGvMdfMbVKrTljGqSpun5wnP5jqD5fMg== dependencies: - "@tauri-apps/api" "2.0.0-beta.11" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-http@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-http/-/plugin-http-2.0.0-beta.2.tgz#b143b713e980d2c100854d1ef05b6f39edf1f8a0" - integrity sha512-g/FA/w/+a2uQQlXoVTy5HXIi/YZo3q3lnxhKkwCWE/IZOMoraDlTzM/H+MB9hUaubLAnuPUMth5LaeFC9jwdRw== + version "2.0.0-beta.6" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-http/-/plugin-http-2.0.0-beta.6.tgz#b126b6ca3ab22ccaeb9861fa4f5e88066e20539e" + integrity sha512-/5cDY9LwrZkPBTqxx2xwvzA3fzYS+Y1UD0rK9NVxjKkNXoA9NmGxEetug05u0KPbOtciyFiTyq31koszlPy6KA== dependencies: - "@tauri-apps/api" "2.0.0-beta.4" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-os@^2.0.0-beta.3": - version "2.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-os/-/plugin-os-2.0.0-beta.3.tgz#fbe5e65196d13421fa05f1a3ce06bb6cb8139403" - integrity sha512-kuTfns6z7z/RKAqij3293fnSsgRHlogO/SzNWziFDGHpijGUm/peH70Cv45LKvHw+7kEMX+nfHFWOZm8UEVy/w== + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-os/-/plugin-os-2.0.0-beta.5.tgz#7b3b066796e37f073925afb6cb0ddb9cdab0f7d9" + integrity sha512-Qfs/clZ9R05J+OVOGkko+9OaYaL+xJaGICeQ1G5CnLFpUdTfMV10D+1nBBauxDdiLU4ay5I0iprJ5aG5GJBunQ== dependencies: - "@tauri-apps/api" "2.0.0-beta.11" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-process@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-process/-/plugin-process-2.0.0-beta.2.tgz#682ef62c4db154a2d6da0bc352133b13796e7d16" - integrity sha512-CLF3Figv68fk+mqdV1q8bufFlcQS3SSTiNX8Lc7FbSD211XOWShgiGm4D6QMUkFBxgXzZICWh/mrYnWdv3aYQA== + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-process/-/plugin-process-2.0.0-beta.5.tgz#aa97b98ab4dcdd438de162e98f6f54e0230ff6e3" + integrity sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ== dependencies: - "@tauri-apps/api" "2.0.0-beta.4" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-shell@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.2.tgz#1eff697246140f17478527b0d947d76d3403a226" - integrity sha512-9rWsfN7Wt+EuWmpmNnK8bCs+04fzhEYrHtWyLIAYxb9diFdcJrEoctCP9YM2v+Uf8/y8qFC7VCbZ/9VQHANymQ== + version "2.0.0-beta.6" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.6.tgz#10378e753a220bdab638cbacb6b9d0039ddbe986" + integrity sha512-g3nM9cQQGl7Iv4MvyFuco/aPTiwOI/MixcoKso3VQIg5Aqd64NqR0r+GfsB0qx52txItqzSXwmeaj1eZjO9Q6Q== dependencies: - "@tauri-apps/api" "2.0.0-beta.4" + "@tauri-apps/api" "2.0.0-beta.13" "@tauri-apps/plugin-updater@^2.0.0-beta.3": - version "2.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-beta.3.tgz#d6403363e540005e4bd38ff8d0cd689f40db96d0" - integrity sha512-bD1ikPz80uK9YJKNYpYlA6StSp9lr0Ob1kGLG2XdmOgspv7SZLLNVzMORtKeqgepxwG99qdYGDDegT3Ll6+UlA== + version "2.0.0-beta.5" + resolved "https://registry.yarnpkg.com/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-beta.5.tgz#8be3277da409ffc596a870b625cb4bb4ef17f199" + integrity sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg== dependencies: - "@tauri-apps/api" "2.0.0-beta.11" + "@tauri-apps/api" "2.0.0-beta.13" "@testing-library/dom@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.0.0.tgz#ae1ab88aad35a728a38264041163174cafd7e8dd" - integrity sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g== + version "10.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.1.0.tgz#2d073e49771ad614da999ca48f199919e5176fb6" + integrity sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2315,9 +2013,9 @@ redent "^3.0.0" "@testing-library/react@^15.0.2": - version "15.0.2" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-15.0.2.tgz#d0fd7e9c41b819557639acf5f18e4cd1007ec295" - integrity sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ== + version "15.0.7" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-15.0.7.tgz#ff733ce0893c875cb5a47672e8e772897128f4ae" + integrity sha512-cg0RvEdD1TIhhkm1IeYMQxrzy0MtUNfa3minv4MjbgcYzJAZ7yD0i0lwoPOTPr+INtiXFezt2o8xMSnyHhEn2Q== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^10.0.0" @@ -2341,9 +2039,9 @@ tslib "^2.3.0" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -2361,14 +2059,14 @@ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@tweenjs/tween.js@^23.1.1", "@tweenjs/tween.js@~23.1.1": - version "23.1.1" - resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-23.1.1.tgz#0ae28ed9c635805557f78c2626464018d5f1b5e2" - integrity sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw== + version "23.1.2" + resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-23.1.2.tgz#4e5357fd6742f5aa50447d3fa808aed4cda93ed7" + integrity sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ== "@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.20.5": version "7.20.5" @@ -2382,9 +2080,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.7" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" - integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" @@ -2397,9 +2095,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.20.4" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" - integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -2459,23 +2157,18 @@ "@types/istanbul-lib-report" "*" "@types/jest@*": - version "29.5.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" - integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== + version "29.5.12" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" + integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== dependencies: expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@*": +"@types/json-schema@*", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2487,16 +2180,16 @@ integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== "@types/node@*", "@types/node@^20.1.0", "@types/node@^20.1.1", "@types/node@^20.11.28": - version "20.11.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" - integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== + version "20.14.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.2.tgz#a5f4d2bcb4b6a87bffcaa717718c5a0f208f4a18" + integrity sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q== dependencies: undici-types "~5.26.4" "@types/node@^18.19.31": - version "18.19.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd" - integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA== + version "18.19.34" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.34.tgz#c3fae2bbbdb94b4a52fe2d229d0dccce02ef3d27" + integrity sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g== dependencies: undici-types "~5.26.4" @@ -2506,9 +2199,9 @@ integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/pixelmatch@^5.2.6": version "5.2.6" @@ -2518,21 +2211,21 @@ "@types/node" "*" "@types/pngjs@^6.0.4": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-6.0.4.tgz#9a457aebabd944efde1a773a0fa1d74933e8021b" - integrity sha512-atAK9xLKOnxiuArxcHovmnOUUGBZOQ3f0vCf43FnoKs6XnqiambT1kkJWmdo71IR+BoXSh+CueeFR0GfH3dTlQ== + version "6.0.5" + resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-6.0.5.tgz#6dec2f7eb8284543ca4e423f3c09b119fa939ea3" + integrity sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ== dependencies: "@types/node" "*" "@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.25": - version "18.2.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" - integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" @@ -2544,17 +2237,17 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.3.2": - version "18.3.2" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.2.tgz#462ae4904973bc212fa910424d901e3d137dbfcd" - integrity sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -2602,9 +2295,9 @@ "@types/node" "*" "@types/webxr@*": - version "0.5.10" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.10.tgz#19c76208ec015ca3f139505e14d94d6b740f518a" - integrity sha512-n3u5sqXQJhf1CS68mw3Wf16FQ4cRPNBBwdYLFzq3UddiADOim1Pn3Y6PBdDilz1vOJF3ybLxJ8ZEDlLIzrOQZg== + version "0.5.16" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.16.tgz#28955aa2d1197d1ef0b9826ae0f7e68f7eca0601" + integrity sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA== "@types/which@^2.0.1": version "2.0.2" @@ -2733,10 +2426,10 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@uiw/codemirror-extensions-basic-setup@4.21.25": - version "4.21.25" - resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.21.25.tgz#eb0605ac16b18a4d673cf475d81c4d960eaa6ef1" - integrity sha512-eeUKlmEE8aSoSgelS8OR2elcPGntpRo669XinAqPCLa0eKorT2B0d3ts+AE+njAeGk744tiyAEbHb2n+6OQmJw== +"@uiw/codemirror-extensions-basic-setup@4.22.2": + version "4.22.2" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.22.2.tgz#a114dc9ebad6de41a441c8aca655d9c34934a7d9" + integrity sha512-zcHGkldLFN3cGoI5XdOGAkeW24yaAgrDEYoyPyWHODmPiNwybQQoZGnH3qUdzZwUaXtAcLWoAeOPzfNRW2yGww== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/commands" "^6.0.0" @@ -2747,15 +2440,15 @@ "@codemirror/view" "^6.0.0" "@uiw/react-codemirror@^4.21.25": - version "4.21.25" - resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.21.25.tgz#1efb7737b907fde6f8f7552b5f43b33eec0b7a86" - integrity sha512-mBrCoiffQ+hbTqV1JoixFEcH7BHXkS3PjTyNH7dE8Gzf3GSBRazhtSM5HrAFIiQ5FIRGFs8Gznc4UAdhtevMmw== + version "4.22.2" + resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.22.2.tgz#18dcb79e31cf34e0704366f3041da93ff3c64109" + integrity sha512-okCSl+WJG63gRx8Fdz7v0C6RakBQnbb3pHhuzIgDB+fwhipgFodSnu2n9oOsQesJ5YQ7mSOcKMgX0JEsu4nnfQ== dependencies: "@babel/runtime" "^7.18.6" "@codemirror/commands" "^6.1.0" "@codemirror/state" "^6.1.1" "@codemirror/theme-one-dark" "^6.0.0" - "@uiw/codemirror-extensions-basic-setup" "4.21.25" + "@uiw/codemirror-extensions-basic-setup" "4.22.2" codemirror "^6.0.0" "@ungap/structured-clone@^1.2.0": @@ -2764,9 +2457,9 @@ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vitejs/plugin-react@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz#f20ec2369a92d8abaaefa60da8b7157819d20481" - integrity sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw== + version "4.3.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz#d0be6594051ded8957df555ff07a991fb618b48e" + integrity sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg== dependencies: "@babel/core" "^7.24.5" "@babel/plugin-transform-react-jsx-self" "^7.24.5" @@ -2792,7 +2485,7 @@ p-limit "^5.0.0" pathe "^1.1.1" -"@vitest/snapshot@1.6.0", "@vitest/snapshot@^1.2.2": +"@vitest/snapshot@1.6.0", "@vitest/snapshot@^1.2.1", "@vitest/snapshot@^1.2.2": version "1.6.0" resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.0.tgz#deb7e4498a5299c1198136f56e6e0f692e6af470" integrity sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ== @@ -2819,125 +2512,81 @@ pretty-format "^29.7.0" "@vitest/web-worker@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@vitest/web-worker/-/web-worker-1.5.0.tgz#9de0e20b4a9cfed2a4958d757bd0594a76a2d4e9" - integrity sha512-WxX5VAgp8knJGTZknTDUICAVtNiDsBDQN1z/ldsDFqhRUFp09WLhRxWnKqCQc+CXk1W+kpUZmWDjxaD3i8QBmA== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@vitest/web-worker/-/web-worker-1.6.0.tgz#7c5ce3f0ca92e10bbc61eefa73de0a0679ecd049" + integrity sha512-VVKzjk6PVKfaXfhRwTxXaQ0NCp2BoUPhiR2OYd3InZb60jbZVmKquvngFXgvgOf1aDT8ztloMi8yu3wj9eRcuQ== dependencies: debug "^4.3.4" "@wdio/cli@^8.24.3": - version "8.24.3" - resolved "https://registry.yarnpkg.com/@wdio/cli/-/cli-8.24.3.tgz#305adc66cd2264ed4ef4549266bbb327826e10ef" - integrity sha512-yJBsYubAws7X9i2vgM/9VOnI+f7YpaeVv4utz8DEXFTWtNm5X0OVqUBZnU173OXLuNan9ychaH7L1Fyth1KYnA== + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/cli/-/cli-8.38.2.tgz#a9c7cfa3df7ad18815a6e8024bfb2f90afba09ed" + integrity sha512-p9y6jxmpmw53OoB9v/uTLwMetmz7Q0K7NewdVONgmeTY/ERpkU15qL3fMw1rXb+E+vrV8dlce4srnXroec6SFA== dependencies: "@types/node" "^20.1.1" - "@wdio/config" "8.24.3" - "@wdio/globals" "8.24.3" - "@wdio/logger" "8.16.17" - "@wdio/protocols" "8.23.0" - "@wdio/types" "8.24.2" - "@wdio/utils" "8.24.3" + "@vitest/snapshot" "^1.2.1" + "@wdio/config" "8.38.2" + "@wdio/globals" "8.38.2" + "@wdio/logger" "8.38.0" + "@wdio/protocols" "8.38.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" async-exit-hook "^2.0.1" chalk "^5.2.0" chokidar "^3.5.3" cli-spinners "^2.9.0" - detect-package-manager "^3.0.1" dotenv "^16.3.1" ejs "^3.1.9" execa "^8.0.1" - import-meta-resolve "^3.0.0" + import-meta-resolve "^4.0.0" inquirer "9.2.12" lodash.flattendeep "^4.4.0" lodash.pickby "^4.6.0" lodash.union "^4.6.0" - read-pkg-up "^10.0.0" + read-pkg-up "10.0.0" recursive-readdir "^2.2.3" - webdriverio "8.24.3" + webdriverio "8.38.2" yargs "^17.7.2" -"@wdio/config@8.24.3": - version "8.24.3" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-8.24.3.tgz#e37df92fa726a87e79af4fa52764912900bfd887" - integrity sha512-KXJ3qKJTTOa0nwwPtCxxgYBMfqGghij8bEg7DTGkydyuqVvBTSc0py7tXmSI4Uoh7ZdpZxZ6Q9C+Y3CVQhaiWQ== +"@wdio/config@8.38.2": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/config/-/config-8.38.2.tgz#b8abc9fa860c77089a99dafb8f6ea5dd975a3071" + integrity sha512-xlnapTr1vOA0h5HsHTIqj47729FbG3WjxmgHweDEQvcT4C1g9l+WKf+N3FM7DNNoIsAqxKi6rOHG02rJADQJtw== dependencies: - "@wdio/logger" "8.16.17" - "@wdio/types" "8.24.2" - "@wdio/utils" "8.24.3" - decamelize "^6.0.0" - deepmerge-ts "^5.0.0" - glob "^10.2.2" - import-meta-resolve "^3.0.0" - -"@wdio/config@8.35.0": - version "8.35.0" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-8.35.0.tgz#a8eff0ff754b0c9701cfd8c333f05c03c3f0c528" - integrity sha512-I36sBPMl/+LCyQ3Pwb8gGQM6KxwmUfhOPp16TxN21Qo/Bc0fZfyGIg6KevmRu4DuqpGUm5MMVSfyPhLUkMk3Cg== - dependencies: - "@wdio/logger" "8.28.0" - "@wdio/types" "8.32.4" - "@wdio/utils" "8.35.0" + "@wdio/logger" "8.38.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" decamelize "^6.0.0" deepmerge-ts "^5.0.0" glob "^10.2.2" import-meta-resolve "^4.0.0" -"@wdio/config@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/config/-/config-8.36.0.tgz#31436f3550096500694fcfe943c9a1dd53a1c44c" - integrity sha512-sAbqnx/G+OsrMquIncFXjM4U0/E0ULMP0jDHZND75r0e1DYYCHmyacrvIHu3Jyxinl9f6+4XQdev6vqdTqPdNg== - dependencies: - "@wdio/logger" "8.28.0" - "@wdio/types" "8.36.0" - "@wdio/utils" "8.36.0" - decamelize "^6.0.0" - deepmerge-ts "^5.0.0" - glob "^10.2.2" - import-meta-resolve "^4.0.0" - -"@wdio/globals@8.24.3": - version "8.24.3" - resolved "https://registry.yarnpkg.com/@wdio/globals/-/globals-8.24.3.tgz#421374b548f6810600848a07607ac8a216e15359" - integrity sha512-hxCe5qKl1eBSqNtI5MVSBqO5E0PR+KEal7/mAYYLN4YFUUEwNFXlamUrkbM9lj5VyYf29RAig+Mt4LgTCYaReA== - optionalDependencies: - expect-webdriverio "^4.6.1" - webdriverio "8.24.3" - -"@wdio/globals@8.36.0", "@wdio/globals@^8.23.1", "@wdio/globals@^8.29.3", "@wdio/globals@^8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/globals/-/globals-8.36.0.tgz#fa5898338d6506c8f80148a59ef98cdb33054302" - integrity sha512-vqMq1hR+iF0lqMNJpk9z+QB9l/QfL1DbvOfNhPtQ13NgctfNg42ffuhEObbzTLQN0MftcnPBu6O3pai79y8bUA== +"@wdio/globals@8.38.2", "@wdio/globals@^8.29.3", "@wdio/globals@^8.36.0": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/globals/-/globals-8.38.2.tgz#d761f45f746d0eb75bd138c63f12da3862c9bee3" + integrity sha512-iIrUF1EODfHLh3V/CSNCqbNNxUTe3ND+c86zDjzJcPFjawLX1plvAApsU/eDmtsFShcOS2KHbfSjiydFoqQG1Q== optionalDependencies: expect-webdriverio "^4.11.2" - webdriverio "8.36.0" + webdriverio "8.38.2" "@wdio/local-runner@^8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/local-runner/-/local-runner-8.36.0.tgz#91d994b59762627fb14881969240b9b64b8087d2" - integrity sha512-MIzbWcXgRQGQQK4H5N39/JFoikOg5cu34l1U6rgw74D6hO79L4RwBg2Oo4TJJYgHUL/4RbVwyeLdb5WDTdluTQ== + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/local-runner/-/local-runner-8.38.2.tgz#8539d27f1e43619cbedec4c1ab72447c454613bd" + integrity sha512-syW+R5VUHJ3GBkQGFcNYe6MYwWRgklc9W7A83xQDTvKWFNHCetLvc8AtKZ54vs8MItBejjU+Oh94ZNbNX1pBcg== dependencies: "@types/node" "^20.1.0" - "@wdio/logger" "8.28.0" + "@wdio/logger" "8.38.0" "@wdio/repl" "8.24.12" - "@wdio/runner" "8.36.0" - "@wdio/types" "8.36.0" + "@wdio/runner" "8.38.2" + "@wdio/types" "8.38.2" async-exit-hook "^2.0.1" split2 "^4.1.0" stream-buffers "^3.0.2" -"@wdio/logger@8.16.17": - version "8.16.17" - resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.16.17.tgz#c2055857ed3e3cf12cfad843140fa79264c6a632" - integrity sha512-zeQ41z3T+b4IsrriZZipayXxLNDuGsm7TdExaviNGojPVrIsQUCSd/FvlLHM32b7ZrMyInHenu/zx1cjAZO71g== - dependencies: - chalk "^5.1.2" - loglevel "^1.6.0" - loglevel-plugin-prefix "^0.8.4" - strip-ansi "^7.1.0" - -"@wdio/logger@8.28.0", "@wdio/logger@^8.11.0", "@wdio/logger@^8.16.17", "@wdio/logger@^8.28.0": - version "8.28.0" - resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.28.0.tgz#ab97ee1a9f6a30305e1a07ff2b67fa23e1281e73" - integrity sha512-/s6zNCqwy1hoc+K4SJypis0Ud0dlJ+urOelJFO1x0G0rwDRWyFiUP6ijTaCcFxAm29jYEcEPWijl2xkVIHwOyA== +"@wdio/logger@8.38.0", "@wdio/logger@^8.28.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@wdio/logger/-/logger-8.38.0.tgz#a96406267e800bef9c58ac95de00f42ab0d3ac5c" + integrity sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q== dependencies: chalk "^5.1.2" loglevel "^1.6.0" @@ -2945,33 +2594,21 @@ strip-ansi "^7.1.0" "@wdio/mocha-framework@^8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/mocha-framework/-/mocha-framework-8.36.0.tgz#53e38a9feae06d90c9dce05414e9cb5f6e3f9a7a" - integrity sha512-5wZgh1apbSKTtgGwvd//L4kxdaXe30AQ3y9YeJD+OuAJUTYFRjTpMS13bO3pX518imQeB8HCm4aUc2kxs7J81Q== + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/mocha-framework/-/mocha-framework-8.38.2.tgz#5174546406f435a696b301a3efc1ac4704c6d036" + integrity sha512-qJmRL5E6/ypjCUACH4hvCAAmTdU4YUrUlp9o/IKvTIAHMnZPE0/HgUFixCeu8Mop+rdzTPVBrbqxpRDdSnraYA== dependencies: "@types/mocha" "^10.0.0" "@types/node" "^20.1.0" - "@wdio/logger" "8.28.0" - "@wdio/types" "8.36.0" - "@wdio/utils" "8.36.0" + "@wdio/logger" "8.38.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" mocha "^10.0.0" -"@wdio/protocols@8.23.0": - version "8.23.0" - resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-8.23.0.tgz#d519273236af4b12bed3315cf75c5c71abd0f0ce" - integrity sha512-2XTzD+lqQP3g8BWn+Bn5BTFzjHqzZNwq7DjlYrb27Bq8nOA+1DEcj3WzQ6V6CktTnKI/LAYKA1IFAF//Azrp/Q== - -"@wdio/protocols@8.32.0": - version "8.32.0" - resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-8.32.0.tgz#edb22793fa0fe9b7544349944984d575c40835a7" - integrity sha512-inLJRrtIGdTz/YPbcsvpSvPlYQFTVtF3OYBwAXhG2FiP1ZwE1CQNLP/xgRGye1ymdGCypGkexRqIx3KBGm801Q== - -"@wdio/repl@8.23.1": - version "8.23.1" - resolved "https://registry.yarnpkg.com/@wdio/repl/-/repl-8.23.1.tgz#eb00fc839ad47e7ed1a862e558cc545f0767a0d0" - integrity sha512-u6zG2cgBm67V5/WlQzadWqLGXs3moH8MOsgoljULQncelSBBZGZ5DyLB4p7jKcUAsKtMjgmFQmIvpQoqmyvdfg== - dependencies: - "@types/node" "^20.1.0" +"@wdio/protocols@8.38.0": + version "8.38.0" + resolved "https://registry.yarnpkg.com/@wdio/protocols/-/protocols-8.38.0.tgz#05a3b63cc1318f82b39263e10892d907a7a2f278" + integrity sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA== "@wdio/repl@8.24.12": version "8.24.12" @@ -2980,116 +2617,63 @@ dependencies: "@types/node" "^20.1.0" -"@wdio/reporter@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-8.36.0.tgz#561a2935b8c95ac2e0b6eb8e4d20ff4c65cc3f3d" - integrity sha512-pkAxqiMC+ljmksOKlK9g6y2NRvrdQiKtxD11rsMwJ6CH4kVDSGIvENw7u3kxg7Qwp0j1rCKf5Hp51npqKQgeDQ== +"@wdio/reporter@8.38.2": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/reporter/-/reporter-8.38.2.tgz#9daf7c442d233f9f0e225732285c9593a6e45ca9" + integrity sha512-R78UdAtAnkaV22NYlCCcbPPhmYweiDURiw64LYhlVIQrKNuXUQcafR2kRlWKy31rZc9thSLs5LzrZDReENUlFQ== dependencies: "@types/node" "^20.1.0" - "@wdio/logger" "8.28.0" - "@wdio/types" "8.36.0" + "@wdio/logger" "8.38.0" + "@wdio/types" "8.38.2" diff "^5.0.0" object-inspect "^1.12.0" -"@wdio/runner@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/runner/-/runner-8.36.0.tgz#a7ac96e73c8dcc00e13fe154dd83c78a6d0683fa" - integrity sha512-M2ZDL0gmR2VvVMchi3Pkonva6Gn6eFh6IwVCpT0np7zioaqOksy3IM7Aki8kPKKS88Osip5dAfoKIrY7JpHovA== +"@wdio/runner@8.38.2": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/runner/-/runner-8.38.2.tgz#ce6c94f3486a5b68a97ae2a299af8830ab085226" + integrity sha512-5lPnKSX2BBLI2AbYW+hoGPiEUAJXj8F8I6NC2LaBVzf1CLN+w2HWZ7lUiqS14XT0b5/hlSUX6+JYwUXlDbpuuw== dependencies: "@types/node" "^20.11.28" - "@wdio/config" "8.36.0" - "@wdio/globals" "8.36.0" - "@wdio/logger" "8.28.0" - "@wdio/types" "8.36.0" - "@wdio/utils" "8.36.0" + "@wdio/config" "8.38.2" + "@wdio/globals" "8.38.2" + "@wdio/logger" "8.38.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" deepmerge-ts "^5.1.0" expect-webdriverio "^4.12.0" gaze "^1.1.3" - webdriver "8.36.0" - webdriverio "8.36.0" + webdriver "8.38.2" + webdriverio "8.38.2" "@wdio/spec-reporter@^8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/spec-reporter/-/spec-reporter-8.36.0.tgz#e85f23145d8102fc86abaa3b5a135426458f8a08" - integrity sha512-GVOiWqVYvzoAo4/4hNVxvyVWVoHyEmAywYhkykyJGL05YpO0oDOZY2kINPePEX5Z+nIsXsiKPmtsGGqWsfQwTw== + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/spec-reporter/-/spec-reporter-8.38.2.tgz#703983f9f9279e9dcef9f5e95610fa63ca0fabc1" + integrity sha512-Dntk+lmrp+0I3HRRWkkXED+smshvgsW5cdLKwJhEJ1liI48MdBpdNGf9IHTVckE6nfxcWDyFI4icD9qYv/5bFA== dependencies: - "@wdio/reporter" "8.36.0" - "@wdio/types" "8.36.0" + "@wdio/reporter" "8.38.2" + "@wdio/types" "8.38.2" chalk "^5.1.2" easy-table "^1.2.0" pretty-ms "^7.0.0" -"@wdio/types@8.24.2": - version "8.24.2" - resolved "https://registry.yarnpkg.com/@wdio/types/-/types-8.24.2.tgz#1a4b53c1267ae0820255ec4991b319636f11fc20" - integrity sha512-x7iWF5NM8NfVxziGwLdQ+3sstgSxRoqfmmFEDTDps0oFrN5CgkqcoLkqXJ5u166gvpxpEq0gxZwxkbPC/Lp0cw== +"@wdio/types@8.38.2": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/types/-/types-8.38.2.tgz#00d6874ced6bc2b081d3d0d43808f95861bb0705" + integrity sha512-+wj1c1OSLdnN4WO5b44Ih4263dTl/eSwMGSI4/pCgIyXIuYQH38JQ+6WRa+c8vJEskUzboq2cSgEQumVZ39ozQ== dependencies: "@types/node" "^20.1.0" -"@wdio/types@8.32.4": - version "8.32.4" - resolved "https://registry.yarnpkg.com/@wdio/types/-/types-8.32.4.tgz#cc1965d5a802a09696b1ea9066e8b92f6977d51a" - integrity sha512-pDPGcCvq0MQF8u0sjw9m4aMI2gAKn6vphyBB2+1IxYriL777gbbxd7WQ+PygMBvYVprCYIkLPvhUFwF85WakmA== - dependencies: - "@types/node" "^20.1.0" - -"@wdio/types@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/types/-/types-8.36.0.tgz#f11248178b1ef372c7f09bc9f2eace3966dca2ed" - integrity sha512-0hw/PaJHqDrbIMvU08w3oMDGg89udSkqWF2hFlGAjOc20quRrhn0F1L+NhFpYdezeRKz5gpgTDIqaQs9RWKq1A== - dependencies: - "@types/node" "^20.1.0" - -"@wdio/utils@8.24.3": - version "8.24.3" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-8.24.3.tgz#e1504e5867b9db7214533a50b8ae59a3d7afe9e9" - integrity sha512-/thr+f2pn7z5wUWiyiFp7/JoJ30oHatyfuxKpcIBcjkv+YZbph0bbEBVv641UlmZxUMVVeXGvWMNdlWH7rMo7g== +"@wdio/utils@8.38.2": + version "8.38.2" + resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-8.38.2.tgz#d10b0cdeccf507b20ba94bdde0f91dd22fc35d49" + integrity sha512-y5AnBwsGcu/XuCBGCgKmlvKdwEIFyzLA+Cr+denySxY3jbWDONtPUcGaVdFALwsIa5jcIjcATqGmZcCPGnkd7g== dependencies: "@puppeteer/browsers" "^1.6.0" - "@wdio/logger" "8.16.17" - "@wdio/types" "8.24.2" + "@wdio/logger" "8.38.0" + "@wdio/types" "8.38.2" decamelize "^6.0.0" deepmerge-ts "^5.1.0" - edgedriver "^5.3.5" - geckodriver "^4.2.0" - get-port "^7.0.0" - got "^13.0.0" - import-meta-resolve "^3.0.0" - locate-app "^2.1.0" - safaridriver "^0.1.0" - split2 "^4.2.0" - wait-port "^1.0.4" - -"@wdio/utils@8.35.0": - version "8.35.0" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-8.35.0.tgz#d8e026bf62d5020e50ee1451af0f5e27f846680c" - integrity sha512-9KCyn4aS+9tWfthnUkNFVe52AM6QrLGAeIxgGxNlzTAcQGl7jjwdDM7aSK0RjLkWI3a/88DRH21mN/t2LGDmPQ== - dependencies: - "@puppeteer/browsers" "^1.6.0" - "@wdio/logger" "8.28.0" - "@wdio/types" "8.32.4" - decamelize "^6.0.0" - deepmerge-ts "^5.1.0" - edgedriver "^5.3.5" - geckodriver "^4.3.1" - get-port "^7.0.0" - import-meta-resolve "^4.0.0" - locate-app "^2.1.0" - safaridriver "^0.1.0" - split2 "^4.2.0" - wait-port "^1.0.4" - -"@wdio/utils@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@wdio/utils/-/utils-8.36.0.tgz#7389737cb17b7889c8e79bb4b1a458c045aeeccc" - integrity sha512-3VAbavN206qkvm6lITtOtTgscFChax7shzqHjUNln+QWMRyELtT81iw32ux2ld+Bg3F60LAmhbGodu0lJH7k2w== - dependencies: - "@puppeteer/browsers" "^1.6.0" - "@wdio/logger" "8.28.0" - "@wdio/types" "8.36.0" - decamelize "^6.0.0" - deepmerge-ts "^5.1.0" - edgedriver "^5.3.5" + edgedriver "^5.5.0" geckodriver "^4.3.1" get-port "^7.0.0" import-meta-resolve "^4.0.0" @@ -3146,6 +2730,11 @@ dependencies: "@xstate/machine-extractor" "^0.16.0" +"@zip.js/zip.js@^2.7.44": + version "2.7.45" + resolved "https://registry.yarnpkg.com/@zip.js/zip.js/-/zip.js-2.7.45.tgz#823fe2789401d8c1d836ce866578379ec1bd6f0b" + integrity sha512-Mm2EXF33DJQ/3GWWEWeP1UCqzpQ5+fiMvT3QWspsXY05DyqqxWu7a9awSzU4/spHMHVFrTjani1PR0vprgZpow== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -3159,19 +2748,21 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1, acorn-walk@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" -acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.11.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== dependencies: debug "^4.3.4" @@ -3244,18 +2835,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -archiver-utils@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-4.0.1.tgz#66ad15256e69589a77f706c90c6dbcc1b2775d2a" - integrity sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg== - dependencies: - glob "^8.0.0" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash "^4.17.15" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - archiver-utils@^5.0.0, archiver-utils@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-5.0.2.tgz#63bc719d951803efc72cf961a56ef810760dd14d" @@ -3269,19 +2848,6 @@ archiver-utils@^5.0.0, archiver-utils@^5.0.2: normalize-path "^3.0.0" readable-stream "^4.0.0" -archiver@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-6.0.1.tgz#d56968d4c09df309435adb5a1bbfc370dae48133" - integrity sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ== - dependencies: - archiver-utils "^4.0.1" - async "^3.2.4" - buffer-crc32 "^0.2.1" - readable-stream "^3.6.0" - readdir-glob "^1.1.2" - tar-stream "^3.0.0" - zip-stream "^5.0.1" - archiver@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/archiver/-/archiver-7.0.1.tgz#c9d91c350362040b8927379c7aa69c0655122f61" @@ -3310,30 +2876,31 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.3.0, aria-query@^5.0.0, aria-query@^5.1.3: +aria-query@5.3.0, aria-query@^5.0.0, aria-query@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -3341,58 +2908,83 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== +array.prototype.findlastindex@^1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== - dependencies: - array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" asap@~2.0.3: @@ -3400,26 +2992,15 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -assert@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== ast-types@^0.13.4: version "0.13.4" @@ -3469,20 +3050,17 @@ autoprefixer@^10.4.19: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" -available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== - -axe-core@^4.6.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" - integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios@^0.26.1: version "0.26.1" @@ -3492,15 +3070,15 @@ axios@^0.26.1: follow-redirects "^1.14.8" axios@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" - integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.1.1: +axobject-query@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== @@ -3508,9 +3086,9 @@ axobject-query@^3.1.1: dequal "^2.0.3" b4a@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" - integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + version "1.6.6" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== babel-plugin-macros@^3.1.0: version "3.1.0" @@ -3521,16 +3099,16 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.4.10, babel-plugin-polyfill-corejs2@^0.4.4: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.4: +babel-plugin-polyfill-corejs3@^0.10.1, babel-plugin-polyfill-corejs3@^0.10.4: version "0.10.4" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== @@ -3538,27 +3116,12 @@ babel-plugin-polyfill-corejs3@^0.10.4: "@babel/helper-define-polyfill-provider" "^0.6.1" core-js-compat "^3.36.1" -babel-plugin-polyfill-corejs3@^0.8.2: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" - -babel-plugin-polyfill-regenerator@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3593,32 +3156,38 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bare-events@^2.0.0, bare-events@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.1.tgz#7b6d421f26a7a755e20bf580b727c84b807964c1" - integrity sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A== + version "2.4.2" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.4.2.tgz#3140cca7a0e11d49b3edc5041ab560659fd8e1f8" + integrity sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q== bare-fs@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.2.2.tgz#286bf54cc6f15f613bee6bb26f0c61c79fb14f06" - integrity sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.1.tgz#cdbd63dac7a552dfb2b87d18c822298d1efd213d" + integrity sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA== dependencies: bare-events "^2.0.0" - bare-os "^2.0.0" bare-path "^2.0.0" - streamx "^2.13.0" + bare-stream "^2.0.0" -bare-os@^2.0.0, bare-os@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.2.1.tgz#c94a258c7a408ca6766399e44675136c0964913d" - integrity sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w== +bare-os@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.4.0.tgz#5de5e3ba7704f459c9656629edca7cc736e06608" + integrity sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg== bare-path@^2.0.0, bare-path@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.0.tgz#830f17fd39842813ca77d211ebbabe238a88cb4c" - integrity sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.3.tgz#594104c829ef660e43b5589ec8daef7df6cedb3e" + integrity sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA== dependencies: bare-os "^2.1.0" +bare-stream@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.1.3.tgz#070b69919963a437cc9e20554ede079ce0a129b2" + integrity sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ== + dependencies: + streamx "^2.18.0" + base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" @@ -3642,19 +3211,14 @@ basic-auth@^2.0.1: safe-buffer "5.1.2" basic-ftp@^5.0.2: - version "5.0.3" - resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228" - integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g== - -big-integer@^1.6.17: - version "1.6.52" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + version "5.0.5" + resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" + integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary-install@^1.0.1: version "1.1.0" @@ -3665,14 +3229,6 @@ binary-install@^1.0.1: rimraf "^3.0.2" tar "^6.1.11" -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -3682,11 +3238,6 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3702,12 +3253,12 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-stdout@1.3.1: version "1.3.1" @@ -3715,29 +3266,24 @@ browser-stdout@1.3.1: integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + version "4.23.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" + caniuse-lite "^1.0.30001629" + electron-to-chromium "^1.4.796" node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -buffer-crc32@^0.2.1, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + update-browserslist-db "^1.0.16" buffer-crc32@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-1.0.0.tgz#a10993b9055081d55304bd9feb4a072de179f405" integrity sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" @@ -3755,11 +3301,6 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - cac@^6.7.14: version "6.7.14" resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" @@ -3783,22 +3324,16 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3815,15 +3350,15 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001599" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz#571cf4f3f1506df9bf41fcbb6d10d5d017817bce" - integrity sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA== +caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629: + version "1.0.30001636" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz#b15f52d2bdb95fad32c2f53c0b68032b85188a78" + integrity sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg== chai@^4.3.10: - version "4.3.10" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384" - integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" check-error "^1.0.3" @@ -3833,13 +3368,6 @@ chai@^4.3.10: pathval "^1.1.1" type-detect "^4.0.8" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3882,7 +3410,7 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" -chokidar@3.5.3, chokidar@^3.5.3: +chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3897,6 +3425,21 @@ chokidar@3.5.3, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -4023,16 +3566,6 @@ commander@^9.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -compress-commons@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-5.0.1.tgz#e46723ebbab41b50309b27a0e0f6f3baed2d6590" - integrity sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag== - dependencies: - crc-32 "^1.2.0" - crc32-stream "^5.0.0" - normalize-path "^3.0.0" - readable-stream "^3.6.0" - compress-commons@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-6.0.2.tgz#26d31251a66b9d6ba23a84064ecd3a6a71d2609e" @@ -4049,6 +3582,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +confbox@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.7.tgz#ccfc0a2bcae36a84838e83a3b7f770fb17d6c579" + integrity sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA== + confusing-browser-globals@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" @@ -4059,10 +3597,10 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.31.0, core-js-compat@^3.33.1, core-js-compat@^3.36.1: - version "3.36.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" - integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== +core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: browserslist "^4.23.0" @@ -4092,14 +3630,6 @@ crc-32@^1.2.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== -crc32-stream@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-5.0.0.tgz#a97d3a802c8687f101c27cc17ca5253327354720" - integrity sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw== - dependencies: - crc-32 "^1.2.0" - readable-stream "^3.4.0" - crc32-stream@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-6.0.0.tgz#8529a3868f8b27abb915f6c3617c0fadedbf9430" @@ -4179,9 +3709,9 @@ cssfontparser@^1.2.1: integrity sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg== csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== damerau-levenshtein@^1.0.8: version "1.0.8" @@ -4193,17 +3723,51 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -data-uri-to-buffer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz#540bd4c8753a25ee129035aebdedf63b078703c7" - integrity sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg== +data-uri-to-buffer@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b" + integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" debounce-promise@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/debounce-promise/-/debounce-promise-3.1.2.tgz#320fb8c7d15a344455cd33cee5ab63530b6dc7c5" integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg== -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + +debug@4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4235,9 +3799,9 @@ decompress-response@^6.0.0: mimic-response "^3.1.0" deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" @@ -4268,20 +3832,21 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -4304,43 +3869,21 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -detect-package-manager@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-3.0.1.tgz#ec9689915b47e2ecf3774118849bc7033f0a2151" - integrity sha512-qoHDH6+lMcpJPAScE7+5CYj91W0mxZNXTwZPrCqi1KMk+x+AoQScQ2V1QyqTln1rHU5Haq5fikvOGHv+leKD8A== - dependencies: - execa "^5.1.1" - devtools-protocol@0.0.1147663: version "0.0.1147663" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz#4ec5610b39a6250d1f87e6b9c7e16688ed0ac78e" integrity sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ== -devtools-protocol@^0.0.1213968: - version "0.0.1213968" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1213968.tgz#b2b4ab2ea412bdc30d7a843aedf97b5646e12e6f" - integrity sha512-o4n/beY+3CcZwFctYapjGelKptR4AuQT5gXS1Kvgbig+ArwkxK7f8wDVuD1wsoswiJWCwV6OK+Qb7vhNzNmABQ== - -devtools-protocol@^0.0.1273771: - version "0.0.1273771" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1273771.tgz#46aeb5db41417e2c2ad3d8367c598c975290b1a5" - integrity sha512-QDbb27xcTVReQQW/GHJsdQqGKwYBE7re7gxehj467kKP2DKuYBUj6i2k5LRiAC66J1yZG/9gsxooz/s9pcm0Og== - -devtools-protocol@^0.0.1282316: - version "0.0.1282316" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1282316.tgz#4b398549e48251a09bbad7056578f7ad376f9b81" - integrity sha512-i7eIqWdVxeXBY/M+v83yRkOV1sTHnr3XYiC0YNBivLIE6hBfE2H0c2o8VC5ynT44yjy+Ei0kLrBQFK/RUKaAHQ== +devtools-protocol@^0.0.1302984: + version "0.0.1302984" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1302984.tgz#4d8614264105394bfc39dd268121bd549a877f1a" + integrity sha512-Rgh2Sk5fUSCtEx4QGH9iwTyECdFPySG2nlz5J8guGh2Wlha6uzSOCq/DCEC8faHlLaMPZJMuZ4ovgcX4LvOkKA== didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -4357,9 +3900,9 @@ diff@^4.0.1: integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dir-glob@^3.0.1: version "3.0.1" @@ -4392,22 +3935,10 @@ dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== -dotenv@^16.0.3: - version "16.4.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" - integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== - -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" +dotenv@^16.0.3, dotenv@^16.3.1: + version "16.4.5" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== eastasianwidth@^0.2.0: version "0.2.0" @@ -4431,29 +3962,29 @@ edge-paths@^3.0.5: "@types/which" "^2.0.1" which "^2.0.2" -edgedriver@^5.3.5: - version "5.3.8" - resolved "https://registry.yarnpkg.com/edgedriver/-/edgedriver-5.3.8.tgz#ba304bd05a6696e0121df14b49c428af5eebf4e3" - integrity sha512-FWLPDuwJDeGGgtmlqTXb4lQi/HV9yylLo1F9O1g9TLqSemA5T6xH28seUIfyleVirLFtDQyKNUxKsMhMT4IfnA== +edgedriver@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/edgedriver/-/edgedriver-5.6.0.tgz#fea8d7ac9b328753fc250aceaeb6d1fbcf33fb87" + integrity sha512-IeJXEczG+DNYBIa9gFgVYTqrawlxmc9SUqUsWU2E98jOsO/amA7wzabKOS8Bwgr/3xWoyXCJ6yGFrbFKrilyyQ== dependencies: - "@wdio/logger" "^8.16.17" + "@wdio/logger" "^8.28.0" + "@zip.js/zip.js" "^2.7.44" decamelize "^6.0.0" edge-paths "^3.0.5" node-fetch "^3.3.2" - unzipper "^0.10.14" which "^4.0.0" ejs@^3.1.9: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.668: - version "1.4.713" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.713.tgz#7cd8e4083c948f8d0cc686fcfdde97d97fd76556" - integrity sha512-vDarADhwntXiULEdmWd77g2dV6FrNGa8ecAC29MZ4TwPut2fvosD0/5sJd1qWNNe8HcJFAC+F5Lf9jW1NPtWmw== +electron-to-chromium@^1.4.796: + version "1.4.803" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz#cf55808a5ee12e2a2778bbe8cdc941ef87c2093b" + integrity sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g== emoji-regex@^8.0.0: version "8.0.0" @@ -4484,66 +4015,112 @@ error-ex@^1.3.1, error-ex@^1.3.2: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" + which-typed-array "^1.1.15" -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: +es-define-property@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: - has "^1.0.3" + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -4554,39 +4131,39 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" @@ -4639,19 +4216,19 @@ eslint-config-react-app@^7.0.1: eslint-plugin-react-hooks "^4.3.0" eslint-plugin-testing-library "^5.0.1" -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -4672,28 +4249,27 @@ eslint-plugin-flowtype@^8.0.3: string-natural-compare "^3.0.1" eslint-plugin-import@^2.25.3: - version "2.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz#8d66d6925117b06c4018d491ae84469eb3cb1005" - integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.12.1" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" - resolve "^1.22.3" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" eslint-plugin-jest@^25.3.0: version "25.7.0" @@ -4703,57 +4279,65 @@ eslint-plugin-jest@^25.3.0: "@typescript-eslint/experimental-utils" "^5.0.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.27.1: - version "7.33.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz#bc27cccf860ae45413a4a4150bf0977345c1ceab" - integrity sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA== + version "7.34.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz#2780a1a35a51aca379d86d29b9a72adc6bfe6b66" + integrity sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" + es-iterator-helpers "^1.0.19" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.hasown "^1.1.4" + object.values "^1.2.0" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.11" + +eslint-plugin-suggest-no-throw@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-suggest-no-throw/-/eslint-plugin-suggest-no-throw-1.0.0.tgz#facc852aa9acd5e0f4d5e0aff71d6a186e3be8e8" + integrity sha512-IoSDNVeH9WRC9T4Nm3HResFthgiPEW8e6YkKzichJ4fZwac0T8qBQ/8qjmv9NeRSEw8q2EbN/THLE/UU38J46g== eslint-plugin-testing-library@^5.0.1: - version "5.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz#0bad7668e216e20dd12f8c3652ca353009163121" - integrity sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q== + version "5.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz#5b46cdae96d4a78918711c0b4792f90088e62d20" + integrity sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw== dependencies: "@typescript-eslint/utils" "^5.58.0" @@ -4897,21 +4481,6 @@ events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -4933,9 +4502,9 @@ exenv@^1.2.0: integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== expect-webdriverio@^4.11.2, expect-webdriverio@^4.12.0: - version "4.12.2" - resolved "https://registry.yarnpkg.com/expect-webdriverio/-/expect-webdriverio-4.12.2.tgz#de11b380b7659f861538a51f522a547eb0258692" - integrity sha512-tmfOzPWTWzGa0678Ru5qmGX1g8v3AtDdK4Ko64WV4l3jSrcudMTxCOyeY0LWSN30923BBqZaWJwlx/u+T6UNBw== + version "4.15.1" + resolved "https://registry.yarnpkg.com/expect-webdriverio/-/expect-webdriverio-4.15.1.tgz#3fa8e7ea2dc2b0548aeeda4daae55f2fdd3505c8" + integrity sha512-xtBSidt7Whs1fsUC+utxVzfmkmaStXWW17b+BcMCiCltx0Yku6l7BTv1Y14DEKX8L6rttaDQobYyRtBKbi4ssg== dependencies: "@vitest/snapshot" "^1.2.2" expect "^29.7.0" @@ -4946,32 +4515,7 @@ expect-webdriverio@^4.11.2, expect-webdriverio@^4.12.0: "@wdio/logger" "^8.28.0" webdriverio "^8.29.3" -expect-webdriverio@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/expect-webdriverio/-/expect-webdriverio-4.6.1.tgz#edace801d8fb573d076f491218748b06050161de" - integrity sha512-w6ee91kN3BoxNGVKQheAqFpRGMehdDg7kDiErEk/oM7tbd/WUT4R4v9KYOUtjiaUFHWWCRW2FtcOOjcd0+1pvQ== - dependencies: - expect "^29.7.0" - jest-matcher-utils "^29.7.0" - lodash.isequal "^4.5.0" - optionalDependencies: - "@wdio/globals" "^8.23.1" - "@wdio/logger" "^8.16.17" - webdriverio "^8.23.1" - -expect@^29.0.0: - version "29.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521" - integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA== - dependencies: - "@jest/expect-utils" "^29.6.2" - "@types/node" "*" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.2" - jest-message-util "^29.6.2" - jest-util "^29.6.2" - -expect@^29.7.0: +expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -5012,7 +4556,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.1.0, fast-fifo@^1.2.0: +fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== @@ -5044,9 +4588,9 @@ fast-safe-stringify@^2.1.1: integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -5117,10 +4661,10 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -5167,10 +4711,10 @@ flux@^4.0.1: fbemitter "^3.0.0" fbjs "^3.0.1" -follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.15.0: - version "1.15.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" - integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== +follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3: version "0.3.3" @@ -5180,9 +4724,9 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -5227,14 +4771,14 @@ fraction.js@^4.3.7: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== dependencies: graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + jsonfile "^6.0.1" + universalify "^2.0.0" fs-minipass@^2.0.0: version "2.1.0" @@ -5258,37 +4802,22 @@ fsevents@~2.3.2, fsevents@~2.3.3: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -5305,32 +4834,18 @@ gaze@^1.1.3: dependencies: globule "^1.0.0" -geckodriver@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.2.1.tgz#03ad628241417737b962966aa8f8b13fa0f8bf75" - integrity sha512-4m/CRk0OI8MaANRuFIahvOxYTSjlNAO2p9JmE14zxueknq6cdtB5M9UGRQ8R9aMV0bLGNVHHDnDXmoXdOwJfWg== - dependencies: - "@wdio/logger" "^8.11.0" - decamelize "^6.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - node-fetch "^3.3.1" - tar-fs "^3.0.4" - unzipper "^0.10.14" - which "^4.0.0" - geckodriver@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.3.3.tgz#c74cce91acdc1e057f4dfc6bb3ae069a7f910411" - integrity sha512-we2c2COgxFkLVuoknJNx+ioP+7VDq0sr6SCqWHTzlA4kzIbzR0EQ1Pps34s8WrsOnQqPC8a4sZV9dRPROOrkSg== + version "4.4.1" + resolved "https://registry.yarnpkg.com/geckodriver/-/geckodriver-4.4.1.tgz#b39b26a17f9166038702743f5722b6d83e0483f6" + integrity sha512-nnAdIrwLkMcDu4BitWXF23pEMeZZ0Cj7HaWWFdSpeedBP9z6ft150JYiGO2mwzw6UiR823Znk1JeIf07RyzloA== dependencies: "@wdio/logger" "^8.28.0" + "@zip.js/zip.js" "^2.7.44" decamelize "^6.0.0" http-proxy-agent "^7.0.2" https-proxy-agent "^7.0.4" node-fetch "^3.3.2" - tar-fs "^3.0.5" - unzipper "^0.10.14" + tar-fs "^3.0.6" which "^4.0.0" gensync@^1.0.0-beta.2: @@ -5343,35 +4858,26 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0, get-func-name@^2.0.1, get-func-name@^2.0.2: +get-func-name@^2.0.1, get-func-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" hasown "^2.0.0" get-port@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-7.0.0.tgz#ffcd83da826146529e307a341d7801cae351daff" - integrity sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-7.1.0.tgz#d5a500ebfc7aa705294ec2b83cc38c5d0e364fec" + integrity sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw== get-stream@^5.1.0: version "5.2.0" @@ -5380,7 +4886,7 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -5390,23 +4896,24 @@ get-stream@^8.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-uri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.2.tgz#e019521646f4a8ff6d291fbaea2c46da204bb75b" - integrity sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a" + integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw== dependencies: basic-ftp "^5.0.2" - data-uri-to-buffer "^6.0.0" + data-uri-to-buffer "^6.0.2" debug "^4.3.4" - fs-extra "^8.1.0" + fs-extra "^11.2.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -5422,40 +4929,27 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.0.0, glob@^10.2.2: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob@^10.0.0, glob@^10.2.2, glob@^10.3.10: + version "10.4.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + path-scurry "^1.11.1" glob@^7.1.3: version "7.2.3" @@ -5469,17 +4963,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@~7.1.1: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -5505,11 +4988,12 @@ globals@^13.19.0: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.1.0: version "11.1.0" @@ -5545,9 +5029,9 @@ gonzales-pe@^4.3.0: minimist "^1.2.5" goober@^2.1.10: - version "2.1.13" - resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.13.tgz#e3c06d5578486212a76c9eba860cbc3232ff6d7c" - integrity sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ== + version "2.1.14" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.14.tgz#4a5c94fc34dc086a8e6035360ae1800005135acd" + integrity sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg== gopd@^1.0.1: version "1.0.1" @@ -5556,7 +5040,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -"got@^ 12.6.1", got@^12.6.1: +got@^12.6.1: version "12.6.1" resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== @@ -5573,24 +5057,7 @@ gopd@^1.0.1: p-cancelable "^3.0.0" responselike "^3.0.0" -got@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/got/-/got-13.0.0.tgz#a2402862cef27a5d0d1b07c0fb25d12b58175422" - integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5606,9 +5073,9 @@ graphemer@^1.4.0: integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== happy-dom@^14.3.10: - version "14.3.10" - resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-14.3.10.tgz#666583e895b1ce58dd39d11745c5bbc3b54f6d85" - integrity sha512-Rh5li9vA9MF9Gkg85CbFABKTa3uoSAByILRNGb92u/vswDd561gBg2p1UW1ZauvDWWwRxPcbACK5zv3BR+gHnQ== + version "14.12.0" + resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-14.12.0.tgz#40c748578c6ebfb707e6ae69179d6c541d8f63b3" + integrity sha512-dHcnlGFY2o2CdxfuYpqwSrBrpj/Kuzv4u4f3TU5yHW1GL24dKij4pv1BRjXnXc3uWo8qsCbToF9weaDsm/He8A== dependencies: entities "^4.5.0" webidl-conversions "^7.0.0" @@ -5629,55 +5096,34 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.1.1" + es-define-property "^1.0.0" -has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-tostringtag@^1.0.1: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -5694,9 +5140,9 @@ hoist-non-react-statics@^3.3.0: react-is "^16.7.0" hosted-git-info@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" - integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" @@ -5708,9 +5154,9 @@ html-encoding-sniffer@^3.0.0: whatwg-encoding "^2.0.0" html2canvas-pro@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/html2canvas-pro/-/html2canvas-pro-1.4.3.tgz#100124e2d17d4de483700ce03176d7447e90d49f" - integrity sha512-RB36SrUGxT9PTjImC7BsGxTinaI3y8cEne76ACdw+E7nRmeJ0jgDntxUP15B9Q9AM2mvEPN6SZo6zmkzwk8HKg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/html2canvas-pro/-/html2canvas-pro-1.5.0.tgz#18925def43505bad352a394b95fffb45d6d46a8f" + integrity sha512-izxSphcINRwfEVV6eamsPVdhsxSYqX8n/hxzK+niVWdB+onM+aYRoVO+xgS9iMmZoUleZTWg1tJwryikib2hXg== dependencies: css-line-break "^2.1.0" text-segmentation "^1.0.3" @@ -5720,15 +5166,7 @@ http-cache-semantics@^4.1.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -http-proxy-agent@^7.0.2: +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== @@ -5772,15 +5210,7 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" -https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - -https-proxy-agent@^7.0.4: +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== @@ -5788,11 +5218,6 @@ https-proxy-agent@^7.0.4: agent-base "^7.0.2" debug "4" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - human-signals@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" @@ -5823,9 +5248,9 @@ ieee754@^1.1.13, ieee754@^1.2.1: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immediate@~3.0.5: version "3.0.6" @@ -5840,15 +5265,10 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-meta-resolve@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-3.1.1.tgz#75d194ae465d17c15736f414734310c87d4c45d7" - integrity sha512-qeywsE/KC3w9Fd2ORrRDUw6nS/nLwZpXgfrOc2IILvZYnCaEMd+D56Vfg9k4G29gIeVi3XKql1RQatME8iYsiw== - import-meta-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz#0b1195915689f60ab00f830af0f15cc841e8919e" - integrity sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA== + version "4.1.0" + resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== imurmurhash@^0.1.4: version "0.1.4" @@ -5868,7 +5288,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5894,47 +5314,43 @@ inquirer@9.2.12: strip-ansi "^6.0.1" wrap-ansi "^6.2.0" -internal-slot@^1.0.3, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" -ip@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -5962,21 +5378,21 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.9.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-core-module@^2.13.0, is-core-module@^2.8.1: +is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1: version "2.13.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" -is-date-object@^1.0.1: +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -5988,12 +5404,19 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -6012,18 +5435,15 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" @@ -6060,14 +5480,19 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-stream@^2.0.0, is-stream@^2.0.1: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== @@ -6091,14 +5516,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typed-array@^1.1.3: +is-typed-array@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -6115,6 +5533,11 @@ is-unicode-supported@^1.2.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -6122,6 +5545,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -6155,35 +5586,36 @@ isomorphic-ws@^5.0.0: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^3.1.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.1" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.1.tgz#8dc96b7fcc41cb19aa502af506da4e1d56f5e62b" + integrity sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w== dependencies: async "^3.2.3" chalk "^4.0.2" filelist "^1.0.4" minimatch "^3.1.2" -jest-diff@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.2.tgz#c36001e5543e82a0805051d3ceac32e6825c1c46" - integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.6.2" - jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -6194,26 +5626,11 @@ jest-diff@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== - jest-get-type@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-matcher-utils@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535" - integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ== - dependencies: - chalk "^4.0.0" - jest-diff "^29.6.2" - jest-get-type "^29.4.3" - pretty-format "^29.6.2" - jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" @@ -6224,21 +5641,6 @@ jest-matcher-utils@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-message-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" - integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.6.2" - slash "^3.0.0" - stack-utils "^2.0.3" - jest-message-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" @@ -6254,18 +5656,6 @@ jest-message-util@^29.7.0: slash "^3.0.0" stack-utils "^2.0.3" -jest-util@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" - integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== - dependencies: - "@jest/types" "^29.6.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" @@ -6278,19 +5668,19 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^1.21.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== joi@^17.11.0: - version "17.11.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" - integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== + version "17.13.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.1.tgz#9c7b53dc3b44dd9ae200255cc3b398874918a6ca" + integrity sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg== dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" + "@hapi/hoek" "^9.3.0" + "@hapi/topo" "^5.1.0" + "@sideway/address" "^4.1.5" "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" @@ -6299,10 +5689,10 @@ joi@^17.11.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^8.0.2: - version "8.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" - integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== +js-tokens@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.0.tgz#0f893996d6f3ed46df7f0a3b12a03f5fd84223c1" + integrity sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ== js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" @@ -6311,6 +5701,11 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -6332,14 +5727,14 @@ json-parse-even-better-errors@^2.3.0: integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-parse-even-better-errors@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0" - integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" + integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== json-rpc-2.0@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/json-rpc-2.0/-/json-rpc-2.0-1.6.0.tgz#60770ca98f663376126af7335ed2d30164691c89" - integrity sha512-+pKxaoIqnA5VjXmZiAI1+CkFG7mHLg+dhtliOe/mp1P5Gdn8P5kE/Xxp2CUBwnGL7pfw6gC8zWTWekhSnKzHFA== + version "1.7.0" + resolved "https://registry.yarnpkg.com/json-rpc-2.0/-/json-rpc-2.0-1.7.0.tgz#840deb0bc168463e12bceb462f7fe225e793fc17" + integrity sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg== json-schema-traverse@^0.4.1: version "0.4.1" @@ -6363,19 +5758,16 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -6407,17 +5799,17 @@ ky@^0.33.0: resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" lazystream@^1.0.0: version "1.0.1" @@ -6441,11 +5833,16 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -lilconfig@^2.0.5, lilconfig@^2.1.0: +lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -6456,11 +5853,6 @@ lines-and-columns@^2.0.3: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - local-pkg@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" @@ -6470,11 +5862,11 @@ local-pkg@^0.5.0: pkg-types "^1.0.3" locate-app@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/locate-app/-/locate-app-2.1.0.tgz#97bbbeb3be59eec55368d20f69c77ebaaddacac1" - integrity sha512-rcVo/iLUxrd9d0lrmregK/Z5Y5NCpSwf9KlMbPpOHmKmdxdQY1Fj8NDQ5QymJTryCsBLqwmniFv2f3JKbk9Bvg== + version "2.4.15" + resolved "https://registry.yarnpkg.com/locate-app/-/locate-app-2.4.15.tgz#e64c4fafea3e41bab4a18ed98df79e6bfe6f6566" + integrity sha512-oAGHATXPUHSQ74Om+3dXBRNYtCzU7Wzuhlj/WIZchqHb/5/TGJRzLEtHipMDOak0UZG9U365RMXyBzgV/fhOww== dependencies: - n12 "0.4.0" + "@promptbook/utils" "0.50.0-10" type-fest "2.13.0" userhome "1.0.0" @@ -6566,9 +5958,9 @@ loglevel-plugin-prefix@^0.8.4: integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g== loglevel@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== + version "1.9.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" + integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" @@ -6577,14 +5969,7 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loupe@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" - -loupe@^2.3.7: +loupe@^2.3.6, loupe@^2.3.7: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== @@ -6596,10 +5981,10 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== lru-cache@^5.1.1: version "5.1.1" @@ -6608,13 +5993,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lru-cache@^7.14.1: version "7.18.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" @@ -6626,9 +6004,9 @@ lz-string@^1.5.0: integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.30.5: - version "0.30.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" - integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== + version "0.30.10" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -6653,11 +6031,11 @@ meshoptimizer@~0.18.1: integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -6723,10 +6101,10 @@ minimatch@^5.0.1, minimatch@^5.1.0: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^9.0.0, minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: brace-expansion "^2.0.1" @@ -6754,10 +6132,10 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.1.1: version "2.1.2" @@ -6777,7 +6155,7 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -"mkdirp@>=0.5 0", mkdirp@^0.5.6: +mkdirp@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -6789,30 +6167,20 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mlly@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" - integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== - dependencies: - acorn "^8.9.0" - pathe "^1.1.1" - pkg-types "^1.0.3" - ufo "^1.1.2" - -mlly@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== +mlly@^1.4.2, mlly@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.1.tgz#e0336429bb0731b6a8e887b438cbdae522c8f32f" + integrity sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA== dependencies: acorn "^8.11.3" pathe "^1.1.2" - pkg-types "^1.0.3" - ufo "^1.3.2" + pkg-types "^1.1.1" + ufo "^1.5.3" mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -6821,13 +6189,12 @@ mocha@^10.0.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -6836,6 +6203,11 @@ mocha@^10.0.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" +moment@2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -6860,16 +6232,6 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -n12@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/n12/-/n12-0.4.0.tgz#363058560b435e6857b5e039ed5eab08c5122e5e" - integrity sha512-p/hj4zQ8d3pbbFLQuN1K9honUxiDDhueOWyFLw/XgBv+wZCE44bcLH4CIcsolOceJQduh4Jf7m/LfaTxyGmGtQ== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -6895,7 +6257,7 @@ node-domexception@^1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@3.3.2, node-fetch@^3.3.1, node-fetch@^3.3.2: +node-fetch@3.3.2, node-fetch@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== @@ -6904,29 +6266,22 @@ node-fetch@3.3.2, node-fetch@^3.3.1, node-fetch@^3.3.2: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" -node-fetch@^2.6.1: +node-fetch@^2.6.1, node-fetch@^2.6.12: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.12: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== - dependencies: - whatwg-url "^5.0.0" - node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" - integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.1.tgz#fa69e9452210f0fabf4d79ee08d0c2870c51ed88" + integrity sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ== dependencies: hosted-git-info "^7.0.0" is-core-module "^2.8.1" @@ -6944,21 +6299,14 @@ normalize-range@^0.1.2: integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -6972,83 +6320,71 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.12.0: +object-inspect@^1.12.0, object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== +object.entries@^1.1.7, object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.7, object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== +object.groupby@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.21.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== +object.hasown@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -7057,7 +6393,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7082,16 +6418,16 @@ opener@^1.5.1: integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" ora@^5.4.1: version "5.4.1" @@ -7168,12 +6504,11 @@ pac-proxy-agent@^7.0.0, pac-proxy-agent@^7.0.1: socks-proxy-agent "^8.0.2" pac-resolver@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" - integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6" + integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== dependencies: degenerator "^5.0.0" - ip "^1.1.8" netmask "^2.0.2" pako@~1.0.2: @@ -7236,7 +6571,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -7251,12 +6586,12 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-type@^4.0.0: @@ -7264,7 +6599,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: +pathe@^1.1.1, pathe@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== @@ -7279,10 +6614,10 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -7306,26 +6641,26 @@ pixelmatch@^5.3.0: dependencies: pngjs "^6.0.0" -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== +pkg-types@^1.0.3, pkg-types@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.1.tgz#07b626880749beb607b0c817af63aac1845a73f2" + integrity sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ== dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" + confbox "^0.1.7" + mlly "^1.7.0" + pathe "^1.1.2" -playwright-core@1.43.1: - version "1.43.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.43.1.tgz#0eafef9994c69c02a1a3825a4343e56c99c03b02" - integrity sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg== +playwright-core@1.44.1: + version "1.44.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.44.1.tgz#53ec975503b763af6fc1a7aa995f34bc09ff447c" + integrity sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA== -playwright@1.43.1: - version "1.43.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.43.1.tgz#8ad08984ac66c9ef3d0db035be54dd7ec9f1c7d9" - integrity sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA== +playwright@1.44.1: + version "1.44.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.44.1.tgz#5634369d777111c1eea9180430b7a184028e7892" + integrity sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg== dependencies: - playwright-core "1.43.1" + playwright-core "1.44.1" optionalDependencies: fsevents "2.3.2" @@ -7348,6 +6683,11 @@ portfinder@^1.0.28: debug "^3.2.7" mkdirp "^0.5.6" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + postcss-import@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" @@ -7365,12 +6705,12 @@ postcss-js@^4.0.1: camelcase-css "^2.0.1" postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" postcss-nested@^6.0.1: version "6.0.1" @@ -7380,9 +6720,9 @@ postcss-nested@^6.0.1: postcss-selector-parser "^6.0.11" postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -7411,6 +6751,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + prettier@^2.8.0, prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" @@ -7425,16 +6770,7 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.6.2: - version "29.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47" - integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== - dependencies: - "@jest/schemas" "^29.6.0" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.7.0: +pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -7523,9 +6859,9 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== puppeteer-core@^20.9.0: version "20.9.0" @@ -7545,11 +6881,11 @@ pure-color@^1.2.0: integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== qs@^6.4.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" query-selector-shadow-dom@^1.0.0: version "1.0.1" @@ -7579,9 +6915,9 @@ randombytes@^2.1.0: safe-buffer "^5.1.0" re-resizable@^6.9.11: - version "6.9.11" - resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.11.tgz#f356e27877f12d926d076ab9ad9ff0b95912b475" - integrity sha512-a3hiLWck/NkmyLvGWUuvkAmN1VhwAz4yOhS6FdMTaxCUVN9joIWkT11wsO68coG/iEYuwn+p/7qAmfQzRhiPLQ== + version "6.9.17" + resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.17.tgz#78e4349934ff24a8fcb4b6b5a43ff9ed5f319d2a" + integrity sha512-OBqd1BwVXpEJJn/yYROG+CbeqIDBWIp6wathlpB0kzZWWZIY1gPTsgK2yJEui5hOvkCdC2mcexF2V3DZVfLq2g== react-base16-styling@^0.6.0: version "0.6.0" @@ -7594,12 +6930,12 @@ react-base16-styling@^0.6.0: pure-color "^1.2.0" react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-fast-compare@^2.0.1: version "2.0.4" @@ -7629,9 +6965,9 @@ react-is@^17.0.1: integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-json-view@^1.21.3: version "1.21.3" @@ -7684,9 +7020,9 @@ react-router@6.23.1: "@remix-run/router" "1.16.1" react-textarea-autosize@^8.3.2: - version "8.5.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz#6421df2b5b50b9ca8c5e96fd31be688ea7fa2f9d" - integrity sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg== + version "8.5.3" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz#d1e9fe760178413891484847d3378706052dd409" + integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -7706,16 +7042,16 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-10.1.0.tgz#2d13ab732d2f05d6e8094167c2112e2ee50644f4" - integrity sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA== +read-pkg-up@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-10.0.0.tgz#0542d21ff1001d2bfff1f6eac8b4d1d1dc486617" + integrity sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g== dependencies: find-up "^6.3.0" - read-pkg "^8.1.0" - type-fest "^4.2.0" + read-pkg "^8.0.0" + type-fest "^3.12.0" -read-pkg@^8.1.0: +read-pkg@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" integrity sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ== @@ -7725,7 +7061,7 @@ read-pkg@^8.1.0: parse-json "^7.0.0" type-fest "^4.2.0" -readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: +readable-stream@^2.0.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -7738,7 +7074,7 @@ readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -7773,14 +7109,14 @@ readdirp@~3.6.0: picomatch "^2.2.1" recast@^0.23.1: - version "0.23.4" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" - integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== + version "0.23.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" + integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== dependencies: - assert "^2.0.0" ast-types "^0.16.1" esprima "~4.0.0" source-map "~0.6.1" + tiny-invariant "^1.3.3" tslib "^2.0.1" recursive-readdir@^2.2.3: @@ -7798,10 +7134,23 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -7810,10 +7159,10 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -7822,14 +7171,15 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpu-core@^5.3.1: version "5.3.2" @@ -7870,7 +7220,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.3: +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -7879,12 +7229,12 @@ resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7920,13 +7270,6 @@ rgb2hex@0.2.5: resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.2.5.tgz#f82230cd3ab1364fa73c99be3a691ed688f8dbdc" integrity sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw== -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -7942,25 +7285,28 @@ rollup@^2.77.2: fsevents "~2.3.2" rollup@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" - integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg== + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.13.0" - "@rollup/rollup-android-arm64" "4.13.0" - "@rollup/rollup-darwin-arm64" "4.13.0" - "@rollup/rollup-darwin-x64" "4.13.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.13.0" - "@rollup/rollup-linux-arm64-gnu" "4.13.0" - "@rollup/rollup-linux-arm64-musl" "4.13.0" - "@rollup/rollup-linux-riscv64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-musl" "4.13.0" - "@rollup/rollup-win32-arm64-msvc" "4.13.0" - "@rollup/rollup-win32-ia32-msvc" "4.13.0" - "@rollup/rollup-win32-x64-msvc" "4.13.0" + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" run-async@^3.0.0: @@ -7983,17 +7329,17 @@ rxjs@^7.8.1: tslib "^2.1.0" safaridriver@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/safaridriver/-/safaridriver-0.1.0.tgz#8ff901e847b003c6a52b534028f57cddc82d6b14" - integrity sha512-azzzIP3gR1TB9bVPv7QO4Zjw0rR1BWEU/s2aFdUMN48gxDjxEB13grAEuXDmkKPgE74cObymDxmAmZnL3clj4w== + version "0.1.2" + resolved "https://registry.yarnpkg.com/safaridriver/-/safaridriver-0.1.2.tgz#166571d5881c7d6f884900d92d51ee1309c05aa4" + integrity sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg== -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -8007,13 +7353,13 @@ safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": @@ -8021,10 +7367,10 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -8033,17 +7379,15 @@ secure-compare@3.0.1: resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== -semver@^6.3.0, semver@^6.3.1: +semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.5, semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== serialize-error@^11.0.1: version "11.0.3" @@ -8059,18 +7403,29 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" -setimmediate@^1.0.5, setimmediate@~1.0.4: +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -8087,21 +7442,22 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" siginfo@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -8127,20 +7483,20 @@ smart-buffer@^4.2.0: integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^8.0.1, socks-proxy-agent@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + version "8.0.3" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d" + integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A== dependencies: - agent-base "^7.0.2" + agent-base "^7.1.1" debug "^4.3.4" socks "^2.7.1" socks@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + version "2.8.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== dependencies: - ip "^2.0.0" + ip-address "^9.0.5" smart-buffer "^4.2.0" source-map-js@^1.2.0: @@ -8153,6 +7509,11 @@ source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spacetrim@0.11.25: + version "0.11.25" + resolved "https://registry.yarnpkg.com/spacetrim/-/spacetrim-0.11.25.tgz#9c941f36ea22c7ac3d1b0e63b2d5b5ec16e6cb6f" + integrity sha512-SWxXDROciuJs9YEYXUBjot5k/cqNGPPbT3QmkInFne4AGc1y+76It+jqU8rfsXKt57RRiunzZn1m9+KfuuNklw== + spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" @@ -8162,9 +7523,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -8175,15 +7536,20 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.18" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" + integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== split2@^4.1.0, split2@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -8202,28 +7568,21 @@ std-env@^3.5.0: integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== stream-buffers@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" - integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.3.tgz#9fc6ae267d9c4df1190a781e011634cac58af3cd" + integrity sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw== -streamx@^2.13.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" - integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== +streamx@^2.15.0, streamx@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.18.0.tgz#5bc1a51eb412a667ebfdcd4e6cf6a6fc65721ac7" + integrity sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ== dependencies: - fast-fifo "^1.1.0" + fast-fifo "^1.3.2" queue-tick "^1.0.1" + text-decoder "^1.1.0" optionalDependencies: bare-events "^2.2.0" -streamx@^2.15.0: - version "2.15.5" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.5.tgz#87bcef4dc7f0b883f9359671203344a4e004c7f1" - integrity sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg== - dependencies: - fast-fifo "^1.1.0" - queue-tick "^1.0.1" - strict-event-emitter-types@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz#05e15549cb4da1694478a53543e4e2f4abcf277f" @@ -8252,46 +7611,51 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== +string.prototype.matchall@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" @@ -8326,11 +7690,6 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-final-newline@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" @@ -8349,30 +7708,25 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.1: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" - integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.0.tgz#6d82ade5e2e74f5c7e8739b6c84692bd65f0bd2a" + integrity sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw== dependencies: - js-tokens "^8.0.2" + js-tokens "^9.0.0" -style-mod@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.3.tgz#136c4abc905f82a866a18b39df4dc08ec762b1ad" - integrity sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw== - -style-mod@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.0.tgz#a313a14f4ae8bb4d52878c0053c4327fb787ec09" - integrity sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA== +style-mod@^4.0.0, style-mod@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" + integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -8413,9 +7767,9 @@ swr@^2.2.5: use-sync-external-store "^1.2.0" tailwindcss@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" - integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== + version "3.4.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.4.tgz#351d932273e6abfa75ce7d226b5bf3a6cb257c05" + integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -8425,7 +7779,7 @@ tailwindcss@^3.4.1: fast-glob "^3.3.0" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.19.1" + jiti "^1.21.0" lilconfig "^2.1.0" micromatch "^4.0.5" normalize-path "^3.0.0" @@ -8440,7 +7794,7 @@ tailwindcss@^3.4.1: resolve "^1.22.2" sucrase "^3.32.0" -tar-fs@3.0.4, tar-fs@^3.0.4: +tar-fs@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== @@ -8449,10 +7803,10 @@ tar-fs@3.0.4, tar-fs@^3.0.4: pump "^3.0.0" tar-stream "^3.1.5" -tar-fs@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.5.tgz#f954d77767e4e6edf973384e1eb95f8f81d64ed9" - integrity sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg== +tar-fs@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== dependencies: pump "^3.0.0" tar-stream "^3.1.5" @@ -8461,9 +7815,9 @@ tar-fs@^3.0.5: bare-path "^2.1.0" tar-stream@^3.0.0, tar-stream@^3.1.5: - version "3.1.6" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" - integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== dependencies: b4a "^1.6.4" fast-fifo "^1.2.0" @@ -8481,6 +7835,13 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" +text-decoder@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.1.0.tgz#3379e728fcf4d3893ec1aea35e8c2cac215ef190" + integrity sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw== + dependencies: + b4a "^1.6.4" + text-segmentation@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" @@ -8517,15 +7878,20 @@ through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tiny-invariant@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tinybench@^2.5.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" - integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.8.0.tgz#30e19ae3a27508ee18273ffed9ac7018949acd7b" + integrity sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw== tinypool@^0.8.3: version "0.8.4" @@ -8561,11 +7927,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -8591,14 +7952,14 @@ ts-node@^10.9.1, ts-node@^10.9.2: yn "3.1.1" tsconfck@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.3.tgz#d9bda0e87d05b1c360e996c9050473c7e6f8084f" - integrity sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.0.tgz#30c63b15972b591adb41dc9a339a02743d090c81" + integrity sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w== -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" @@ -8611,9 +7972,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tslib@~2.4: version "2.4.1" @@ -8659,79 +8020,74 @@ type-fest@^2.12.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-fest@^3.8.0: +type-fest@^3.12.0, type-fest@^3.8.0: version "3.13.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== type-fest@^4.2.0: - version "4.8.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.8.2.tgz#20d4cc287745723dbabf925de644eeb7de0349c1" - integrity sha512-mcvrCjixA5166hSrUoJgGb9gBQN4loMYyj9zxuMs/66ibHNEFd5JXMw37YVDx58L4/QID9jIzdTBB4mDwDJ6KQ== + version "4.20.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.20.1.tgz#d97bb1e923bf524e5b4b43421d586760fb2ee8be" + integrity sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" typescript@^5.4.5: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== -ua-parser-js@^1.0.35: - version "1.0.35" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" - integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== +ua-parser-js@^1.0.35, ua-parser-js@^1.0.37: + version "1.0.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" + integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== -ua-parser-js@^1.0.37: - version "1.0.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" - integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== - -ufo@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.2.0.tgz#28d127a087a46729133fdc89cb1358508b3f80ba" - integrity sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg== - -ufo@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" - integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== +ufo@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== unbox-primitive@^1.0.2: version "1.0.2" @@ -8786,34 +8142,18 @@ union@~0.5.0: dependencies: qs "^6.4.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unzipper@^0.10.14: - version "0.10.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" - integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== +update-browserslist-db@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -8844,11 +8184,16 @@ use-latest@^1.2.1: dependencies: use-isomorphic-layout-effect "^1.1.1" -use-sync-external-store@1.2.0, use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + userhome@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/userhome/-/userhome-1.0.0.tgz#b6491ff12d21a5e72671df9ccc8717e1c6688c0b" @@ -8859,17 +8204,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - utrie@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" @@ -8930,11 +8264,11 @@ vite-tsconfig-paths@^4.3.2: tsconfck "^3.0.3" vite@^5.0.0, vite@^5.2.9: - version "5.2.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.9.tgz#cd9a356c6ff5f7456c09c5ce74068ffa8df743d9" - integrity sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw== + version "5.3.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.1.tgz#bb2ca6b5fd7483249d3e86b25026e27ba8a663e6" + integrity sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ== dependencies: - esbuild "^0.20.1" + esbuild "^0.21.3" postcss "^8.4.38" rollup "^4.13.0" optionalDependencies: @@ -9044,116 +8378,53 @@ wcwidth@^1.0.1: defaults "^1.0.3" web-streams-polyfill@^3.0.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== web-vitals@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.5.2.tgz#5bb58461bbc173c3f00c2ddff8bfe6e680999ca9" integrity sha512-c0rhqNcHXRkY/ogGDJQxZ9Im9D19hDihbzSQJrsioex+KnFgmMzBiy57Z1EjkhX/+OjyBpclDCzz2ITtjokFmg== -webdriver@8.24.3: - version "8.24.3" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-8.24.3.tgz#d3ad434226ef62e8d1296f1c6435e03fec53b74d" - integrity sha512-GbD1X7WzSh2ssb/U52K5RyChKgcPjNDZft5RmHJa1ieT2biTEHAqZycHxNBcpExAlwGlw91hmpoNbwPfdFORRw== +webdriver@8.38.2: + version "8.38.2" + resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-8.38.2.tgz#e109844d19f516f7de261f4825daca95516564e7" + integrity sha512-NGfjW0BDYwFgOIzeojOcWGn3tYloQdvHr+Y2xKKYVqa9Rs0x1mzlTjU1kWtC4DaV8DltskwaPa7o+s8hTNpuyA== dependencies: "@types/node" "^20.1.0" "@types/ws" "^8.5.3" - "@wdio/config" "8.24.3" - "@wdio/logger" "8.16.17" - "@wdio/protocols" "8.23.0" - "@wdio/types" "8.24.2" - "@wdio/utils" "8.24.3" - deepmerge-ts "^5.1.0" - got "^ 12.6.1" - ky "^0.33.0" - ws "^8.8.0" - -webdriver@8.35.0: - version "8.35.0" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-8.35.0.tgz#e55f7bd839b3aafbda05d3117c28f22a4e533b72" - integrity sha512-D13EroddIXDqdq3jgO8j6sorgTWqTwEiTqwlDoJizpRIgHGBy+UjkNM7XW1yVcvt8gsD2Dei2LQth2tJEnu5Ng== - dependencies: - "@types/node" "^20.1.0" - "@types/ws" "^8.5.3" - "@wdio/config" "8.35.0" - "@wdio/logger" "8.28.0" - "@wdio/protocols" "8.32.0" - "@wdio/types" "8.32.4" - "@wdio/utils" "8.35.0" + "@wdio/config" "8.38.2" + "@wdio/logger" "8.38.0" + "@wdio/protocols" "8.38.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" deepmerge-ts "^5.1.0" got "^12.6.1" ky "^0.33.0" ws "^8.8.0" -webdriver@8.36.0: - version "8.36.0" - resolved "https://registry.yarnpkg.com/webdriver/-/webdriver-8.36.0.tgz#2fa0a6d06f9b21283051d3337f9df4041c21660b" - integrity sha512-6fmZI1+OCGbhuGMLBLvA7m9TJvHU1Cyzxqd8rGzIyb8hocR53yh/olfOL1BPcjU1NXmKuU1BePSGF+yiKajiEA== +webdriverio@8.38.2, webdriverio@^8.29.3: + version "8.38.2" + resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-8.38.2.tgz#5a53205cecfb9e2d3bdb1de0400e1194c1d08029" + integrity sha512-r09y5UfivyYh5JOzT2SpJJ1zDmQl/R4OTH12opUqkjvp21BibCQm/uu1mrxGy4lzSHljrvqSVrrcGI+6UA1O8w== dependencies: "@types/node" "^20.1.0" - "@types/ws" "^8.5.3" - "@wdio/config" "8.36.0" - "@wdio/logger" "8.28.0" - "@wdio/protocols" "8.32.0" - "@wdio/types" "8.36.0" - "@wdio/utils" "8.36.0" - deepmerge-ts "^5.1.0" - got "^12.6.1" - ky "^0.33.0" - ws "^8.8.0" - -webdriverio@8.24.3, webdriverio@^8.23.1: - version "8.24.3" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-8.24.3.tgz#2defb305fc8d7c1fe179d97a5f4618d79e0cd9c2" - integrity sha512-c0IkkGkJtxxpuO53DfeN9UlHmEKSeKCWCREJBzEkpHrjveVlfhh8cQBacLdUzJwE61xByNDH1cu1RVXKL+ZEJw== - dependencies: - "@types/node" "^20.1.0" - "@wdio/config" "8.24.3" - "@wdio/logger" "8.16.17" - "@wdio/protocols" "8.23.0" - "@wdio/repl" "8.23.1" - "@wdio/types" "8.24.2" - "@wdio/utils" "8.24.3" - archiver "^6.0.0" - aria-query "^5.0.0" - css-shorthand-properties "^1.1.1" - css-value "^0.0.1" - devtools-protocol "^0.0.1213968" - grapheme-splitter "^1.0.2" - import-meta-resolve "^3.0.0" - is-plain-obj "^4.1.0" - lodash.clonedeep "^4.5.0" - lodash.zip "^4.2.0" - minimatch "^9.0.0" - puppeteer-core "^20.9.0" - query-selector-shadow-dom "^1.0.0" - resq "^1.9.1" - rgb2hex "0.2.5" - serialize-error "^11.0.1" - webdriver "8.24.3" - -webdriverio@8.36.0: - version "8.36.0" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-8.36.0.tgz#2634c67bc547e236177fa29fff96f5467da272ec" - integrity sha512-4WnEI+OxslHpfSnDXuADaR6bL1M7QxBUEF1mTN56AroOCJelyPvt94yRhszwQnLcJJB2OLn49eUz8M4yBCB51w== - dependencies: - "@types/node" "^20.1.0" - "@wdio/config" "8.36.0" - "@wdio/logger" "8.28.0" - "@wdio/protocols" "8.32.0" + "@wdio/config" "8.38.2" + "@wdio/logger" "8.38.0" + "@wdio/protocols" "8.38.0" "@wdio/repl" "8.24.12" - "@wdio/types" "8.36.0" - "@wdio/utils" "8.36.0" + "@wdio/types" "8.38.2" + "@wdio/utils" "8.38.2" archiver "^7.0.0" aria-query "^5.0.0" css-shorthand-properties "^1.1.1" css-value "^0.0.1" - devtools-protocol "^0.0.1282316" + devtools-protocol "^0.0.1302984" grapheme-splitter "^1.0.2" import-meta-resolve "^4.0.0" is-plain-obj "^4.1.0" + jszip "^3.10.1" lodash.clonedeep "^4.5.0" lodash.zip "^4.2.0" minimatch "^9.0.0" @@ -9162,37 +8433,7 @@ webdriverio@8.36.0: resq "^1.9.1" rgb2hex "0.2.5" serialize-error "^11.0.1" - webdriver "8.36.0" - -webdriverio@^8.29.3: - version "8.35.1" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-8.35.1.tgz#1b46e496399e59db29c02aa26515607c606ce760" - integrity sha512-YAuKR4JERGiMqCJmm5fEVZ160iiFPyupwALqfXfzrYVcEmKltKPFY/oUCArmi6Uzqd+Sa2Kp9WZtz2Eu1R76JA== - dependencies: - "@types/node" "^20.1.0" - "@wdio/config" "8.35.0" - "@wdio/logger" "8.28.0" - "@wdio/protocols" "8.32.0" - "@wdio/repl" "8.24.12" - "@wdio/types" "8.32.4" - "@wdio/utils" "8.35.0" - archiver "^7.0.0" - aria-query "^5.0.0" - css-shorthand-properties "^1.1.1" - css-value "^0.0.1" - devtools-protocol "^0.0.1273771" - grapheme-splitter "^1.0.2" - import-meta-resolve "^4.0.0" - is-plain-obj "^4.1.0" - lodash.clonedeep "^4.5.0" - lodash.zip "^4.2.0" - minimatch "^9.0.0" - puppeteer-core "^20.9.0" - query-selector-shadow-dom "^1.0.0" - resq "^1.9.1" - rgb2hex "0.2.5" - serialize-error "^11.0.1" - webdriver "8.35.0" + webdriver "8.38.2" webidl-conversions@^3.0.0: version "3.0.1" @@ -9212,9 +8453,9 @@ whatwg-encoding@^2.0.0: iconv-lite "0.6.3" whatwg-fetch@^3.4.1: - version "3.6.18" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz#2f640cdee315abced7daeaed2309abd1e44e62d4" - integrity sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^3.0.0: version "3.0.0" @@ -9240,27 +8481,44 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.10, which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" + function.prototype.name "^1.1.5" has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.1" + has-tostringtag "^1.0.2" which@^2.0.1, which@^2.0.2: version "2.0.2" @@ -9284,6 +8542,11 @@ why-is-node-running@^2.2.2: siginfo "^2.0.0" stackback "0.0.2" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" @@ -9327,14 +8590,14 @@ ws@8.13.0: integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== ws@^7.0.0: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.17.0, ws@^8.8.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" - integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== "xstate-beta@npm:xstate@beta": version "5.0.0-beta.54" @@ -9366,10 +8629,10 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== +yaml@^2.3.4: + version "2.4.5" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" + integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== yargs-parser@20.2.4: version "20.2.4" @@ -9463,15 +8726,6 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== -zip-stream@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-5.0.1.tgz#cf3293bba121cad98be2ec7f05991d81d9f18134" - integrity sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA== - dependencies: - archiver-utils "^4.0.1" - compress-commons "^5.0.1" - readable-stream "^3.6.0" - zip-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-6.0.1.tgz#e141b930ed60ccaf5d7fa9c8260e0d1748a2bbfb"