From 7ec2bfaf0d4bc3c4fcc9134a47752b01cceafe9e Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Wed, 14 Feb 2024 17:59:38 +0900 Subject: [PATCH 01/10] feat: render children in template[data-hono-template] --- src/constants.ts | 1 + src/vite/island-components.ts | 17 ++++++++++++++++- test/unit/vite/island-components.test.ts | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 8cf2797..e6709d7 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,4 @@ export const COMPONENT_NAME = 'component-name' export const DATA_SERIALIZED_PROPS = 'data-serialized-props' +export const DATA_HONO_TEMPLATE = 'data-hono-template' export const IMPORTING_ISLANDS_ID = '__importing_islands' as const diff --git a/src/vite/island-components.ts b/src/vite/island-components.ts index 38b653d..9f78590 100644 --- a/src/vite/island-components.ts +++ b/src/vite/island-components.ts @@ -30,7 +30,7 @@ import { } from '@babel/types' // eslint-disable-next-line node/no-extraneous-import import type { Plugin } from 'vite' -import { COMPONENT_NAME, DATA_SERIALIZED_PROPS } from '../constants.js' +import { COMPONENT_NAME, DATA_HONO_TEMPLATE, DATA_SERIALIZED_PROPS } from '../constants.js' function addSSRCheck(funcName: string, componentName: string, isAsync = false) { const isSSR = memberExpression( @@ -60,6 +60,21 @@ function addSSRCheck(funcName: string, componentName: string, isAsync = false) { jsxClosingElement(jsxIdentifier(funcName)), [] ), + jsxExpressionContainer( + conditionalExpression( + memberExpression(identifier('props'), identifier('children')), + jsxElement( + jsxOpeningElement( + jsxIdentifier('template'), + [jsxAttribute(jsxIdentifier(DATA_HONO_TEMPLATE), stringLiteral(''))], + false + ), + jsxClosingElement(jsxIdentifier('template')), + [jsxExpressionContainer(memberExpression(identifier('props'), identifier('children')))] + ), + identifier('null') + ) + ), ] ) diff --git a/test/unit/vite/island-components.test.ts b/test/unit/vite/island-components.test.ts index ddb8ef3..5eb410a 100644 --- a/test/unit/vite/island-components.test.ts +++ b/test/unit/vite/island-components.test.ts @@ -11,7 +11,7 @@ describe('transformJsxTags', () => { return

Hello

; }; const WrappedBadge = function (props) { - return import.meta.env.SSR ? : ; + return import.meta.env.SSR ? {props.children ? : null} : ; }; export default WrappedBadge;` ) @@ -31,7 +31,7 @@ export default WrappedBadge;` return

Hello

