From 5c50ecfb42d043c88d6eaa4878a9be8c8cc10d3f Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 6 Mar 2024 18:07:06 +0100 Subject: [PATCH] text(react): cleanup tests, add onNodesChange tests --- .../components/reactflow/basic-props.cy.tsx | 2 +- .../reactflow/on-nodes-change.cy.tsx | 138 ++++++++ examples/react/cypress/e2e/basic.cy.ts | 38 +-- .../react/cypress/support/ControlledFlow.tsx | 2 +- examples/react/cypress/support/commands.ts | 2 +- examples/react/cypress/support/e2e.ts | 1 + examples/react/package.json | 4 +- examples/react/tsconfig.json | 2 +- pnpm-lock.yaml | 309 ++++++++++-------- 9 files changed, 330 insertions(+), 168 deletions(-) create mode 100644 examples/react/cypress/components/reactflow/on-nodes-change.cy.tsx diff --git a/examples/react/cypress/components/reactflow/basic-props.cy.tsx b/examples/react/cypress/components/reactflow/basic-props.cy.tsx index c8ac818a..a0738eff 100644 --- a/examples/react/cypress/components/reactflow/basic-props.cy.tsx +++ b/examples/react/cypress/components/reactflow/basic-props.cy.tsx @@ -6,7 +6,7 @@ import * as simpleflow from '../../fixtures/simpleflow'; describe(': Basic Props', () => { describe('uses defaultNodes and defaultEdges', () => { beforeEach(() => { - cy.mount(); + cy.mount(); }); it('mounts nodes and edges', () => { diff --git a/examples/react/cypress/components/reactflow/on-nodes-change.cy.tsx b/examples/react/cypress/components/reactflow/on-nodes-change.cy.tsx new file mode 100644 index 00000000..a15fc67e --- /dev/null +++ b/examples/react/cypress/components/reactflow/on-nodes-change.cy.tsx @@ -0,0 +1,138 @@ +import { useCallback, useState } from 'react'; +import { OnNodesChange, Panel, ReactFlow, ReactFlowProps, applyNodeChanges, useReactFlow, Node } from '@xyflow/react'; + +const nodes = [ + { + id: '1', + data: { label: 'Node 1' }, + position: { x: 0, y: 0 }, + style: { width: 100, height: 40 }, + }, + { + id: '2', + data: { label: 'Node 2' }, + position: { x: 200, y: 200 }, + style: { width: 80, height: 50 }, + }, +]; + +describe(': onNodesChange', () => { + beforeEach(() => { + const onNodesChange = cy.spy().as('onNodesChange'); + cy.mount().wait(500); + }); + + it('receive initial dimension change', () => { + const expectedChanges = nodes.map((n) => ({ + type: 'dimensions', + id: n.id, + dimensions: n.style, + })); + + cy.get('@onNodesChange').should('have.callCount', 1); + cy.get('@onNodesChange').should('have.calledWith', expectedChanges); + }); + + it('receive replace and dimension change', () => { + const expectedDimensionChanges = [ + { + type: 'dimensions', + id: '1', + dimensions: { width: 200, height: 100 }, + }, + ]; + + const expectedReplaceChanges = [ + { + type: 'replace', + id: '1', + item: { + ...nodes[0], + computed: { positionAbsolute: nodes[0].position, width: 200, height: 100 }, + style: { width: 200, height: 100 }, + }, + }, + ]; + + cy.get('[data-id=update-btn]').click(); + + cy.get('@onNodesChange').should('have.callCount', 3); + cy.get('@onNodesChange').then((s) => { + // dimension change (already checked above) + // const firstCall = s.getCall(0); + // replace change + // @ts-ignore + const secondChangeCallArgs = s.getCall(1).args[0]; + // dimension change + // @ts-ignore + const thirdChangeCallArgs = s.getCall(2).args[0]; + + expect(secondChangeCallArgs).to.be.deep.eq(expectedReplaceChanges); + expect(thirdChangeCallArgs).to.be.deep.eq(expectedDimensionChanges); + }); + }); + + it('receive select and unselect change', () => { + const expectedSelectChanges = [{ id: '1', type: 'select', selected: true }]; + const expectedUnselectChanges = [{ id: '1', type: 'select', selected: false }]; + + cy.get('.react-flow__node').first().click(); + cy.get('@onNodesChange').should('have.calledWith', expectedSelectChanges); + + cy.get('.react-flow__pane').first().click({ force: true }); + cy.get('@onNodesChange').should('have.calledWith', expectedUnselectChanges); + }); + + it('receive position change', () => { + const endPosition = { x: 200, y: 25 }; + const expectedChanges = [ + { id: '1', type: 'position', dragging: false, position: endPosition, positionAbsolute: endPosition }, + ]; + + cy.drag('.react-flow__node:first', endPosition).then(() => { + cy.get('@onNodesChange').should('have.calledWith', expectedChanges); + }); + }); + + it('receive remove change', () => { + const expectedChanges = [{ id: '1', type: 'remove' }]; + + cy.get('.react-flow__node').first().click(); + cy.realPress('Backspace'); + + cy.get('@onNodesChange').should('have.calledWith', expectedChanges); + }); +}); + +// test specific helpers + +function UpdateButton() { + const { updateNode } = useReactFlow(); + const updateNodeDimensions = () => { + updateNode('1', { style: { width: 200, height: 100 } }); + }; + + return ( + + + + ); +} + +type CompProps = ReactFlowProps & { onNodesChange: (changes: any) => void }; + +function Comp(props: CompProps) { + const [nodes, setNodes] = useState(props.nodes || []); + const onNodesChange: OnNodesChange = useCallback((changes) => { + props.onNodesChange(changes); + setNodes((nds) => applyNodeChanges(changes, nds)); + }, []); + + return ( + + + + ); +} diff --git a/examples/react/cypress/e2e/basic.cy.ts b/examples/react/cypress/e2e/basic.cy.ts index 8328a307..07c7e4c4 100644 --- a/examples/react/cypress/e2e/basic.cy.ts +++ b/examples/react/cypress/e2e/basic.cy.ts @@ -49,21 +49,16 @@ describe('Basic Flow Rendering', { testIsolation: false }, () => { it('selects one node with a selection', () => { cy.get('body') - .type('{shift}', { release: false }) - .wait(50) + .type('{Shift}', { release: false }) .get('.react-flow__pane') .trigger('mousedown', 1, 10, { button: 0, force: true }) - .trigger('mousemove', 1000, 450, { button: 0 }) - .wait(50) - .trigger('mouseup', 1000, 450, { button: 0, force: true }); + .trigger('mousemove', 1000, 200, { button: 0 }) + .trigger('mouseup', 1000, 200, { button: 0 }); - cy.wait(200); - - cy.get('.react-flow__node').eq(1).should('have.class', 'selected'); + cy.get('.react-flow__node').eq(0).should('have.class', 'selected'); cy.get('.react-flow__node').eq(3).should('have.not.class', 'selected'); cy.get('.react-flow__nodesselection-rect'); - cy.get('body').type('{shift}', { release: true, force: true }); }); @@ -103,13 +98,13 @@ describe('Basic Flow Rendering', { testIsolation: false }, () => { }); }); - // @TODO: why does this fail since react18? - // it('removes a node', () => { - // cy.get('.react-flow__node').contains('Node 1').click().should('have.class', 'selected'); - // cy.get('html').type('{backspace}').wait(100); - // cy.get('.react-flow__node').should('have.length', 3); - // cy.get('.react-flow__edge').should('have.length', 1); - // }); + it('removes a node', () => { + cy.get('.react-flow__node').contains('Node 1').click().should('have.class', 'selected'); + cy.get('html').realPress('Backspace'); + + cy.get('.react-flow__node').should('have.length', 3); + cy.get('.react-flow__edge').should('have.length', 1); + }); it('connects nodes', () => { cy.get('.react-flow__node') @@ -128,13 +123,12 @@ describe('Basic Flow Rendering', { testIsolation: false }, () => { cy.get('@edge').should('have.length', 3); }); - // @TODO: why does this fail since react18? - // it('removes an edge', () => { - // cy.get('.react-flow__edge:first').click(); - // cy.get('body').type('{backspace}'); + it('removes an edge', () => { + cy.get('.react-flow__edge:first').click(); + cy.get('html').realPress('Backspace'); - // cy.get('.react-flow__edge').should('have.length', 1); - // }); + cy.get('.react-flow__edge').should('have.length', 1); + }); it('drags the pane', () => { const styleBeforeDrag = Cypress.$('.react-flow__viewport').css('transform'); diff --git a/examples/react/cypress/support/ControlledFlow.tsx b/examples/react/cypress/support/ControlledFlow.tsx index eaa560bf..8474b81e 100644 --- a/examples/react/cypress/support/ControlledFlow.tsx +++ b/examples/react/cypress/support/ControlledFlow.tsx @@ -59,7 +59,7 @@ function ControlledFlow({ handlers.onConnect = onConnect; } - return ; + return ; } export default ControlledFlow; diff --git a/examples/react/cypress/support/commands.ts b/examples/react/cypress/support/commands.ts index e138e4cf..3a350dc5 100644 --- a/examples/react/cypress/support/commands.ts +++ b/examples/react/cypress/support/commands.ts @@ -9,7 +9,7 @@ Cypress.Commands.add('drag', (selector, { x, y }) => const nextY: number = centerY + y; return elementToDrag - .trigger('mousedown', { view: window }) + .trigger('mousedown', { view: window, force: true }) .trigger('mousemove', nextX, nextY, { force: true }) .wait(50) .trigger('mouseup', { view: window, force: true }); diff --git a/examples/react/cypress/support/e2e.ts b/examples/react/cypress/support/e2e.ts index d153dd3e..29be4a69 100644 --- a/examples/react/cypress/support/e2e.ts +++ b/examples/react/cypress/support/e2e.ts @@ -15,6 +15,7 @@ // Import commands.js using ES2015 syntax: import './commands'; +import 'cypress-real-events/support'; const resizeObserverLoopErrRe = /^[^(ResizeObserver loop limit exceeded)]/; diff --git a/examples/react/package.json b/examples/react/package.json index 36dd09a6..24bbee4a 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -30,8 +30,8 @@ "@types/react-dom": "^18.2.14", "@vitejs/plugin-react": "4.1.1", "@vitejs/plugin-react-swc": "^3.4.1", - "cypress": "12.17.3", - "cypress-real-events": "1.11.0", + "cypress": "13.6.6", + "cypress-real-events": "1.12.0", "start-server-and-test": "^2.0.2", "typescript": "5.2.2", "vite": "4.5.0" diff --git a/examples/react/tsconfig.json b/examples/react/tsconfig.json index 7156a499..0519e0a8 100644 --- a/examples/react/tsconfig.json +++ b/examples/react/tsconfig.json @@ -15,7 +15,7 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "types": ["cypress", "cypress-real-events"] + "types": ["cypress", "node", "cypress-real-events"] }, "include": ["**/*.ts", "**/*.tsx"], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71f83eda..905cbf65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,10 +61,10 @@ importers: dependencies: '@astrojs/react': specifier: ^3.0.2 - version: 3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.2) + version: 3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.0) '@astrojs/svelte': specifier: ^4.0.2 - version: 4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.3.3)(vite@4.5.2) + version: 4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.2.2)(vite@4.5.0) '@types/react': specifier: ^18.2.24 version: 18.2.24 @@ -136,11 +136,11 @@ importers: specifier: ^3.4.1 version: 3.4.1(vite@4.5.0) cypress: - specifier: 12.17.3 - version: 12.17.3 + specifier: 13.6.6 + version: 13.6.6 cypress-real-events: - specifier: 1.11.0 - version: 1.11.0(cypress@12.17.3) + specifier: 1.12.0 + version: 1.12.0(cypress@13.6.6) start-server-and-test: specifier: ^2.0.2 version: 2.0.2 @@ -149,7 +149,7 @@ importers: version: 5.2.2 vite: specifier: 4.5.0 - version: 4.5.0 + version: 4.5.0(@types/node@18.7.16) examples/svelte: dependencies: @@ -204,7 +204,7 @@ importers: version: 5.2.2 vite: specifier: ^4.5.0 - version: 4.5.0 + version: 4.5.0(@types/node@18.7.16) packages/react: dependencies: @@ -399,7 +399,7 @@ importers: dependencies: '@playwright/experimental-ct-react': specifier: ^1.42.1 - version: 1.42.1(@types/node@18.7.16)(vite@5.1.5) + version: 1.42.1(@types/node@18.7.16)(vite@4.5.0) '@types/react': specifier: ^18.2.31 version: 18.2.31 @@ -528,7 +528,7 @@ packages: prismjs: 1.29.0 dev: false - /@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.2): + /@astrojs/react@3.0.2(@types/react-dom@18.2.8)(@types/react@18.2.24)(react-dom@18.2.0)(react@18.2.0)(vite@4.5.0): resolution: {integrity: sha512-aooNIuQxTg+IWGMZPuIEwBeBi4/TCPCMsr3714zuLjAjukVd5ZrX/bCNxJqDWU4HNwUm4XFU1OhcEvYOHa5uMQ==} engines: {node: '>=18.14.1'} peerDependencies: @@ -539,7 +539,7 @@ packages: dependencies: '@types/react': 18.2.24 '@types/react-dom': 18.2.8 - '@vitejs/plugin-react': 4.1.1(vite@4.5.2) + '@vitejs/plugin-react': 4.1.1(vite@4.5.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) ultrahtml: 1.5.2 @@ -548,17 +548,17 @@ packages: - vite dev: false - /@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.3.3)(vite@4.5.2): + /@astrojs/svelte@4.0.2(astro@3.2.2)(svelte@4.2.1)(typescript@5.2.2)(vite@4.5.0): resolution: {integrity: sha512-XB9Sexq+iW5aUpctDk6zuKHbWIAuPlAnZKbfgaS9VOaOUtx1t12crP9YoKEVcTifXYgoRuWWfeEAm2I8pYlLIQ==} engines: {node: '>=18.14.1'} peerDependencies: astro: ^3.0.11 svelte: ^3.55.0 || ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.5.2) + '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.5.0) astro: 3.2.2 svelte: 4.2.1 - svelte2tsx: 0.6.23(svelte@4.2.1)(typescript@5.3.3) + svelte2tsx: 0.6.23(svelte@4.2.1)(typescript@5.2.2) transitivePeerDependencies: - supports-color - typescript @@ -1214,8 +1214,8 @@ packages: dev: true optional: true - /@cypress/request@2.88.12: - resolution: {integrity: sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==} + /@cypress/request@3.0.1: + resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==} engines: {node: '>= 6'} dependencies: aws-sign2: 0.7.0 @@ -2039,13 +2039,13 @@ packages: - terser dev: false - /@playwright/experimental-ct-react@1.42.1(@types/node@18.7.16)(vite@5.1.5): + /@playwright/experimental-ct-react@1.42.1(@types/node@18.7.16)(vite@4.5.0): resolution: {integrity: sha512-/dxu7nkGOlZIx9MUGQPM5kiIGksYIBaaJKQuNmaJNV29V3VGI1p9yQqrvl1jFK/Hu7SC1LmFB8RlkrOgMiZKYg==} engines: {node: '>=16'} hasBin: true dependencies: '@playwright/experimental-ct-core': 1.42.1(@types/node@18.7.16) - '@vitejs/plugin-react': 4.2.1(vite@5.1.5) + '@vitejs/plugin-react': 4.2.1(vite@4.5.0) transitivePeerDependencies: - '@types/node' - less @@ -2321,7 +2321,7 @@ packages: sirv: 2.0.4 svelte: 4.2.12 tiny-glob: 0.2.9 - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) dev: true /@sveltejs/kit@2.5.2(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.1.5): @@ -2368,7 +2368,7 @@ packages: - typescript dev: true - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.2): + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.0): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} peerDependencies: @@ -2376,10 +2376,10 @@ packages: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.5.2) + '@sveltejs/vite-plugin-svelte': 2.4.6(svelte@4.2.1)(vite@4.5.0) debug: 4.3.4(supports-color@8.1.1) svelte: 4.2.1 - vite: 4.5.2 + vite: 4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color dev: false @@ -2395,7 +2395,7 @@ packages: '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@4.5.0) debug: 4.3.4(supports-color@8.1.1) svelte: 4.2.12 - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color @@ -2415,22 +2415,22 @@ packages: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.2): + /@sveltejs/vite-plugin-svelte@2.4.6(svelte@4.2.1)(vite@4.5.0): resolution: {integrity: sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==} engines: {node: ^14.18.0 || >= 16} peerDependencies: svelte: ^3.54.0 || ^4.0.0 vite: ^4.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.2) + '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.4.6)(svelte@4.2.1)(vite@4.5.0) debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.5 svelte: 4.2.1 svelte-hmr: 0.15.3(svelte@4.2.1) - vite: 4.5.2 - vitefu: 0.2.5(vite@4.5.2) + vite: 4.5.0(@types/node@18.7.16) + vitefu: 0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color dev: false @@ -2449,7 +2449,7 @@ packages: magic-string: 0.30.8 svelte: 4.2.12 svelte-hmr: 0.15.3(svelte@4.2.12) - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) vitefu: 0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -2912,14 +2912,18 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node@16.18.60: - resolution: {integrity: sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA==} - dev: true - /@types/node@18.7.16: resolution: {integrity: sha512-EQHhixfu+mkqHMZl1R2Ovuvn47PUw18azMJOTwSZr9/fhzHNGXAJ0ma0dayRVchprpCj0Kc1K1xKoWaATWF1qg==} requiresBuild: true + /@types/node@20.11.24: + resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} + requiresBuild: true + dependencies: + undici-types: 5.26.5 + dev: true + optional: true + /@types/normalize-package-data@2.4.3: resolution: {integrity: sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==} dev: true @@ -2993,8 +2997,8 @@ packages: resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} dev: true - /@types/sizzle@2.3.5: - resolution: {integrity: sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==} + /@types/sizzle@2.3.8: + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} dev: true /@types/unist@2.0.9: @@ -3009,7 +3013,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 18.7.16 + '@types/node': 20.11.24 dev: true optional: true @@ -3415,7 +3419,7 @@ packages: vite: ^4 dependencies: '@swc/core': 1.3.96 - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) transitivePeerDependencies: - '@swc/helpers' dev: true @@ -3431,28 +3435,11 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2) '@types/babel__core': 7.20.4 react-refresh: 0.14.0 - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color - dev: true - /@vitejs/plugin-react@4.1.1(vite@4.5.2): - resolution: {integrity: sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 - dependencies: - '@babel/core': 7.23.2 - '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.2) - '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2) - '@types/babel__core': 7.20.4 - react-refresh: 0.14.0 - vite: 4.5.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@vitejs/plugin-react@4.2.1(vite@5.1.5): + /@vitejs/plugin-react@4.2.1(vite@4.5.0): resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3463,7 +3450,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.24.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.5(@types/node@18.7.16) + vite: 4.5.0(@types/node@18.7.16) transitivePeerDependencies: - supports-color dev: false @@ -3732,7 +3719,7 @@ packages: undici: 5.26.5 unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0 + vite: 4.5.0(@types/node@18.7.16) vitefu: 0.2.5(vite@4.5.0) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -3981,6 +3968,17 @@ packages: set-function-length: 1.1.1 dev: true + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -4466,25 +4464,24 @@ packages: stream-transform: 2.1.3 dev: true - /cypress-real-events@1.11.0(cypress@12.17.3): - resolution: {integrity: sha512-4LXVRsyq+xBh5TmlEyO1ojtBXtN7xw720Pwb9rEE9rkJuXmeH3VyoR1GGayMGr+Itqf11eEjfDewtDmcx6PWPQ==} + /cypress-real-events@1.12.0(cypress@13.6.6): + resolution: {integrity: sha512-oiy+4kGKkzc2PT36k3GGQqkGxNiVypheWjMtfyi89iIk6bYmTzeqxapaLHS3pnhZOX1IEbTDUVxh8T4Nhs1tyQ==} peerDependencies: cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x || ^13.x dependencies: - cypress: 12.17.3 + cypress: 13.6.6 dev: true - /cypress@12.17.3: - resolution: {integrity: sha512-/R4+xdIDjUSLYkiQfwJd630S81KIgicmQOLXotFxVXkl+eTeVO+3bHXxdi5KBh/OgC33HWN33kHX+0tQR/ZWpg==} - engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} + /cypress@13.6.6: + resolution: {integrity: sha512-S+2S9S94611hXimH9a3EAYt81QM913ZVA03pUmGDfLTFa5gyp85NJ8dJGSlEAEmyRsYkioS1TtnWtbv/Fzt11A==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true requiresBuild: true dependencies: - '@cypress/request': 2.88.12 + '@cypress/request': 3.0.1 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/node': 16.18.60 '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.5 + '@types/sizzle': 2.3.8 arch: 2.2.0 blob-util: 2.0.2 bluebird: 3.7.2 @@ -4515,11 +4512,12 @@ packages: minimist: 1.2.8 ospath: 1.2.2 pretty-bytes: 5.6.0 + process: 0.11.10 proxy-from-env: 1.0.0 request-progress: 3.0.0 - semver: 7.5.4 + semver: 7.6.0 supports-color: 8.1.1 - tmp: 0.2.1 + tmp: 0.2.3 untildify: 4.0.0 yauzl: 2.10.0 dev: true @@ -4713,6 +4711,15 @@ packages: has-property-descriptors: 1.0.1 dev: true + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -4863,6 +4870,7 @@ packages: /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + requiresBuild: true dependencies: once: 1.4.0 @@ -4930,6 +4938,18 @@ packages: which-typed-array: 1.1.13 dev: true + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + /es-iterator-helpers@1.0.15: resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} dependencies: @@ -5782,6 +5802,17 @@ packages: hasown: 2.0.0 dev: true + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + dev: true + /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -5993,11 +6024,22 @@ packages: get-intrinsic: 1.2.2 dev: true + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -6016,6 +6058,13 @@ packages: dependencies: function-bind: 1.1.2 + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: @@ -6700,7 +6749,7 @@ packages: enquirer: 2.4.1 log-update: 4.0.0 p-map: 4.0.0 - rfdc: 1.3.0 + rfdc: 1.3.1 rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 @@ -8386,6 +8435,11 @@ packages: - supports-color dev: false + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -8446,7 +8500,7 @@ packages: resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 dev: true /querystringify@2.2.0: @@ -8690,7 +8744,7 @@ packages: /request-progress@3.0.0: resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} dependencies: - throttleit: 1.0.0 + throttleit: 1.0.1 dev: true /require-directory@2.1.1: @@ -8788,8 +8842,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} dev: true /rimraf@2.7.1: @@ -8970,6 +9024,18 @@ packages: has-property-descriptors: 1.0.1 dev: true + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} @@ -9038,6 +9104,16 @@ packages: object-inspect: 1.13.1 dev: true + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -9455,8 +9531,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.12 - svelte-preprocess: 5.1.3(postcss@8.4.21)(svelte@4.2.12)(typescript@5.1.3) - typescript: 5.1.3 + svelte-preprocess: 5.1.3(postcss@8.4.21)(svelte@4.2.12)(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -9564,7 +9640,7 @@ packages: dependencies: svelte: 4.2.12 - /svelte-preprocess@5.1.3(postcss@8.4.21)(svelte@4.2.12)(typescript@5.1.3): + /svelte-preprocess@5.1.3(postcss@8.4.21)(svelte@4.2.12)(typescript@5.2.2): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -9609,7 +9685,7 @@ packages: sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.12 - typescript: 5.1.3 + typescript: 5.2.2 dev: true /svelte-preprocess@5.1.3(postcss@8.4.31)(svelte@4.2.12)(typescript@5.2.2): @@ -9660,7 +9736,7 @@ packages: typescript: 5.2.2 dev: true - /svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.3.3): + /svelte2tsx@0.6.23(svelte@4.2.1)(typescript@5.2.2): resolution: {integrity: sha512-3bwd1PuWUA3oEXy8+85zrLDnmJOsVpShpKVAehGWeYsz/66zMihTpRpUN97VVAKTZbO5tP4wnchHUXYs0zOwdw==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 @@ -9669,7 +9745,7 @@ packages: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 4.2.1 - typescript: 5.3.3 + typescript: 5.2.2 dev: false /svelte2tsx@0.7.3(svelte@4.2.12)(typescript@5.1.3): @@ -9803,8 +9879,8 @@ packages: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} dev: true - /throttleit@1.0.0: - resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} + /throttleit@1.0.1: + resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} dev: true /through@2.3.8: @@ -9825,11 +9901,9 @@ packages: os-tmpdir: 1.0.2 dev: true - /tmp@0.2.1: - resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} - engines: {node: '>=8.17.0'} - dependencies: - rimraf: 3.0.2 + /tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} dev: true /to-fast-properties@2.0.0: @@ -10104,12 +10178,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: false - /ultrahtml@1.5.2: resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==} dev: false @@ -10123,6 +10191,12 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + requiresBuild: true + dev: true + optional: true + /undici@5.26.5: resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} engines: {node: '>=14.0'} @@ -10347,7 +10421,7 @@ packages: vfile-message: 3.1.4 dev: false - /vite@4.5.0: + /vite@4.5.0(@types/node@18.7.16): resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -10375,47 +10449,13 @@ packages: terser: optional: true dependencies: + '@types/node': 18.7.16 esbuild: 0.18.20 postcss: 8.4.31 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 - /vite@4.5.2: - resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.35 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /vite@5.1.5(@types/node@18.7.16): resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10459,18 +10499,7 @@ packages: vite: optional: true dependencies: - vite: 4.5.0 - - /vitefu@0.2.5(vite@4.5.2): - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 4.5.2 - dev: false + vite: 4.5.0(@types/node@18.7.16) /vitefu@0.2.5(vite@5.1.5): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}