diff --git a/e2e/react-start/basic/package.json b/e2e/react-start/basic/package.json index ae4d3939f5f..df7f459ed26 100644 --- a/e2e/react-start/basic/package.json +++ b/e2e/react-start/basic/package.json @@ -7,7 +7,9 @@ "dev": "vite dev --port 3000", "dev:e2e": "vite dev", "build": "vite build && tsc --noEmit", + "build:spa": "MODE=spa vite build && tsc --noEmit", "start": "pnpx srvx --prod -s ../client dist/server/server.js", + "start:spa": "node server.js", "test:e2e:spaMode": "rm -rf port*.txt; MODE=spa playwright test --project=chromium", "test:e2e:ssrMode": "rm -rf port*.txt; playwright test --project=chromium", "test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode" @@ -16,6 +18,8 @@ "@tanstack/react-router": "workspace:^", "@tanstack/react-router-devtools": "workspace:^", "@tanstack/react-start": "workspace:^", + "express": "^5.1.0", + "http-proxy-middleware": "^3.0.5", "react": "^19.0.0", "react-dom": "^19.0.0", "redaxios": "^0.5.1", diff --git a/e2e/react-start/basic/playwright.config.ts b/e2e/react-start/basic/playwright.config.ts index 42b2938b328..ef3f68c5edf 100644 --- a/e2e/react-start/basic/playwright.config.ts +++ b/e2e/react-start/basic/playwright.config.ts @@ -3,13 +3,18 @@ import { getDummyServerPort, getTestServerPort, } from '@tanstack/router-e2e-utils' -import { isSpaMode } from 'tests/utils/isSpaMode' +import { isSpaMode } from './tests/utils/isSpaMode' import packageJson from './package.json' with { type: 'json' } -const PORT = await getTestServerPort(packageJson.name) +const PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa' : ''}`, +) +const START_PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa_start' : ''}`, +) const EXTERNAL_PORT = await getDummyServerPort(packageJson.name) const baseURL = `http://localhost:${PORT}` -const spaModeCommand = `pnpm build && pnpm dev:e2e --port=${PORT}` +const spaModeCommand = `pnpm build:spa && pnpm start:spa` const ssrModeCommand = `pnpm build && pnpm start` console.log('running in spa mode: ', isSpaMode.toString()) @@ -39,6 +44,7 @@ export default defineConfig({ VITE_NODE_ENV: 'test', VITE_EXTERNAL_PORT: String(EXTERNAL_PORT), VITE_SERVER_PORT: String(PORT), + START_PORT: String(START_PORT), PORT: String(PORT), }, }, diff --git a/e2e/react-start/basic/server.js b/e2e/react-start/basic/server.js new file mode 100644 index 00000000000..d618ab4bce3 --- /dev/null +++ b/e2e/react-start/basic/server.js @@ -0,0 +1,67 @@ +import { toNodeHandler } from 'srvx/node' +import path from 'node:path' +import express from 'express' +import { createProxyMiddleware } from 'http-proxy-middleware' + +const port = process.env.PORT || 3000 + +const startPort = process.env.START_PORT || 3001 + +export async function createStartServer() { + const server = (await import('./dist/server/server.js')).default + const nodeHandler = toNodeHandler(server.fetch) + + const app = express() + + app.use(express.static('./dist/client')) + + app.use(async (req, res, next) => { + try { + await nodeHandler(req, res) + } catch (error) { + next(error) + } + }) + + return { app } +} + +export async function createSpaServer() { + const app = express() + + app.use( + '/api', + createProxyMiddleware({ + target: `http://localhost:${startPort}/api`, // Replace with your target server's URL + changeOrigin: false, // Needed for virtual hosted sites, + }), + ) + + app.use( + '/_serverFn', + createProxyMiddleware({ + target: `http://localhost:${startPort}/_serverFn`, // Replace with your target server's URL + changeOrigin: false, // Needed for virtual hosted sites, + }), + ) + + app.use(express.static('./dist/client')) + + app.get('/{*splat}', (req, res) => { + res.sendFile(path.resolve('./dist/client/index.html')) + }) + + return { app } +} + +createSpaServer().then(async ({ app }) => + app.listen(port, () => { + console.info(`Client Server: http://localhost:${port}`) + }), +) + +createStartServer().then(async ({ app }) => + app.listen(startPort, () => { + console.info(`Start Server: http://localhost:${startPort}`) + }), +) diff --git a/e2e/react-start/basic/tests/navigation.spec.ts b/e2e/react-start/basic/tests/navigation.spec.ts index 3eaac7453c0..a175e785899 100644 --- a/e2e/react-start/basic/tests/navigation.spec.ts +++ b/e2e/react-start/basic/tests/navigation.spec.ts @@ -1,7 +1,6 @@ import { expect } from '@playwright/test' import { test } from '@tanstack/router-e2e-utils' -import { isSpaMode } from 'tests/utils/isSpaMode' test.use({ whitelistErrors: [ @@ -19,7 +18,7 @@ test('Navigating to post', async ({ page }) => { test('Navigating to user', async ({ page }) => { await page.goto('/') - + await page.waitForURL('/') await page.getByRole('link', { name: 'Users' }).click() await page.getByRole('link', { name: 'Leanne Graham' }).click() await expect(page.getByRole('heading')).toContainText('Leanne Graham') @@ -27,6 +26,7 @@ test('Navigating to user', async ({ page }) => { test('Navigating nested layouts', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') await page.getByRole('link', { name: 'Layout', exact: true }).click() @@ -42,24 +42,24 @@ test('Navigating nested layouts', async ({ page }) => { test('client side navigating to a route with scripts', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') await page.getByRole('link', { name: 'Scripts', exact: true }).click() await expect(page.getByTestId('scripts-test-heading')).toBeInViewport() expect(await page.evaluate('window.SCRIPT_1')).toBe(true) - expect(await page.evaluate('window.SCRIPT_2')).toBe( - isSpaMode ? true : undefined, - ) + expect(await page.evaluate('window.SCRIPT_2')).toBe(undefined) }) test('directly going to a route with scripts', async ({ page }) => { await page.goto('/scripts') + await page.waitForURL('/scripts') + await page.waitForLoadState('networkidle') expect(await page.evaluate('window.SCRIPT_1')).toBe(true) - expect(await page.evaluate('window.SCRIPT_2')).toBe( - isSpaMode ? true : undefined, - ) + expect(await page.evaluate('window.SCRIPT_2')).toBe(undefined) }) test('Navigating to a not-found route', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') await page.getByRole('link', { name: 'This Route Does Not Exist' }).click() await page.getByRole('link', { name: 'Start Over' }).click() @@ -68,6 +68,7 @@ test('Navigating to a not-found route', async ({ page }) => { test('Should change title on client side navigation', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') await page.getByRole('link', { name: 'Posts' }).click() diff --git a/e2e/react-start/basic/tests/not-found.spec.ts b/e2e/react-start/basic/tests/not-found.spec.ts index ab1c94eee90..bde0a1a02a3 100644 --- a/e2e/react-start/basic/tests/not-found.spec.ts +++ b/e2e/react-start/basic/tests/not-found.spec.ts @@ -1,6 +1,7 @@ import { expect } from '@playwright/test' import combinateImport from 'combinate' import { test } from '@tanstack/router-e2e-utils' +import { isSpaMode } from '../tests/utils/isSpaMode' // somehow playwright does not correctly import default exports const combinate = (combinateImport as any).default as typeof combinateImport @@ -14,7 +15,7 @@ test.describe('not-found', () => { test(`global not found`, async ({ page }) => { const response = await page.goto(`/this-page-does-not-exist/foo/bar`) - expect(response?.status()).toBe(404) + expect(response?.status()).toBe(isSpaMode ? 200 : 404) await expect( page.getByTestId('default-not-found-component'), @@ -47,6 +48,7 @@ test.describe('not-found', () => { await expect( page.getByTestId(`via-${thrower}-notFound-component`), ).toBeInViewport() + await expect( page.getByTestId(`via-${thrower}-route-component`), ).not.toBeInViewport() diff --git a/e2e/react-start/basic/tests/redirect.spec.ts b/e2e/react-start/basic/tests/redirect.spec.ts index 9936c8c7ea3..e987c2abc89 100644 --- a/e2e/react-start/basic/tests/redirect.spec.ts +++ b/e2e/react-start/basic/tests/redirect.spec.ts @@ -12,7 +12,10 @@ import packageJson from '../package.json' with { type: 'json' } // somehow playwright does not correctly import default exports const combinate = (combinateImport as any).default as typeof combinateImport -const PORT = await getTestServerPort(packageJson.name) +const PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa' : ''}`, +) + const EXTERNAL_HOST_PORT = await getDummyServerPort(packageJson.name) test.describe('redirects', () => { @@ -65,7 +68,6 @@ test.describe('redirects', () => { await link.click() const url = `http://localhost:${PORT}/posts` - await page.waitForURL(url) expect(page.url()).toBe(url) await expect(page.getByTestId('PostsIndexComponent')).toBeInViewport() @@ -80,14 +82,6 @@ test.describe('redirects', () => { }) internalDirectVisitTestMatrix.forEach(({ thrower, reloadDocument }) => { - if (isSpaMode) { - test.use({ - whitelistErrors: [ - /A tree hydrated but some attributes of the server rendered HTML/, - ], - }) - } - test(`internal target, direct visit: thrower: ${thrower}, reloadDocument: ${reloadDocument}`, async ({ page, }) => { diff --git a/e2e/react-start/basic/tests/search-params.spec.ts b/e2e/react-start/basic/tests/search-params.spec.ts index e0762774ace..e3fe274c200 100644 --- a/e2e/react-start/basic/tests/search-params.spec.ts +++ b/e2e/react-start/basic/tests/search-params.spec.ts @@ -52,7 +52,9 @@ test.describe('/search-params/default', () => { page, }) => { const response = await page.goto('/search-params/default') - expectRedirect(response, '/search-params/default?default=d1') + if (!isSpaMode) { + expectRedirect(response, '/search-params/default?default=d1') + } await expect(page.getByTestId('search-default')).toContainText('d1') await expect(page.getByTestId('context-hello')).toContainText('world') expect( diff --git a/e2e/react-start/basic/vite.config.ts b/e2e/react-start/basic/vite.config.ts index 81ea0c795b3..b91cd686950 100644 --- a/e2e/react-start/basic/vite.config.ts +++ b/e2e/react-start/basic/vite.config.ts @@ -4,8 +4,6 @@ import { tanstackStart } from '@tanstack/react-start/plugin/vite' import viteReact from '@vitejs/plugin-react' import { isSpaMode } from './tests/utils/isSpaMode' -const spaMode = isSpaMode - const spaModeConfiguration = { enabled: true, prerender: { @@ -23,7 +21,7 @@ export default defineConfig({ }), // @ts-ignore we want to keep one test with verboseFileRoutes off even though the option is hidden tanstackStart({ - spa: spaMode ? spaModeConfiguration : undefined, + spa: isSpaMode ? spaModeConfiguration : undefined, }), viteReact(), ], diff --git a/e2e/solid-start/basic/package.json b/e2e/solid-start/basic/package.json index efff8adf93f..5d81c201165 100644 --- a/e2e/solid-start/basic/package.json +++ b/e2e/solid-start/basic/package.json @@ -7,7 +7,9 @@ "dev": "vite dev --port 3000", "dev:e2e": "vite dev", "build": "vite build && tsc --noEmit", + "build:spa": "MODE=spa vite build && tsc --noEmit", "start": "pnpx srvx --prod -s ../client dist/server/server.js", + "start:spa": "node server.js", "test:e2e:spaMode": "rm -rf port*.txt; MODE=spa playwright test --project=chromium", "test:e2e:ssrMode": "rm -rf port*.txt; playwright test --project=chromium", "test:e2e": "pnpm run test:e2e:spaMode && pnpm run test:e2e:ssrMode" @@ -16,6 +18,8 @@ "@tanstack/solid-router": "workspace:^", "@tanstack/solid-router-devtools": "workspace:^", "@tanstack/solid-start": "workspace:^", + "express": "^5.1.0", + "http-proxy-middleware": "^3.0.5", "redaxios": "^0.5.1", "solid-js": "^1.9.5", "tailwind-merge": "^2.6.0", diff --git a/e2e/solid-start/basic/playwright.config.ts b/e2e/solid-start/basic/playwright.config.ts index 8775f859a70..786244ff4ce 100644 --- a/e2e/solid-start/basic/playwright.config.ts +++ b/e2e/solid-start/basic/playwright.config.ts @@ -6,12 +6,18 @@ import { import packageJson from './package.json' with { type: 'json' } import { isSpaMode } from './tests/utils/isSpaMode' -const PORT = await getTestServerPort(packageJson.name) +const PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa' : ''}`, +) +const START_PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa_start' : ''}`, +) const EXTERNAL_PORT = await getDummyServerPort(packageJson.name) const baseURL = `http://localhost:${PORT}` -const spaModeCommand = `pnpm build && pnpm dev:e2e --port=${PORT}` +const spaModeCommand = `pnpm build:spa && pnpm start:spa` const ssrModeCommand = `pnpm build && pnpm start` +console.log('running in spa mode: ', isSpaMode.toString()) /** * See https://playwright.dev/docs/test-configuration. */ @@ -39,6 +45,7 @@ export default defineConfig({ VITE_NODE_ENV: 'test', VITE_EXTERNAL_PORT: String(EXTERNAL_PORT), VITE_SERVER_PORT: String(PORT), + START_PORT: String(START_PORT), PORT: String(PORT), }, }, diff --git a/e2e/solid-start/basic/server.js b/e2e/solid-start/basic/server.js new file mode 100644 index 00000000000..d618ab4bce3 --- /dev/null +++ b/e2e/solid-start/basic/server.js @@ -0,0 +1,67 @@ +import { toNodeHandler } from 'srvx/node' +import path from 'node:path' +import express from 'express' +import { createProxyMiddleware } from 'http-proxy-middleware' + +const port = process.env.PORT || 3000 + +const startPort = process.env.START_PORT || 3001 + +export async function createStartServer() { + const server = (await import('./dist/server/server.js')).default + const nodeHandler = toNodeHandler(server.fetch) + + const app = express() + + app.use(express.static('./dist/client')) + + app.use(async (req, res, next) => { + try { + await nodeHandler(req, res) + } catch (error) { + next(error) + } + }) + + return { app } +} + +export async function createSpaServer() { + const app = express() + + app.use( + '/api', + createProxyMiddleware({ + target: `http://localhost:${startPort}/api`, // Replace with your target server's URL + changeOrigin: false, // Needed for virtual hosted sites, + }), + ) + + app.use( + '/_serverFn', + createProxyMiddleware({ + target: `http://localhost:${startPort}/_serverFn`, // Replace with your target server's URL + changeOrigin: false, // Needed for virtual hosted sites, + }), + ) + + app.use(express.static('./dist/client')) + + app.get('/{*splat}', (req, res) => { + res.sendFile(path.resolve('./dist/client/index.html')) + }) + + return { app } +} + +createSpaServer().then(async ({ app }) => + app.listen(port, () => { + console.info(`Client Server: http://localhost:${port}`) + }), +) + +createStartServer().then(async ({ app }) => + app.listen(startPort, () => { + console.info(`Start Server: http://localhost:${startPort}`) + }), +) diff --git a/e2e/solid-start/basic/tests/navigation.spec.ts b/e2e/solid-start/basic/tests/navigation.spec.ts index 86229eac006..0a64f58417f 100644 --- a/e2e/solid-start/basic/tests/navigation.spec.ts +++ b/e2e/solid-start/basic/tests/navigation.spec.ts @@ -1,6 +1,5 @@ import { expect } from '@playwright/test' import { test } from '@tanstack/router-e2e-utils' -import { isSpaMode } from './utils/isSpaMode' test.use({ whitelistErrors: [ @@ -10,6 +9,8 @@ test.use({ test('Navigating to post', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') + await page.getByRole('link', { name: 'Posts' }).click() await page.getByRole('link', { name: 'sunt aut facere repe' }).click() await page.getByRole('link', { name: 'Deep View' }).click() @@ -19,6 +20,8 @@ test('Navigating to post', async ({ page }) => { test('Navigating to user', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') + await page.getByRole('link', { name: 'Users' }).click() await page.getByRole('link', { name: 'Leanne Graham' }).click() await expect(page.getByRole('heading')).toContainText('Leanne Graham') @@ -27,6 +30,8 @@ test('Navigating to user', async ({ page }) => { test('Navigating nested layouts', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') + await page.getByRole('link', { name: 'Layout', exact: true }).click() await expect(page.locator('body')).toContainText("I'm a layout") @@ -41,25 +46,28 @@ test('Navigating nested layouts', async ({ page }) => { test('client side navigating to a route with scripts', async ({ page }) => { await page.goto('/') + + await page.waitForURL('/') await page.getByRole('link', { name: 'Scripts', exact: true }).click() await expect(page.getByTestId('scripts-test-heading')).toBeInViewport() expect(await page.evaluate('window.SCRIPT_1')).toBe(true) - expect(await page.evaluate('window.SCRIPT_2')).toBe( - isSpaMode ? true : undefined, - ) + expect(await page.evaluate('window.SCRIPT_2')).toBe(undefined) }) test('directly going to a route with scripts', async ({ page }) => { await page.goto('/scripts') + + await page.waitForURL('/scripts') + await page.waitForLoadState('networkidle') expect(await page.evaluate('window.SCRIPT_1')).toBe(true) - expect(await page.evaluate('window.SCRIPT_2')).toBe( - isSpaMode ? true : undefined, - ) + expect(await page.evaluate('window.SCRIPT_2')).toBe(undefined) }) test('Navigating to a not-found route', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') + await page.getByRole('link', { name: 'This Route Does Not Exist' }).click() await page.getByRole('link', { name: 'Start Over' }).click() await expect(page.getByRole('heading')).toContainText('Welcome Home!') @@ -68,6 +76,8 @@ test('Navigating to a not-found route', async ({ page }) => { test('Should change title on client side navigation', async ({ page }) => { await page.goto('/') + await page.waitForURL('/') + await page.getByRole('link', { name: 'Posts' }).click() await expect(page).toHaveTitle('Posts page') diff --git a/e2e/solid-start/basic/tests/not-found.spec.ts b/e2e/solid-start/basic/tests/not-found.spec.ts index ab1c94eee90..e1a69eefc65 100644 --- a/e2e/solid-start/basic/tests/not-found.spec.ts +++ b/e2e/solid-start/basic/tests/not-found.spec.ts @@ -1,6 +1,7 @@ import { expect } from '@playwright/test' import combinateImport from 'combinate' import { test } from '@tanstack/router-e2e-utils' +import { isSpaMode } from '../tests/utils/isSpaMode' // somehow playwright does not correctly import default exports const combinate = (combinateImport as any).default as typeof combinateImport @@ -14,7 +15,7 @@ test.describe('not-found', () => { test(`global not found`, async ({ page }) => { const response = await page.goto(`/this-page-does-not-exist/foo/bar`) - expect(response?.status()).toBe(404) + expect(response?.status()).toBe(isSpaMode ? 200 : 404) await expect( page.getByTestId('default-not-found-component'), diff --git a/e2e/solid-start/basic/tests/redirect.spec.ts b/e2e/solid-start/basic/tests/redirect.spec.ts index 78c57d6a00b..b355268ac7b 100644 --- a/e2e/solid-start/basic/tests/redirect.spec.ts +++ b/e2e/solid-start/basic/tests/redirect.spec.ts @@ -7,11 +7,14 @@ import { test, } from '@tanstack/router-e2e-utils' import packageJson from '../package.json' with { type: 'json' } +import { isSpaMode } from '../tests/utils/isSpaMode' // somehow playwright does not correctly import default exports const combinate = (combinateImport as any).default as typeof combinateImport -const PORT = await getTestServerPort(packageJson.name) +const PORT = await getTestServerPort( + `${packageJson.name}${isSpaMode ? '_spa' : ''}`, +) const EXTERNAL_HOST_PORT = await getDummyServerPort(packageJson.name) test.describe('redirects', () => { diff --git a/e2e/solid-start/basic/tests/search-params.spec.ts b/e2e/solid-start/basic/tests/search-params.spec.ts index d7ce6178900..1e415475d68 100644 --- a/e2e/solid-start/basic/tests/search-params.spec.ts +++ b/e2e/solid-start/basic/tests/search-params.spec.ts @@ -1,5 +1,6 @@ import { expect } from '@playwright/test' import { test } from '@tanstack/router-e2e-utils' +import { isSpaMode } from '../tests/utils/isSpaMode' import type { Response } from '@playwright/test' function expectRedirect(response: Response | null, endsWith: string) { @@ -25,7 +26,9 @@ test.describe('/search-params/loader-throws-redirect', () => { page, }) => { const response = await page.goto('/search-params/loader-throws-redirect') - expectRedirect(response, '/search-params/loader-throws-redirect?step=a') + if (!isSpaMode) { + expectRedirect(response, '/search-params/loader-throws-redirect?step=a') + } await expect(page.getByTestId('search-param')).toContainText('a') expect(page.url().endsWith('/search-params/loader-throws-redirect?step=a')) }) @@ -47,7 +50,9 @@ test.describe('/search-params/default', () => { page, }) => { const response = await page.goto('/search-params/default') - expectRedirect(response, '/search-params/default?default=d1') + if (!isSpaMode) { + expectRedirect(response, '/search-params/default?default=d1') + } await expect(page.getByTestId('search-default')).toContainText('d1') await expect(page.getByTestId('context-hello')).toContainText('world') expect( diff --git a/e2e/solid-start/basic/vite.config.ts b/e2e/solid-start/basic/vite.config.ts index 1a2219f4435..60c1947e40c 100644 --- a/e2e/solid-start/basic/vite.config.ts +++ b/e2e/solid-start/basic/vite.config.ts @@ -2,6 +2,14 @@ import { defineConfig } from 'vite' import tsConfigPaths from 'vite-tsconfig-paths' import { tanstackStart } from '@tanstack/solid-start/plugin/vite' import viteSolid from 'vite-plugin-solid' +import { isSpaMode } from './tests/utils/isSpaMode' + +const spaModeConfiguration = { + enabled: true, + prerender: { + outputPath: 'index.html', + }, +} export default defineConfig({ server: { @@ -11,7 +19,10 @@ export default defineConfig({ tsConfigPaths({ projects: ['./tsconfig.json'], }), - tanstackStart(), + // @ts-ignore we want to keep one test with verboseFileRoutes off even though the option is hidden + tanstackStart({ + spa: isSpaMode ? spaModeConfiguration : undefined, + }), viteSolid({ ssr: true }), ], }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49f42233f8c..6fa0b38ac65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -950,6 +950,12 @@ importers: '@tanstack/react-start': specifier: workspace:* version: link:../../../packages/react-start + express: + specifier: ^5.1.0 + version: 5.1.0 + http-proxy-middleware: + specifier: ^3.0.5 + version: 3.0.5 react: specifier: ^19.0.0 version: 19.0.0 @@ -2410,6 +2416,12 @@ importers: '@tanstack/solid-start': specifier: workspace:* version: link:../../../packages/solid-start + express: + specifier: ^5.1.0 + version: 5.1.0 + http-proxy-middleware: + specifier: ^3.0.5 + version: 3.0.5 redaxios: specifier: ^0.5.1 version: 0.5.1 @@ -5757,7 +5769,7 @@ importers: version: link:../../../packages/react-start '@workos-inc/node': specifier: ^7.45.0 - version: 7.46.0(express@4.21.2) + version: 7.46.0(express@5.1.0) iron-session: specifier: ^8.0.4 version: 8.0.4 @@ -11974,6 +11986,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -12242,6 +12258,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + bonjour-service@1.3.0: resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} @@ -12546,6 +12566,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -12593,6 +12617,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} @@ -13338,6 +13366,10 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + exsolve@1.0.7: resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} @@ -13420,6 +13452,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} @@ -13789,6 +13825,10 @@ packages: '@types/express': optional: true + http-proxy-middleware@3.0.5: + resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} @@ -13828,6 +13868,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -14013,6 +14057,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -14537,6 +14584,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@4.17.0: resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} engines: {node: '>= 4.0.0'} @@ -14552,6 +14603,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -14738,6 +14793,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -15052,6 +15111,9 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -15256,6 +15318,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} @@ -15292,6 +15358,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} + rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -15522,6 +15592,10 @@ packages: rou3@0.7.5: resolution: {integrity: sha512-bwUHDHw1HSARty7TWNV71R0NZs5fOt74OM+hcMdJyPfchfRktEmxLoMSNa7PwEp6WqJ0a3feKztsIfTUEYhskw==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -16154,6 +16228,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typedoc-plugin-frontmatter@1.1.2: resolution: {integrity: sha512-ySNFQRqKjEM3IobtoND22LUuhpNLwPzTiAxTlqjn5uRLn8k8nqItvxWnWWRzaKMi870ZCvrz4wJHuVg+yqysmw==} peerDependencies: @@ -17999,7 +18077,7 @@ snapshots: dependencies: '@eslint-react/eff': 1.26.2 '@typescript-eslint/utils': 8.23.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - picomatch: 4.0.3 + picomatch: 4.0.2 ts-pattern: 5.6.2 transitivePeerDependencies: - eslint @@ -18023,7 +18101,7 @@ snapshots: '@eslint/config-array@0.19.2': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -18037,7 +18115,7 @@ snapshots: '@eslint/eslintrc@3.3.0': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.3 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -18592,8 +18670,8 @@ snapshots: '@jridgewell/remapping@2.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -18601,8 +18679,8 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -18641,7 +18719,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -21165,7 +21243,7 @@ snapshots: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0 + debug: 4.4.3 eslint: 9.22.0(jiti@2.6.0) typescript: 5.9.2 transitivePeerDependencies: @@ -21228,7 +21306,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.9.2) '@typescript-eslint/utils': 8.22.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - debug: 4.4.0 + debug: 4.4.3 eslint: 9.22.0(jiti@2.6.0) ts-api-utils: 2.0.1(typescript@5.9.2) typescript: 5.9.2 @@ -21239,7 +21317,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.9.2) '@typescript-eslint/utils': 8.23.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - debug: 4.4.0 + debug: 4.4.3 eslint: 9.22.0(jiti@2.6.0) ts-api-utils: 2.0.1(typescript@5.9.2) typescript: 5.9.2 @@ -21268,7 +21346,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -21282,7 +21360,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 - debug: 4.4.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -21763,9 +21841,9 @@ snapshots: tslib: 2.8.1 optional: true - '@workos-inc/node@7.46.0(express@4.21.2)': + '@workos-inc/node@7.46.0(express@5.1.0)': dependencies: - iron-session: 6.3.1(express@4.21.2) + iron-session: 6.3.1(express@5.1.0) jose: 5.6.3 leb: 1.0.0 pluralize: 8.0.0 @@ -21805,6 +21883,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.14.1): dependencies: acorn: 8.14.1 @@ -22010,7 +22093,7 @@ snapshots: axios@1.9.0: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.3) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -22124,6 +22207,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.1 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 @@ -22462,6 +22559,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} conventional-changelog-angular@7.0.0: @@ -22495,6 +22596,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.5.0: {} cookie@0.7.1: {} @@ -22857,7 +22960,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.25.10): dependencies: - debug: 4.4.0 + debug: 4.4.3 esbuild: 0.25.10 transitivePeerDependencies: - supports-color @@ -23033,7 +23136,7 @@ snapshots: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/utils': 8.23.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - debug: 4.4.0 + debug: 4.4.3 doctrine: 3.0.0 enhanced-resolve: 5.18.1 eslint: 9.22.0(jiti@2.6.0) @@ -23296,8 +23399,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -23386,6 +23489,38 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + exsolve@1.0.7: {} extend@3.0.2: {} @@ -23461,6 +23596,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + find-root@1.1.0: {} find-up@4.1.0: @@ -23539,7 +23685,9 @@ snapshots: flatted@3.3.2: {} - follow-redirects@1.15.9: {} + follow-redirects@1.15.9(debug@4.4.3): + optionalDependencies: + debug: 4.4.3 for-in@1.0.2: {} @@ -23864,14 +24012,14 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color http-proxy-middleware@2.0.7(@types/express@4.17.23): dependencies: '@types/http-proxy': 1.17.15 - http-proxy: 1.18.1 + http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 @@ -23880,10 +24028,21 @@ snapshots: transitivePeerDependencies: - debug - http-proxy@1.18.1: + http-proxy-middleware@3.0.5: + dependencies: + '@types/http-proxy': 1.17.15 + debug: 4.4.3 + http-proxy: 1.18.1(debug@4.4.3) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.3): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -23900,7 +24059,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -23920,6 +24079,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + idb@7.1.1: {} ieee754@1.2.1: {} @@ -23962,7 +24125,7 @@ snapshots: dependencies: '@ioredis/commands': 1.4.0 cluster-key-slot: 1.1.2 - debug: 4.4.0 + debug: 4.4.3 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -23976,7 +24139,7 @@ snapshots: ipaddr.js@2.2.0: {} - iron-session@6.3.1(express@4.21.2): + iron-session@6.3.1(express@5.1.0): dependencies: '@peculiar/webcrypto': 1.5.0 '@types/cookie': 0.5.4 @@ -23986,7 +24149,7 @@ snapshots: cookie: 0.5.0 iron-webcrypto: 0.2.8 optionalDependencies: - express: 4.21.2 + express: 5.1.0 iron-session@8.0.4: dependencies: @@ -24069,6 +24232,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.7 @@ -24560,6 +24725,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@4.17.0: dependencies: '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) @@ -24575,6 +24742,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -24777,6 +24946,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} netlify@13.3.5: @@ -24786,7 +24957,7 @@ snapshots: micro-api-client: 3.3.0 node-fetch: 3.3.2 p-wait-for: 5.0.2 - qs: 6.13.0 + qs: 6.14.0 optional: true nitropack@2.12.6(@netlify/blobs@9.1.2): @@ -25223,6 +25394,8 @@ snapshots: path-to-regexp@6.3.0: {} + path-to-regexp@8.3.0: {} + path-type@4.0.0: {} path-type@6.0.0: {} @@ -25408,6 +25581,10 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + quansync@0.2.11: {} querystringify@2.2.0: {} @@ -25487,6 +25664,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + rc9@2.1.2: dependencies: defu: 6.1.4 @@ -25727,6 +25911,16 @@ snapshots: rou3@0.7.5: {} + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color + rrweb-cssom@0.7.1: {} rrweb-cssom@0.8.0: {} @@ -25807,7 +26001,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -25951,7 +26145,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -26015,7 +26209,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -26026,7 +26220,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.3 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -26429,6 +26623,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + typedoc-plugin-frontmatter@1.1.2(typedoc-plugin-markdown@4.4.1(typedoc@0.27.6(typescript@5.9.2))): dependencies: typedoc-plugin-markdown: 4.4.1(typedoc@0.27.6(typescript@5.9.2)) @@ -26503,7 +26703,7 @@ snapshots: acorn: 8.14.1 estree-walker: 3.0.3 magic-string: 0.30.19 - unplugin: 2.3.10 + unplugin: 2.3.4 undici-types@6.20.0: {} @@ -26743,7 +26943,7 @@ snapshots: '@volar/typescript': 2.4.11 '@vue/language-core': 2.0.29(typescript@5.9.2) compare-versions: 6.1.1 - debug: 4.4.0 + debug: 4.4.3 kolorist: 1.8.0 local-pkg: 0.5.1 magic-string: 0.30.17 @@ -26952,7 +27152,7 @@ snapshots: vue-eslint-parser@9.4.3(eslint@9.22.0(jiti@2.6.0)): dependencies: - debug: 4.4.0 + debug: 4.4.3 eslint: 9.22.0(jiti@2.6.0) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3