; }; const WrappedAsyncComponent = async function (props) { - return import.meta.env.SSR ? : ; + return import.meta.env.SSR ? {props.children ? : null} : ; }; export default WrappedAsyncComponent;` ) From f4b860a713a2e688152c2c73a9d51fb583027405 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Thu, 15 Feb 2024 17:24:47 +0900 Subject: [PATCH 02/10] refactor: exclude "children" in order to reduce serialized data size --- src/vite/island-components.ts | 15 ++++++++++++++- test/unit/vite/island-components.test.ts | 4 ++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/vite/island-components.ts b/src/vite/island-components.ts index 9f78590..f0d9aa6 100644 --- a/src/vite/island-components.ts +++ b/src/vite/island-components.ts @@ -38,7 +38,20 @@ function addSSRCheck(funcName: string, componentName: string, isAsync = false) { identifier('env.SSR') ) - const serializedProps = callExpression(identifier('JSON.stringify'), [identifier('props')]) + // serialize props by excluding the children + const serializedProps = callExpression(identifier('JSON.stringify'), [ + callExpression(memberExpression(identifier('Object'), identifier('fromEntries')), [ + callExpression( + memberExpression( + callExpression(memberExpression(identifier('Object'), identifier('entries')), [ + identifier('props'), + ]), + identifier('filter') + ), + [identifier('([key]) => key !== "children"')] + ), + ]), + ]) const ssrElement = jsxElement( jsxOpeningElement( diff --git a/test/unit/vite/island-components.test.ts b/test/unit/vite/island-components.test.ts index 5eb410a..f317a68 100644 --- a/test/unit/vite/island-components.test.ts +++ b/test/unit/vite/island-components.test.ts @@ -11,7 +11,7 @@ describe('transformJsxTags', () => { return

Hello

; }; const WrappedBadge = function (props) { - return import.meta.env.SSR ? {props.children ? : null} : ; + return import.meta.env.SSR ? key !== "children")))}>{props.children ? : null} : ; }; export default WrappedBadge;` ) @@ -31,7 +31,7 @@ export default WrappedBadge;` return

Hello

; }; const WrappedAsyncComponent = async function (props) { - return import.meta.env.SSR ? {props.children ? : null} : ; + return import.meta.env.SSR ? key !== "children")))}>{props.children ? : null} : ; }; export default WrappedAsyncComponent;` ) From 2667b9ee421f699b100e14ef3cbda31e8cee0ae0 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Wed, 14 Feb 2024 18:02:12 +0900 Subject: [PATCH 03/10] feat: support async attribute on Script component --- src/server/components/script.tsx | 9 +++- .../app-script/routes/_async_renderer.tsx | 27 +++++++++++ test/hono-jsx/integration.test.ts | 48 ++++++++++++++----- 3 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 test/hono-jsx/app-script/routes/_async_renderer.tsx diff --git a/src/server/components/script.tsx b/src/server/components/script.tsx index fda8e48..c4b3dbd 100644 --- a/src/server/components/script.tsx +++ b/src/server/components/script.tsx @@ -4,6 +4,7 @@ import { HasIslands } from './has-islands.js' type Options = { src: string + async?: boolean prod?: boolean manifest?: Manifest } @@ -28,13 +29,17 @@ export const Script: FC = async (options) => { if (scriptInManifest) { return ( - + ) } } return <> } else { - return + return } } diff --git a/test/hono-jsx/app-script/routes/_async_renderer.tsx b/test/hono-jsx/app-script/routes/_async_renderer.tsx new file mode 100644 index 0000000..6c7e6a2 --- /dev/null +++ b/test/hono-jsx/app-script/routes/_async_renderer.tsx @@ -0,0 +1,27 @@ +import { jsxRenderer } from 'hono/jsx-renderer' +import { Script } from '../../../../src/server' + +export default jsxRenderer( + ({ children }) => { + return ( + + + {children} +

Component

' + ) + }) }) - it('Should convert the script path correctly', async () => { - const res = await app.request('/') - expect(res.status).toBe(200) - expect(await res.text()).toBe( - '

Component

' - ) + describe('With async', () => { + const RENDERER = import.meta.glob('./app-script/routes/**/_async_renderer.tsx', { + eager: true, + }) + + const app = createApp({ + root: './app-script/routes', + ROUTES: ROUTES as any, + RENDERER: RENDERER as any, + }) + + it('Should convert the script path correctly', async () => { + const res = await app.request('/') + expect(res.status).toBe(200) + expect(await res.text()).toBe( + '

Component

' + ) + }) }) }) From ff124380659fe0ce0e5dccbee499d108cf84ca15 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Wed, 14 Feb 2024 18:03:59 +0900 Subject: [PATCH 04/10] feat: re-create children from rendered template element --- src/client/client.ts | 122 +++++++++++++++++++++++++++++++++++++++++-- src/types.ts | 1 + 2 files changed, 120 insertions(+), 3 deletions(-) diff --git a/src/client/client.ts b/src/client/client.ts index 810d0c3..b5ca596 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -1,7 +1,7 @@ -import { render } from 'hono/jsx/dom' +import { render, Suspense, use } from 'hono/jsx/dom' import { jsx as jsxFn } from 'hono/jsx/dom/jsx-runtime' -import { COMPONENT_NAME, DATA_SERIALIZED_PROPS } from '../constants.js' -import type { CreateElement, Hydrate } from '../types.js' +import { COMPONENT_NAME, DATA_HONO_TEMPLATE, DATA_SERIALIZED_PROPS } from '../constants.js' +import type { CreateElement, CreateChildren, Hydrate } from '../types.js' // eslint-disable-next-line @typescript-eslint/no-explicit-any type FileCallback = () => Promise<{ default: Promise }> @@ -9,10 +9,114 @@ type FileCallback = () => Promise<{ default: Promise }> export type ClientOptions = { hydrate?: Hydrate createElement?: CreateElement + /** + * Create "children" attribute of a component from a list of child nodes + */ + createChildren?: CreateChildren ISLAND_FILES?: Record Promise> island_root?: string } +const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => { + const createChildren = (childNodes: NodeListOf): Node[] => { + const children = [] + for (let i = 0; i < childNodes.length; i++) { + const child = childNodes[i] as HTMLElement + if (child.nodeType === 8) { + // skip comments + continue + } else if (child.nodeType === 3) { + // text node + children.push(child.textContent) + } else if (child.nodeName === 'TEMPLATE' && child.id.match(/(?:H|E):\d+/)) { + const placeholderElement = document.createElement('hono-placeholder') + placeholderElement.style.display = 'none' + + let resolve: (nodes: Node[]) => void + const promise = new Promise((r) => (resolve = r)) + + // Suspense: replace content by `replaceWith` when resolved + // ErrorBoundary: replace content by `replaceWith` when error + child.replaceWith = (node: DocumentFragment) => { + resolve(createChildren(node.childNodes)) + placeholderElement.remove() + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let fallback: any = [] + + // gather fallback content and find placeholder comment + for ( + // equivalent to i++ + placeholderElement.appendChild(child); + i < childNodes.length; + i++ + ) { + const child = childNodes[i] + if (child.nodeType === 8) { + // or + placeholderElement.appendChild(child) + i-- + break + } else if (child.nodeType === 3) { + fallback.push(child.textContent) + } else { + fallback.push( + createElement(child.nodeName, { + children: createChildren(child.childNodes), + }) + ) + } + } + + // if already resolved or error, get content from added template element + const fallbackTemplates = document.querySelectorAll( + `[data-hono-target="${child.id}"]` + ) + if (fallbackTemplates.length > 0) { + const fallbackTemplate = fallbackTemplates[fallbackTemplates.length - 1] + fallback = createChildren(fallbackTemplate.content.childNodes) + } + + // if no content available, wait for ErrorBoundary fallback content + if (fallback.length === 0 && child.id.startsWith('E:')) { + let resolve: (nodes: Node[]) => void + const promise = new Promise((r) => (resolve = r)) + fallback = createElement(Suspense, { + fallback: [], + children: [createElement(() => use(promise), {})], + }) + placeholderElement.insertBefore = ((node: DocumentFragment) => { + resolve(createChildren(node.childNodes)) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + }) as any + } + + // wait for content to be resolved by placeholderElement + document.body.appendChild(placeholderElement) + + // render fallback content + children.push( + createElement(Suspense, { + fallback, + children: [createElement(() => use(promise), {})], + }) + ) + } else { + children.push( + createElement(child.nodeName, { + children: createChildren(child.childNodes), + }) + ) + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return children as any + } + + return createChildren +} + export const createClient = async (options?: ClientOptions) => { const FILES = options?.ISLAND_FILES ?? import.meta.glob('/app/islands/**/[a-zA-Z0-9[-]+.(tsx|ts)') const root = options?.island_root ?? '/app/islands/' @@ -33,6 +137,18 @@ export const createClient = async (options?: ClientOptions) => { const hydrate = options?.hydrate ?? render const createElement = options?.createElement ?? jsxFn + const maybeTemplate = element.childNodes[element.childNodes.length - 1] + if ( + maybeTemplate?.nodeName === 'TEMPLATE' && + (maybeTemplate as HTMLElement)?.attributes.getNamedItem(DATA_HONO_TEMPLATE) !== null + ) { + const createChildren = + options?.createChildren ?? buildCreateChildrenFn(createElement as CreateElement) + props.children = await createChildren( + (maybeTemplate as HTMLTemplateElement).content.childNodes + ) + } + const newElem = await createElement(Component, props) // @ts-expect-error default `render` cause a type error await hydrate(newElem, element) diff --git a/src/types.ts b/src/types.ts index 1149d51..ab9f2ba 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,3 +3,4 @@ /** JSX */ export type CreateElement = (type: any, props: any) => Node | Promise export type Hydrate = (children: Node, parent: Element) => void | Promise +export type CreateChildren = (childNodes: NodeListOf) => Node[] | Promise From d518be5efbbc553feccda2847ca90e5394eab4f4 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Thu, 15 Feb 2024 07:45:26 +0900 Subject: [PATCH 05/10] test: add tests for Server and Client Composition Patterns --- test/hono-jsx/app/client.ts | 4 ++ test/hono-jsx/app/islands/Counter.tsx | 13 +++- test/hono-jsx/app/routes/_renderer.tsx | 31 ++++++---- .../app/routes/interaction/children.tsx | 18 ++++++ .../app/routes/interaction/error-boundary.tsx | 33 ++++++++++ .../app/routes/interaction/suspense-never.tsx | 19 ++++++ .../app/routes/interaction/suspense.tsx | 19 ++++++ test/hono-jsx/e2e.test.ts | 61 ++++++++++++++++++- 8 files changed, 182 insertions(+), 16 deletions(-) create mode 100644 test/hono-jsx/app/routes/interaction/children.tsx create mode 100644 test/hono-jsx/app/routes/interaction/error-boundary.tsx create mode 100644 test/hono-jsx/app/routes/interaction/suspense-never.tsx create mode 100644 test/hono-jsx/app/routes/interaction/suspense.tsx diff --git a/test/hono-jsx/app/client.ts b/test/hono-jsx/app/client.ts index 42f4444..02724b3 100644 --- a/test/hono-jsx/app/client.ts +++ b/test/hono-jsx/app/client.ts @@ -1,3 +1,7 @@ import { createClient } from '../../../src/client' createClient() + +setTimeout(() => { + document.body.setAttribute('data-client-loaded', 'true') +}) \ No newline at end of file diff --git a/test/hono-jsx/app/islands/Counter.tsx b/test/hono-jsx/app/islands/Counter.tsx index 8ee0332..a716175 100644 --- a/test/hono-jsx/app/islands/Counter.tsx +++ b/test/hono-jsx/app/islands/Counter.tsx @@ -1,12 +1,21 @@ +import type { PropsWithChildren } from 'hono/jsx' import { useState } from 'hono/jsx' -export default function Counter({ initial }: { initial: number }) { +export default function Counter({ + children, + initial = 0, + id = '', +}: PropsWithChildren<{ + initial?: number + id?: string +}>) { const [count, setCount] = useState(initial) const increment = () => setCount(count + 1) return ( -
+

Count: {count}

+ {children}
) } diff --git a/test/hono-jsx/app/routes/_renderer.tsx b/test/hono-jsx/app/routes/_renderer.tsx index 067565b..05ae9f5 100644 --- a/test/hono-jsx/app/routes/_renderer.tsx +++ b/test/hono-jsx/app/routes/_renderer.tsx @@ -1,16 +1,21 @@ import { jsxRenderer } from 'hono/jsx-renderer' import { HasIslands } from '../../../../src/server' -export default jsxRenderer(({ children, title }) => { - return ( - - - {title} - - - - - {children} - - ) -}) +export default jsxRenderer( + ({ children, title }) => { + return ( + + + {title} + + + {children} + + + + + + ) + }, + { stream: true } +) diff --git a/test/hono-jsx/app/routes/interaction/children.tsx b/test/hono-jsx/app/routes/interaction/children.tsx new file mode 100644 index 0000000..1be391b --- /dev/null +++ b/test/hono-jsx/app/routes/interaction/children.tsx @@ -0,0 +1,18 @@ +import Counter from '../../islands/Counter' + +const AsyncChild = async () => { + return Async child +} + +export default function Interaction() { + return ( + <> + + Sync child + + + + + + ) +} diff --git a/test/hono-jsx/app/routes/interaction/error-boundary.tsx b/test/hono-jsx/app/routes/interaction/error-boundary.tsx new file mode 100644 index 0000000..7cca35e --- /dev/null +++ b/test/hono-jsx/app/routes/interaction/error-boundary.tsx @@ -0,0 +1,33 @@ +import { Suspense, ErrorBoundary } from 'hono/jsx' +import Counter from '../../islands/Counter' + +const SuspenseChild = async () => { + await new Promise((resolve) => setTimeout(() => resolve(), 500)) + return Suspense child +} + +const SuspenseFailureChild = async () => { + throw new Error('Suspense failure') + return Suspense child +} + +export default function Interaction() { + return ( + <> + + Something went wrong}> + Loading...}> + + + + + + Something went wrong}> + Loading...}> + + + + + + ) +} diff --git a/test/hono-jsx/app/routes/interaction/suspense-never.tsx b/test/hono-jsx/app/routes/interaction/suspense-never.tsx new file mode 100644 index 0000000..03ad55c --- /dev/null +++ b/test/hono-jsx/app/routes/interaction/suspense-never.tsx @@ -0,0 +1,19 @@ +import { Suspense } from 'hono/jsx' +import Counter from '../../islands/Counter' + +const SuspenseNeverChild = async () => { + await new Promise(() => {}) // never resolves + return Suspense child +} + +export default function Interaction() { + return ( + <> + + Loading...}> + + + + + ) +} diff --git a/test/hono-jsx/app/routes/interaction/suspense.tsx b/test/hono-jsx/app/routes/interaction/suspense.tsx new file mode 100644 index 0000000..fd7be3c --- /dev/null +++ b/test/hono-jsx/app/routes/interaction/suspense.tsx @@ -0,0 +1,19 @@ +import { Suspense } from 'hono/jsx' +import Counter from '../../islands/Counter' + +const SuspenseChild = async () => { + await new Promise((resolve) => setTimeout(() => resolve(), 500)) + return Suspense child +} + +export default function Interaction() { + return ( + <> + + Loading...}> + + + + + ) +} diff --git a/test/hono-jsx/e2e.test.ts b/test/hono-jsx/e2e.test.ts index 039fd28..564d9ea 100644 --- a/test/hono-jsx/e2e.test.ts +++ b/test/hono-jsx/e2e.test.ts @@ -1,10 +1,69 @@ import { test } from '@playwright/test' test('test counter', async ({ page }) => { - await page.goto('/interaction', { waitUntil: 'domcontentloaded' }) + await page.goto('/interaction') + await page.waitForSelector('body[data-client-loaded]') + await page.getByText('Count: 5').click() await page.getByRole('button', { name: 'Increment' }).click({ clickCount: 1, }) await page.getByText('Count: 6').click() }) + +test('children - sync', async ({ page }) => { + await page.goto('/interaction/children') + await page.waitForSelector('body[data-client-loaded]') + + const container = page.locator('id=sync') + await container.locator('button').click() + await container.getByText('Count: 1').click() + await container.getByText('Sync child').click() +}) + +test('children - async', async ({ page }) => { + await page.goto('/interaction/children') + await page.waitForSelector('body[data-client-loaded]') + + const container = page.locator('id=async') + await container.locator('button').click() + await container.getByText('Count: 3').click() + await container.getByText('Async child').click() +}) + +test('suspense', async ({ page }) => { + await page.goto('/interaction/suspense', { waitUntil: 'domcontentloaded' }) + await page.waitForSelector('body[data-client-loaded]') + const container = page.locator('id=suspense') + await container.locator('button').click() + await container.getByText('Count: 5').click() + await container.getByText('Suspense child').click() +}) + +test('suspense never resolved', async ({ page }) => { + await page.goto('/interaction/suspense-never', { timeout: 1 }).catch(() => {}) // proceed test as soon as possible + await page.waitForSelector('body[data-client-loaded]') + + const container = page.locator('id=suspense-never') + await container.locator('button').click() + await container.getByText('Count: 7').click() + await container.getByText('Loading...').click() +}) + +test('error-boundary', async ({ page }) => { + await page.goto('/interaction/error-boundary', { waitUntil: 'domcontentloaded' }) + await page.waitForSelector('body[data-client-loaded]') + const container = page.locator('id=error-boundary-success') + await container.locator('button').click() + await container.getByText('Count: 3').click() + await container.getByText('Suspense child').click() +}) + +test('error-boundary failure', async ({ page }) => { + await page.goto('/interaction/error-boundary', { waitUntil: 'domcontentloaded' }) + await page.waitForSelector('body[data-client-loaded]') + const container = page.locator('id=error-boundary-failure') + await container.locator('button').click() + await container.getByText('Count: 5').click() + await container.getByText('Something went wrong').click() +}) \ No newline at end of file From 47cbbc9c205785afe616183c888d732305c6bb88 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Thu, 15 Feb 2024 18:13:14 +0900 Subject: [PATCH 06/10] test: update data for integration test --- test/hono-jsx/integration.test.ts | 42 ++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/test/hono-jsx/integration.test.ts b/test/hono-jsx/integration.test.ts index 0c8c436..59792fc 100644 --- a/test/hono-jsx/integration.test.ts +++ b/test/hono-jsx/integration.test.ts @@ -63,6 +63,46 @@ describe('Basic', () => { method: 'GET', handler: expect.any(Function), }, + { + path: '/interaction/children', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/children', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/error-boundary', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/error-boundary', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/suspense-never', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/suspense-never', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/suspense', + method: 'GET', + handler: expect.any(Function), + }, + { + path: '/interaction/suspense', + method: 'GET', + handler: expect.any(Function), + }, { path: '/api', method: 'POST', handler: expect.any(Function) }, { path: '/api', method: 'POST', handler: expect.any(Function) }, { path: '/api', method: 'GET', handler: expect.any(Function) }, @@ -198,7 +238,7 @@ describe('With preserved', () => { expect(res.status).toBe(200) // hono/jsx escape a single quote to ' expect(await res.text()).toBe( - '

Count: 5

' + '

Count: 5

' ) }) From f63e63e168d9fd8733df5e479bdb3e0a64a687d6 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Fri, 16 Feb 2024 02:55:58 +0900 Subject: [PATCH 07/10] refactor: make createChildren async --- src/client/client.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/client/client.ts b/src/client/client.ts index b5ca596..b32a1f7 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -18,7 +18,7 @@ export type ClientOptions = { } const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => { - const createChildren = (childNodes: NodeListOf): Node[] => { + const createChildren = async (childNodes: NodeListOf): Promise => { const children = [] for (let i = 0; i < childNodes.length; i++) { const child = childNodes[i] as HTMLElement @@ -38,7 +38,7 @@ const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => // Suspense: replace content by `replaceWith` when resolved // ErrorBoundary: replace content by `replaceWith` when error child.replaceWith = (node: DocumentFragment) => { - resolve(createChildren(node.childNodes)) + createChildren(node.childNodes).then(resolve) placeholderElement.remove() } @@ -62,8 +62,8 @@ const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => fallback.push(child.textContent) } else { fallback.push( - createElement(child.nodeName, { - children: createChildren(child.childNodes), + await createElement(child.nodeName, { + children: await createChildren(child.childNodes), }) ) } @@ -75,19 +75,19 @@ const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => ) if (fallbackTemplates.length > 0) { const fallbackTemplate = fallbackTemplates[fallbackTemplates.length - 1] - fallback = createChildren(fallbackTemplate.content.childNodes) + fallback = await createChildren(fallbackTemplate.content.childNodes) } // if no content available, wait for ErrorBoundary fallback content if (fallback.length === 0 && child.id.startsWith('E:')) { let resolve: (nodes: Node[]) => void const promise = new Promise((r) => (resolve = r)) - fallback = createElement(Suspense, { + fallback = await createElement(Suspense, { fallback: [], - children: [createElement(() => use(promise), {})], + children: [await createElement(() => use(promise), {})], }) placeholderElement.insertBefore = ((node: DocumentFragment) => { - resolve(createChildren(node.childNodes)) + createChildren(node.childNodes).then(resolve) // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any } @@ -97,15 +97,15 @@ const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => // render fallback content children.push( - createElement(Suspense, { + await createElement(Suspense, { fallback, - children: [createElement(() => use(promise), {})], + children: [await createElement(() => use(promise), {})], }) ) } else { children.push( - createElement(child.nodeName, { - children: createChildren(child.childNodes), + await createElement(child.nodeName, { + children: await createChildren(child.childNodes), }) ) } From 909f2aeb4dab74c9848204b317b2b06cf9f2f495 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Fri, 16 Feb 2024 03:32:58 +0900 Subject: [PATCH 08/10] refactor: `yarn format:fix` --- test/hono-jsx/app/client.ts | 2 +- test/hono-jsx/e2e.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/hono-jsx/app/client.ts b/test/hono-jsx/app/client.ts index 02724b3..aba044e 100644 --- a/test/hono-jsx/app/client.ts +++ b/test/hono-jsx/app/client.ts @@ -4,4 +4,4 @@ createClient() setTimeout(() => { document.body.setAttribute('data-client-loaded', 'true') -}) \ No newline at end of file +}) diff --git a/test/hono-jsx/e2e.test.ts b/test/hono-jsx/e2e.test.ts index 564d9ea..57b22de 100644 --- a/test/hono-jsx/e2e.test.ts +++ b/test/hono-jsx/e2e.test.ts @@ -66,4 +66,4 @@ test('error-boundary failure', async ({ page }) => { await container.locator('button').click() await container.getByText('Count: 5').click() await container.getByText('Something went wrong').click() -}) \ No newline at end of file +}) From b1591a276b8a5f84f8f11c2f493ca655b0680011 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Fri, 16 Feb 2024 13:01:22 +0900 Subject: [PATCH 09/10] refactor: import buildCreateChildrenFn dynamically only when needed --- src/client/client.ts | 109 +++--------------------------------------- src/client/runtime.ts | 102 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 103 deletions(-) create mode 100644 src/client/runtime.ts diff --git a/src/client/client.ts b/src/client/client.ts index b32a1f7..8ed4f5e 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -1,4 +1,4 @@ -import { render, Suspense, use } from 'hono/jsx/dom' +import { render } from 'hono/jsx/dom' import { jsx as jsxFn } from 'hono/jsx/dom/jsx-runtime' import { COMPONENT_NAME, DATA_HONO_TEMPLATE, DATA_SERIALIZED_PROPS } from '../constants.js' import type { CreateElement, CreateChildren, Hydrate } from '../types.js' @@ -17,106 +17,6 @@ export type ClientOptions = { island_root?: string } -const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => { - const createChildren = async (childNodes: NodeListOf): Promise => { - const children = [] - for (let i = 0; i < childNodes.length; i++) { - const child = childNodes[i] as HTMLElement - if (child.nodeType === 8) { - // skip comments - continue - } else if (child.nodeType === 3) { - // text node - children.push(child.textContent) - } else if (child.nodeName === 'TEMPLATE' && child.id.match(/(?:H|E):\d+/)) { - const placeholderElement = document.createElement('hono-placeholder') - placeholderElement.style.display = 'none' - - let resolve: (nodes: Node[]) => void - const promise = new Promise((r) => (resolve = r)) - - // Suspense: replace content by `replaceWith` when resolved - // ErrorBoundary: replace content by `replaceWith` when error - child.replaceWith = (node: DocumentFragment) => { - createChildren(node.childNodes).then(resolve) - placeholderElement.remove() - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let fallback: any = [] - - // gather fallback content and find placeholder comment - for ( - // equivalent to i++ - placeholderElement.appendChild(child); - i < childNodes.length; - i++ - ) { - const child = childNodes[i] - if (child.nodeType === 8) { - // or - placeholderElement.appendChild(child) - i-- - break - } else if (child.nodeType === 3) { - fallback.push(child.textContent) - } else { - fallback.push( - await createElement(child.nodeName, { - children: await createChildren(child.childNodes), - }) - ) - } - } - - // if already resolved or error, get content from added template element - const fallbackTemplates = document.querySelectorAll( - `[data-hono-target="${child.id}"]` - ) - if (fallbackTemplates.length > 0) { - const fallbackTemplate = fallbackTemplates[fallbackTemplates.length - 1] - fallback = await createChildren(fallbackTemplate.content.childNodes) - } - - // if no content available, wait for ErrorBoundary fallback content - if (fallback.length === 0 && child.id.startsWith('E:')) { - let resolve: (nodes: Node[]) => void - const promise = new Promise((r) => (resolve = r)) - fallback = await createElement(Suspense, { - fallback: [], - children: [await createElement(() => use(promise), {})], - }) - placeholderElement.insertBefore = ((node: DocumentFragment) => { - createChildren(node.childNodes).then(resolve) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - }) as any - } - - // wait for content to be resolved by placeholderElement - document.body.appendChild(placeholderElement) - - // render fallback content - children.push( - await createElement(Suspense, { - fallback, - children: [await createElement(() => use(promise), {})], - }) - ) - } else { - children.push( - await createElement(child.nodeName, { - children: await createChildren(child.childNodes), - }) - ) - } - } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - return children as any - } - - return createChildren -} - export const createClient = async (options?: ClientOptions) => { const FILES = options?.ISLAND_FILES ?? import.meta.glob('/app/islands/**/[a-zA-Z0-9[-]+.(tsx|ts)') const root = options?.island_root ?? '/app/islands/' @@ -142,8 +42,11 @@ export const createClient = async (options?: ClientOptions) => { maybeTemplate?.nodeName === 'TEMPLATE' && (maybeTemplate as HTMLElement)?.attributes.getNamedItem(DATA_HONO_TEMPLATE) !== null ) { - const createChildren = - options?.createChildren ?? buildCreateChildrenFn(createElement as CreateElement) + let createChildren = options?.createChildren + if (!createChildren) { + const { buildCreateChildrenFn } = await import('./runtime') + createChildren = buildCreateChildrenFn(createElement as CreateElement) + } props.children = await createChildren( (maybeTemplate as HTMLTemplateElement).content.childNodes ) diff --git a/src/client/runtime.ts b/src/client/runtime.ts new file mode 100644 index 0000000..c8c95f4 --- /dev/null +++ b/src/client/runtime.ts @@ -0,0 +1,102 @@ +import { Suspense, use } from 'hono/jsx/dom' +import type { CreateElement, CreateChildren } from '../types.js' + +export const buildCreateChildrenFn = (createElement: CreateElement): CreateChildren => { + const createChildren = async (childNodes: NodeListOf): Promise => { + const children = [] + for (let i = 0; i < childNodes.length; i++) { + const child = childNodes[i] as HTMLElement + if (child.nodeType === 8) { + // skip comments + continue + } else if (child.nodeType === 3) { + // text node + children.push(child.textContent) + } else if (child.nodeName === 'TEMPLATE' && child.id.match(/(?:H|E):\d+/)) { + const placeholderElement = document.createElement('hono-placeholder') + placeholderElement.style.display = 'none' + + let resolve: (nodes: Node[]) => void + const promise = new Promise((r) => (resolve = r)) + + // Suspense: replace content by `replaceWith` when resolved + // ErrorBoundary: replace content by `replaceWith` when error + child.replaceWith = (node: DocumentFragment) => { + createChildren(node.childNodes).then(resolve) + placeholderElement.remove() + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let fallback: any = [] + + // gather fallback content and find placeholder comment + for ( + // equivalent to i++ + placeholderElement.appendChild(child); + i < childNodes.length; + i++ + ) { + const child = childNodes[i] + if (child.nodeType === 8) { + // or + placeholderElement.appendChild(child) + i-- + break + } else if (child.nodeType === 3) { + fallback.push(child.textContent) + } else { + fallback.push( + await createElement(child.nodeName, { + children: await createChildren(child.childNodes), + }) + ) + } + } + + // if already resolved or error, get content from added template element + const fallbackTemplates = document.querySelectorAll( + `[data-hono-target="${child.id}"]` + ) + if (fallbackTemplates.length > 0) { + const fallbackTemplate = fallbackTemplates[fallbackTemplates.length - 1] + fallback = await createChildren(fallbackTemplate.content.childNodes) + } + + // if no content available, wait for ErrorBoundary fallback content + if (fallback.length === 0 && child.id.startsWith('E:')) { + let resolve: (nodes: Node[]) => void + const promise = new Promise((r) => (resolve = r)) + fallback = await createElement(Suspense, { + fallback: [], + children: [await createElement(() => use(promise), {})], + }) + placeholderElement.insertBefore = ((node: DocumentFragment) => { + createChildren(node.childNodes).then(resolve) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + }) as any + } + + // wait for content to be resolved by placeholderElement + document.body.appendChild(placeholderElement) + + // render fallback content + children.push( + await createElement(Suspense, { + fallback, + children: [await createElement(() => use(promise), {})], + }) + ) + } else { + children.push( + await createElement(child.nodeName, { + children: await createChildren(child.childNodes), + }) + ) + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return children as any + } + + return createChildren +} From af20da4fd5d4a0605dc28e8d552a8e51f8716c18 Mon Sep 17 00:00:00 2001 From: Taku Amano Date: Fri, 16 Feb 2024 13:06:25 +0900 Subject: [PATCH 10/10] chore: `rm bun.lockb && bun install` --- bun.lockb | Bin 328266 -> 322189 bytes yarn.lock | 1499 +++++++++++++++++++++++------------------------------ 2 files changed, 638 insertions(+), 861 deletions(-) diff --git a/bun.lockb b/bun.lockb index dc6acc4966e263541c134076cae288721329157e..87421ae59850a5c9138c9e4d903d0b0aac768c11 100755 GIT binary patch delta 77607 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 delta 74277 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 z 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.0.0", "@types/node@^20.10.5": - version "20.11.8" - resolved "https://registry.npmjs.org/@types/node/-/node-20.11.8.tgz" - integrity sha512-i7omyekpPTNdv4Jb/Rgqg0RU8YqLcNsI12quKSDkRXNfx7Wxdm6HhK1awT3xTgEkgxPn3bvnSpiEAc7a7Lpyow== + version "20.11.19" + resolved "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== dependencies: undici-types "~5.26.4" @@ -528,9 +713,9 @@ "@types/node" "*" "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.7" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== "@types/unist@^2.0.0": version "2.0.10" @@ -543,15 +728,15 @@ integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== "@typescript-eslint/eslint-plugin@^6.14.0": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.1.tgz" - integrity sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg== + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/type-utils" "6.19.1" - "@typescript-eslint/utils" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -560,46 +745,46 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.14.0": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.1.tgz" - integrity sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ== - dependencies: - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/typescript-estree" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.1.tgz" - integrity sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.1.tgz" - integrity sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "6.19.1" - "@typescript-eslint/utils" "6.19.1" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.1.tgz" - integrity sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.1.tgz" - integrity sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/visitor-keys" "6.19.1" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -607,25 +792,25 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.1.tgz" - integrity sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w== +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.19.1" - "@typescript-eslint/types" "6.19.1" - "@typescript-eslint/typescript-estree" "6.19.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.19.1": - version "6.19.1" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.1.tgz" - integrity sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.19.1" + "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": @@ -638,18 +823,18 @@ resolved "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz" integrity sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg== dependencies: + chai "^4.3.10" "@vitest/spy" "1.2.2" "@vitest/utils" "1.2.2" - chai "^4.3.10" "@vitest/runner@1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz" integrity sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg== dependencies: - "@vitest/utils" "1.2.2" p-limit "^5.0.0" pathe "^1.1.1" + "@vitest/utils" "1.2.2" "@vitest/snapshot@1.2.2": version "1.2.2" @@ -717,12 +902,7 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-escapes@^3.2.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -739,21 +919,6 @@ ansi-regex@^2.0.0: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" @@ -774,16 +939,6 @@ ansi-regex@^6.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" @@ -796,28 +951,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.0.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -862,13 +996,13 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" + 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.7: version "3.1.7" @@ -886,16 +1020,27 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: version "1.3.2" @@ -917,17 +1062,18 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + 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" arrify@^1.0.1: @@ -957,10 +1103,10 @@ async-exit-hook@^2.0.1: resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== bail@^2.0.0: version "2.0.2" @@ -999,46 +1145,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" @@ -1104,14 +1210,16 @@ cacheable-request@^7.0.1: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" - 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.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + 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, callsites@^3.1.0: version "3.1.0" @@ -1183,23 +1291,7 @@ chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1240,9 +1332,9 @@ check-error@^1.0.3: get-func-name "^2.0.2" chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -1269,21 +1361,7 @@ cli-boxes@^2.2.1: resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^2.1.0: +cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== @@ -1346,27 +1424,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" @@ -1377,21 +1434,6 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - comma-separated-tokens@^2.0.0: version "2.0.3" resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" @@ -1466,20 +1508,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" @@ -1548,14 +1576,14 @@ defer-to-connect@^2.0.0: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + 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.2.0, define-properties@^1.2.1: version "1.2.1" @@ -1652,21 +1680,6 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" @@ -1694,52 +1707,71 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.4" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" + typed-array-buffer "^1.0.1" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" -es-set-tostringtag@^2.0.1: +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-set-tostringtag@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== @@ -1748,7 +1780,7 @@ es-set-tostringtag@^2.0.1: has-tostringtag "^1.0.0" hasown "^2.0.0" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -1769,7 +1801,29 @@ esbuild@>=0.17, esbuild@^0.19.2, esbuild@^0.19.3: resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" escape-goat@^2.0.0: version "2.1.1" @@ -2102,9 +2156,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz" - integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -2123,13 +2177,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - figures@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" @@ -2201,12 +2248,12 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@2.3.2, fsevents@~2.3.2: +fsevents@2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@~2.3.3: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -2236,11 +2283,12 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" 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, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + 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" @@ -2278,13 +2326,14 @@ get-stream@^8.0.1: resolved "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" + 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-tsconfig@^4.5.0: version "4.7.2" @@ -2332,14 +2381,7 @@ glob@^10.3.10: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2384,13 +2426,6 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - globalthis@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" @@ -2492,27 +2527,12 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" @@ -2524,22 +2544,22 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -2593,17 +2613,7 @@ hast-util-whitespace@^3.0.0: dependencies: "@types/hast" "^3.0.0" -hono@*: - version "4.0.0-rc.2" - resolved "https://registry.npmjs.org/hono/-/hono-4.0.0-rc.2.tgz" - integrity sha512-c7PeKKtwidjkgurjyjKQpCr+oRuL9TXP1JzxqKxof2f4UT/CjEXKQkreawTzMjpalujrSCYcTOm3SBkkW0NxpQ== - -hono@>=4.*: - version "4.0.0" - resolved "https://registry.npmjs.org/hono/-/hono-4.0.0.tgz" - integrity sha512-8dKhuBBpRZEodUttQhrSFJ6PQqHRjXHyeeegfxOf132pvgbf0tOb9qqb7q7eYwAWpOcYrsUOsWdJ0sQIIovhZg== - -hono@^4.0.3: +hono@*, hono@>=4.*, hono@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/hono/-/hono-4.0.3.tgz" integrity sha512-LLZFvqiksAO6Hf080XCUbsEjRxIrqEoiIN1HUzL0xtYP+BZUxGfeWg8yB5Dvp/sI7T0Lt4XdtGTGLwpIzAsl8w== @@ -2650,9 +2660,9 @@ iconv-lite@^0.4.24: safer-buffer ">= 2.1.2 < 3" ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== ignore-walk@^3.0.3: version "3.0.4" @@ -2789,12 +2799,12 @@ inquirer-autosubmit-prompt@^0.2.0: inquirer "^6.2.1" rxjs "^6.3.3" -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -2811,14 +2821,13 @@ is-alphanumerical@^2.0.0: is-alphabetical "^2.0.0" is-decimal "^2.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== 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" @@ -2900,11 +2909,6 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" @@ -3060,12 +3064,12 @@ 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.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@^1.0.0: version "1.0.0" @@ -3219,9 +3223,9 @@ levn@^0.4.1: type-check "~0.4.0" lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + version "3.1.0" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.0.tgz" + integrity sha512-p3cz0JV5vw/XeouBU3Ldnp+ZkBjE+n8ydJ4mcwBrOiXXPqNlrzGBqWs9X4MWF7f+iKUBu794Y8Hh8yawiJbCjw== lines-and-columns@^1.1.6: version "1.2.4" @@ -3393,9 +3397,9 @@ lru-cache@^6.0.0: integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + version "0.30.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz" + integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -3470,9 +3474,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz" - integrity sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA== + version "3.1.0" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.0.tgz" + integrity sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -3501,9 +3505,9 @@ mdast-util-mdxjs-esm@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-phrasing@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz" - integrity sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA== + version "4.1.0" + resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" + integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== dependencies: "@types/mdast" "^4.0.0" unist-util-is "^6.0.0" @@ -3744,9 +3748,9 @@ micromark-factory-whitespace@^2.0.0: micromark-util-types "^2.0.0" micromark-util-character@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz" - integrity sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw== + version "2.1.0" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" + integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== dependencies: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" @@ -3787,10 +3791,10 @@ micromark-util-decode-string@^2.0.0: resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== dependencies: - decode-named-character-reference "^1.0.0" micromark-util-character "^2.0.0" micromark-util-decode-numeric-character-reference "^2.0.0" micromark-util-symbol "^2.0.0" + decode-named-character-reference "^1.0.0" micromark-util-encode@^2.0.0: version "2.0.0" @@ -3872,21 +3876,6 @@ mimic-fn@^1.0.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -3917,60 +3906,25 @@ min-indent@^1.0.0: resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -miniflare@^3.20231218.2: - version "3.20231218.4" - resolved "https://registry.npmjs.org/miniflare/-/miniflare-3.20231218.4.tgz" - integrity sha512-2mpxvDiRBxGGGVnTKC0SZy0FtTXxFs3tM1ol67EoIJABGzvWFf33GThwh+/dRmaHSjKKId/FI8rEl5JxXXXZgQ== - dependencies: - "@cspotcode/source-map-support" "0.8.1" - acorn "^8.8.0" - acorn-walk "^8.2.0" - capnp-ts "^0.7.0" - exit-hook "^2.2.1" - glob-to-regexp "^0.4.1" - stoppable "^1.1.0" - undici "^5.28.2" - workerd "1.20231218.0" - ws "^8.11.0" - youch "^3.2.2" - zod "^3.20.6" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +miniflare@^3.20231218.2: + version "3.20240129.2" + resolved "https://registry.npmjs.org/miniflare/-/miniflare-3.20240129.2.tgz" + integrity sha512-BPUg8HsPmWQlRFUeiQk274i8M9L0gOvzbkjryuTvCX+M53EwBpP0gM2wyrRr/HokQoJcxWGh3InBu6L8+0bbPw== dependencies: - brace-expansion "^1.1.7" + "@cspotcode/source-map-support" "0.8.1" + acorn "^8.8.0" + acorn-walk "^8.2.0" + capnp-ts "^0.7.0" + exit-hook "^2.2.1" + glob-to-regexp "^0.4.1" + stoppable "^1.1.0" + undici "^5.28.2" + workerd "1.20240129.0" + ws "^8.11.0" + youch "^3.2.2" + zod "^3.20.6" -minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -4212,7 +4166,7 @@ object-assign@^4.0.1, object-assign@^4.1.0: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -4222,7 +4176,7 @@ object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: +object.assign@^4.1.5: version "4.1.5" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -4242,14 +4196,15 @@ object.fromentries@^2.0.7: es-abstract "^1.22.1" object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + version "1.0.2" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" object.values@^1.1.7: version "1.1.7" @@ -4274,28 +4229,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -4322,12 +4256,12 @@ optionator@^0.9.3: resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 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" + deep-is "^0.1.3" + "@aashutoshrathi/word-wrap" "^1.2.3" type-check "^0.4.0" + levn "^0.4.1" + fast-levenshtein "^2.0.6" org-regex@^1.0.0: version "1.0.0" @@ -4607,24 +4541,24 @@ pkg-types@^1.0.3: mlly "^1.2.0" pathe "^1.1.0" -playwright@1.41.1: - version "1.41.1" - resolved "https://registry.npmjs.org/playwright/-/playwright-1.41.1.tgz" - integrity sha512-gdZAWG97oUnbBdRL3GuBvX3nDDmUOuqzV/D24dytqlKt+eI5KbwusluZRGljx1YoJKZ2NRPaeWiFTeGZO7SosQ== +playwright@1.41.2: + version "1.41.2" + resolved "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz" + integrity sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A== dependencies: - playwright-core "1.41.1" + playwright-core "1.41.2" optionalDependencies: fsevents "2.3.2" -playwright-core@1.41.1: - version "1.41.1" - resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.1.tgz" - integrity sha512-/KPO5DzXSMlxSX77wy+HihKGOunh3hqndhqeo/nMxfigiKzogn8kfL0ZBDu0L1RKgan5XHCPmn6zXd2NUJgjhg== +playwright-core@1.41.2: + version "1.41.2" + resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz" + integrity sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA== -postcss@>=8.0.9, postcss@^8.4.12, postcss@^8.4.32: - version "8.4.33" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz" - integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== +postcss@>=8.0.9, postcss@^8.4.12, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -4649,9 +4583,9 @@ prepend-http@^2.0.0: integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@^3.1.1: - version "3.2.4" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz" - integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== + version "3.2.5" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== pretty-format@^29.7.0: version "29.7.0" @@ -4760,14 +4694,15 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpp@^3.0.0: version "3.2.0" @@ -4789,9 +4724,9 @@ registry-url@^5.0.0, registry-url@^5.1.0: rc "^1.2.8" remark-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz" - integrity sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g== + version "3.0.1" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz" + integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== dependencies: mdast-util-mdx "^3.0.0" micromark-extension-mdxjs "^3.0.0" @@ -4843,11 +4778,6 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-pkg-maps@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" @@ -4875,22 +4805,6 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" @@ -4912,21 +4826,28 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@>=2, "rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0", rollup@^4.0.2, rollup@^4.2.0: - version "4.9.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz" - integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== + version "4.11.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.11.0.tgz" + integrity sha512-2xIbaXDXjf3u2tajvA5xROpib7eegJ9Y/uPlSFhXLNpK9ampCczXAhLEb5yLzJyG3LAdI1NWtNjDXiLyniNdjQ== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-darwin-arm64" "4.9.6" fsevents "~2.3.2" - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-async@^2.4.0: + "@rollup/rollup-darwin-arm64" "4.11.0" + "@rollup/rollup-android-arm64" "4.11.0" + "@rollup/rollup-win32-arm64-msvc" "4.11.0" + "@rollup/rollup-linux-arm64-gnu" "4.11.0" + "@rollup/rollup-linux-arm64-musl" "4.11.0" + "@rollup/rollup-android-arm-eabi" "4.11.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.11.0" + "@rollup/rollup-win32-ia32-msvc" "4.11.0" + "@rollup/rollup-linux-riscv64-gnu" "4.11.0" + "@rollup/rollup-darwin-x64" "4.11.0" + "@rollup/rollup-win32-x64-msvc" "4.11.0" + "@rollup/rollup-linux-x64-gnu" "4.11.0" + "@rollup/rollup-linux-x64-musl" "4.11.0" + +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -4938,21 +4859,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.3.3: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^6.3.3, rxjs@^6.4.0: +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -4966,7 +4873,7 @@ sade@^1.8.1: dependencies: mri "^1.1.0" -safe-array-concat@^1.0.1: +safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -4976,13 +4883,13 @@ safe-array-concat@^1.0.1: has-symbols "^1.0.3" isarray "^2.0.5" -safe-regex-test@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3": @@ -5000,20 +4907,15 @@ scoped-regex@^2.0.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -5024,18 +4926,19 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.0: +set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== @@ -5057,45 +4960,21 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + 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.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -5151,9 +5030,9 @@ spdx-correct@^3.0.0: spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + version "2.5.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -5164,9 +5043,9 @@ 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.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split@^1.0.1: version "1.0.1" @@ -5207,15 +5086,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^2.1.1: +string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5223,34 +5094,7 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2, "string-width@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5310,20 +5154,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" @@ -5345,27 +5175,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -"strip-ansi@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" @@ -5451,28 +5260,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -5550,9 +5338,9 @@ tinypool@^0.8.2: integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== tinyspy@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz" - integrity sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg== + version "2.2.1" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== tmp@^0.0.33: version "0.0.33" @@ -5606,14 +5394,14 @@ trim-newlines@^3.0.0: integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trough@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + version "2.2.0" + resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + version "1.2.1" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== ts-interface-checker@^0.1.9: version "0.1.13" @@ -5635,25 +5423,15 @@ tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.2.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsup@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/tsup/-/tsup-8.0.1.tgz" - integrity sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg== + version "8.0.2" + resolved "https://registry.npmjs.org/tsup/-/tsup-8.0.2.tgz" + integrity sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ== dependencies: bundle-require "^4.0.0" cac "^6.7.12" @@ -5712,24 +5490,19 @@ type-fest@^0.20.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" typed-array-byte-length@^1.0.0: version "1.0.0" @@ -5774,9 +5547,9 @@ typescript@>=4.2.0, typescript@>=4.5.0, typescript@^5.0.0, typescript@^5.3.3: integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== ufo@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz" - integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + version "1.4.0" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -5789,9 +5562,9 @@ unbox-primitive@^1.0.2: which-boxed-primitive "^1.0.2" undici@^5.28.2: - version "5.28.2" - resolved "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz" - integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== + version "5.28.3" + resolved "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== dependencies: "@fastify/busboy" "^2.0.0" @@ -5945,12 +5718,12 @@ vfile-message@^4.0.0: unist-util-stringify-position "^4.0.0" vite@^5.0.0, vite@^5.0.12: - version "5.0.12" - resolved "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz" - integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== + version "5.1.3" + resolved "https://registry.npmjs.org/vite/-/vite-5.1.3.tgz" + integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== dependencies: esbuild "^0.19.3" - postcss "^8.4.32" + postcss "^8.4.35" rollup "^4.2.0" optionalDependencies: fsevents "~2.3.3" @@ -5971,11 +5744,6 @@ vitest@^1.2.1: resolved "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz" integrity sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw== dependencies: - "@vitest/expect" "1.2.2" - "@vitest/runner" "1.2.2" - "@vitest/snapshot" "1.2.2" - "@vitest/spy" "1.2.2" - "@vitest/utils" "1.2.2" acorn-walk "^8.3.2" cac "^6.7.14" chai "^4.3.10" @@ -5990,8 +5758,13 @@ vitest@^1.2.1: tinybench "^2.5.1" tinypool "^0.8.2" vite "^5.0.0" - vite-node "1.2.2" why-is-node-running "^2.2.2" + "@vitest/expect" "1.2.2" + "@vitest/spy" "1.2.2" + "@vitest/snapshot" "1.2.2" + "@vitest/runner" "1.2.2" + "@vitest/utils" "1.2.2" + vite-node "1.2.2" webidl-conversions@^4.0.2: version "4.0.2" @@ -6025,16 +5798,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" why-is-node-running@^2.2.2: version "2.2.2" @@ -6051,12 +5824,16 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -workerd@1.20231218.0: - version "1.20231218.0" - resolved "https://registry.npmjs.org/workerd/-/workerd-1.20231218.0.tgz" - integrity sha512-AGIsDvqCrcwhoA9kb1hxOhVAe53/xJeaGZxL4FbYI9FvO17DZwrnqGq+6eqItJ6Cfw1ZLmf3BM+QdMWaL2bFWQ== +workerd@1.20240129.0: + version "1.20240129.0" + resolved "https://registry.npmjs.org/workerd/-/workerd-1.20240129.0.tgz" + integrity sha512-t4pnsmjjk/u+GdVDgH2M1AFmJaBUABshYK/vT/HNrAXsHSwN6VR8Yqw0JQ845OokO34VLkuUtYQYyxHHKpdtsw== optionalDependencies: - "@cloudflare/workerd-darwin-arm64" "1.20231218.0" + "@cloudflare/workerd-darwin-arm64" "1.20240129.0" + "@cloudflare/workerd-darwin-64" "1.20240129.0" + "@cloudflare/workerd-linux-arm64" "1.20240129.0" + "@cloudflare/workerd-linux-64" "1.20240129.0" + "@cloudflare/workerd-windows-64" "1.20240129.0" wrap-ansi@^3.0.1: version "3.0.1"