diff --git a/packages/mdx/.prettierignore b/packages/mdx/.prettierignore new file mode 100644 index 0000000..a843dc4 --- /dev/null +++ b/packages/mdx/.prettierignore @@ -0,0 +1 @@ +test/fixtures diff --git a/packages/mdx/package.json b/packages/mdx/package.json index ef89cd5..c951257 100644 --- a/packages/mdx/package.json +++ b/packages/mdx/package.json @@ -60,7 +60,8 @@ "type": "tsc --noEmit", "lint": "eslint . --cache", "format": "prettier . --write", - "format:check": "prettier . --check" + "format:check": "prettier . --check", + "test": "vitest" }, "author": "Mintlify, Inc.", "license": "MIT", @@ -84,8 +85,12 @@ "prettier-plugin-tailwindcss": "^0.6.8", "react": "^19.2.1", "react-dom": "^19.2.1", + "rehype-stringify": "^10.0.1", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", "rimraf": "^5.0.1", - "typescript": "^5.7.2" + "typescript": "^5.7.2", + "vitest": "^4.0.17" }, "peerDependencies": { "@radix-ui/react-popover": "^19.2.1", diff --git a/packages/mdx/test/fixtures/link-support.md b/packages/mdx/test/fixtures/link-support.md new file mode 100644 index 0000000..5bd757e --- /dev/null +++ b/packages/mdx/test/fixtures/link-support.md @@ -0,0 +1,27 @@ +```js Link Testing icon="js" lines twoslash +import { useEffect, useState } from 'react'; + +// @link Component +export function Component() { + // ^? + return
import { function useEffect(effect: EffectCallback, deps?: DependencyList): voidAccepts a function that contains imperative, possibly effectful code.
useEffect , function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>] (+1 overload)Returns a stateful value, and a function to update it.
useState } from 'react';
+
+export function Component() { return <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >{count}</JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >;
+}
+
+export function OtherFunction() { return <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >{count}</JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >;
+}
+
+export function ExternalLink() { const const str: "Don't worry, only hover targets with ExternalLink will be affected, not random strings"str =
+ "Don't worry, only hover targets with ExternalLink will be affected, not random strings";
+ return <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >{count}</JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >;
+}
+
+Hello world from the Component section
console.log('Hello, world!');
+function add(a, b) {
+ return a + b;
+}
+
+function subtract(a, b) {
+ return a - b;
+}
+
+def add(a, b):
+ return a + b
+
+def subtract(a, b):
+ return a - b
+
+public class Main {
+ public static void main(String[] args) {
+ System.out.println("Hello, World!");
+ }
+}
+
+public class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("Hello, World!");
+ }
+}
+
\ No newline at end of file
diff --git a/packages/mdx/test/fixtures/twoslash.md b/packages/mdx/test/fixtures/twoslash.md
new file mode 100644
index 0000000..bdce722
--- /dev/null
+++ b/packages/mdx/test/fixtures/twoslash.md
@@ -0,0 +1,102 @@
+### Twoslash disabled without any additional configs or filenames
+
+```ts
+// This is a tooltip that will appear on the next line
+const myVariable = 'hello world';
+// ^?
+
+// This is the second line
+// You can include [links](#anchor) in your hover content
+function myFunction() {
+ // ^?
+ return myVariable;
+}
+```
+
+### Twoslash enabled without any additional configs or filenames
+
+```ts twoslash
+// This is a tooltip that will appear on the next line
+const myVariable = 'hello world';
+// ^?
+
+// This is the second line
+// You can include [links](#anchor) in your hover content
+function myFunction() {
+ // ^?
+ return myVariable;
+}
+```
+
+### Twoslash disabled with additional configs and filename
+
+```js something_with_external_packages.tsx icon="js" lines
+import { useEffect, useState } from 'react';
+
+export function Component() {
+ // ^?
+ const [count, setCount] = useState(0);
+ // ^? ^?
+
+ useEffect(() => {
+ setTimeout(() => setCount(count + 1), 1000);
+ // ^?
+ }, [count]);
+
+ return // This is a tooltip that will appear on the next line
+const myVariable = 'hello world';
+// ^?
+
+// This is the second line
+// You can include [links](#anchor) in your hover content
+function myFunction() {
+ // ^?
+ return myVariable;
+}
+
+// This is a tooltip that will appear on the next line
+const myVariable = 'hello world';
+// This is the second line
+// You can include [links](#anchor) in your hover content
+function myFunction() { return const myVariable: "hello world"myVariable ;
+}
+
+import { useEffect, useState } from 'react';
+
+export function Component() {
+ // ^?
+ const [count, setCount] = useState(0);
+ // ^? ^?
+
+ useEffect(() => {
+ setTimeout(() => setCount(count + 1), 1000);
+ // ^?
+ }, [count]);
+
+ return <div>{count}</div>;
+}
+
+import { function useEffect(effect: EffectCallback, deps?: DependencyList): voidAccepts a function that contains imperative, possibly effectful code.
useEffect , function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>] (+1 overload)Returns a stateful value, and a function to update it.
useState } from 'react';
+
+export function Component() { const [count, const setCount: Dispatch<SetStateAction<number>>setCount ] = useState<number>(initialState: number | (() => number)): [number, Dispatch<SetStateAction<number>>] (+1 overload)Returns a stateful value, and a function to update it.
useState (0);
+ function useEffect(effect: EffectCallback, deps?: DependencyList): voidAccepts a function that contains imperative, possibly effectful code.
useEffect (() => {
+ setTimeout(() => const setCount: (value: SetStateAction<number>) => voidsetCount (const count: numbercount + 1), 1000); }, [const count: numbercount ]);
+
+ return <JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >{const count: numbercount }</JSX.IntrinsicElements.div: DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>div >;
+}
+
+
+type type CanUseTool = (toolName: string, input: ToolInput, options: {
+ signal: AbortSignal;
+ suggestions?: PermissionUpdate[];
+}) => Promise<PermissionResult>
CanUseTool = (
+ toolName: stringtoolName : string,
+ input: ToolInputinput : type ToolInput = string[]ToolInput ,
+ options: {
+ signal: AbortSignal;
+ suggestions?: PermissionUpdate[];
+}
options : {
+ signal: AbortSignalsignal : AbortSignal;
+ suggestions?: PermissionUpdate[] | undefinedsuggestions ?: PermissionUpdate[]; }
+) => interface Promise<T>Represents the completion of an asynchronous operation
Promise <type PermissionResult = {
+ behavior: "allow";
+ updatedInput: ToolInput;
+ updatedPermissions?: PermissionUpdate[];
+} | {
+ behavior: "deny";
+ message: string;
+ interrupt?: boolean;
+}
PermissionResult >;
+
\ No newline at end of file
diff --git a/packages/mdx/test/rehype.test.ts b/packages/mdx/test/rehype.test.ts
new file mode 100644
index 0000000..de0ee85
--- /dev/null
+++ b/packages/mdx/test/rehype.test.ts
@@ -0,0 +1,66 @@
+import fs from 'node:fs/promises';
+import rehypeStringify from 'rehype-stringify';
+import remarkParse from 'remark-parse';
+import remarkRehype from 'remark-rehype';
+import { unified } from 'unified';
+import { describe, expect, it } from 'vitest';
+
+import { rehypeSyntaxHighlighting } from '../src/plugins/index.js';
+import { MOCK_HAST_TREE } from './fixtures/mock-hast-tree.js';
+
+describe('Unit test', () => {
+ it('should set pre code node properties', async () => {
+ // Plugin isolated run
+ const processor = unified().use(rehypeSyntaxHighlighting);
+ const result = await processor.run(structuredClone(MOCK_HAST_TREE));
+ const preCodeNode = result.children.find(
+ (node) => node.type === 'element' && node.tagName === 'pre'
+ );
+
+ // Check if pre code node properties are set
+ expect(preCodeNode?.type === 'element' && preCodeNode.properties.class).toBeDefined();
+ expect(preCodeNode?.type === 'element' && preCodeNode.properties.style).toBeDefined();
+ expect(preCodeNode?.type === 'element' && preCodeNode.properties.language).toBeDefined();
+
+ // Check if language is set correctly
+ expect(preCodeNode?.type === 'element' && preCodeNode.properties.language).toBe('javascript');
+
+ // Check if data meta is set correctly
+ expect(preCodeNode?.type === 'element' && preCodeNode.data?.meta).toBe('index.js {1}');
+ });
+});
+
+describe('Snapshot test', () => {
+ const createProcessor = () =>
+ unified().use(remarkParse).use(remarkRehype).use(rehypeSyntaxHighlighting).use(rehypeStringify);
+
+ it('syntax highlight', async () => {
+ const processor = createProcessor();
+ const result = await processor.process(
+ await fs.readFile(new URL('./fixtures/syntax-highlight.md', import.meta.url))
+ );
+
+ // Check syntax highlighting
+ await expect(result.toString()).toMatchFileSnapshot('./fixtures/syntax-highlight.out.html');
+ });
+
+ it('twoslash', async () => {
+ const processor = createProcessor();
+ const result = await processor.process(
+ await fs.readFile(new URL('./fixtures/twoslash.md', import.meta.url))
+ );
+
+ // Check twoslash
+ await expect(result.toString()).toMatchFileSnapshot('./fixtures/twoslash.out.html');
+ });
+
+ it('link support', async () => {
+ const processor = createProcessor();
+ const result = await processor.process(
+ await fs.readFile(new URL('./fixtures/link-support.md', import.meta.url))
+ );
+
+ // Check link support
+ await expect(result.toString()).toMatchFileSnapshot('./fixtures/link-support.out.html');
+ });
+});
diff --git a/packages/mdx/vitest.config.ts b/packages/mdx/vitest.config.ts
new file mode 100644
index 0000000..9ac4c88
--- /dev/null
+++ b/packages/mdx/vitest.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ testTimeout: 10_000,
+ include: ['test/**/*.test.ts'],
+ exclude: ['**/node_modules/**', '**/dist/**'],
+ },
+});
diff --git a/yarn.lock b/yarn.lock
index 8689990..3677281 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -393,6 +393,188 @@ __metadata:
languageName: node
linkType: hard
+"@esbuild/aix-ppc64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/aix-ppc64@npm:0.27.2"
+ conditions: os=aix & cpu=ppc64
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/android-arm64@npm:0.27.2"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-arm@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/android-arm@npm:0.27.2"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/android-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/android-x64@npm:0.27.2"
+ conditions: os=android & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/darwin-arm64@npm:0.27.2"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/darwin-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/darwin-x64@npm:0.27.2"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/freebsd-arm64@npm:0.27.2"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/freebsd-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/freebsd-x64@npm:0.27.2"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-arm64@npm:0.27.2"
+ conditions: os=linux & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-arm@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-arm@npm:0.27.2"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ia32@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-ia32@npm:0.27.2"
+ conditions: os=linux & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-loong64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-loong64@npm:0.27.2"
+ conditions: os=linux & cpu=loong64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-mips64el@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-mips64el@npm:0.27.2"
+ conditions: os=linux & cpu=mips64el
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-ppc64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-ppc64@npm:0.27.2"
+ conditions: os=linux & cpu=ppc64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-riscv64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-riscv64@npm:0.27.2"
+ conditions: os=linux & cpu=riscv64
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-s390x@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-s390x@npm:0.27.2"
+ conditions: os=linux & cpu=s390x
+ languageName: node
+ linkType: hard
+
+"@esbuild/linux-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/linux-x64@npm:0.27.2"
+ conditions: os=linux & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/netbsd-arm64@npm:0.27.2"
+ conditions: os=netbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/netbsd-x64@npm:0.27.2"
+ conditions: os=netbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openbsd-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/openbsd-arm64@npm:0.27.2"
+ conditions: os=openbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openbsd-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/openbsd-x64@npm:0.27.2"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/openharmony-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/openharmony-arm64@npm:0.27.2"
+ conditions: os=openharmony & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/sunos-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/sunos-x64@npm:0.27.2"
+ conditions: os=sunos & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-arm64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/win32-arm64@npm:0.27.2"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-ia32@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/win32-ia32@npm:0.27.2"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-x64@npm:0.27.2":
+ version: 0.27.2
+ resolution: "@esbuild/win32-x64@npm:0.27.2"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
@@ -948,7 +1130,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/sourcemap-codec@npm:^1.5.0":
+"@jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5":
version: 1.5.5
resolution: "@jridgewell/sourcemap-codec@npm:1.5.5"
checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0
@@ -1079,14 +1261,18 @@ __metadata:
react: "npm:^19.2.1"
react-dom: "npm:^19.2.1"
rehype-katex: "npm:^7.0.1"
+ rehype-stringify: "npm:^10.0.1"
remark-gfm: "npm:^4.0.0"
remark-math: "npm:^6.0.0"
+ remark-parse: "npm:^11.0.0"
+ remark-rehype: "npm:^11.1.2"
remark-smartypants: "npm:^3.0.2"
rimraf: "npm:^5.0.1"
shiki: "npm:^3.11.0"
typescript: "npm:^5.7.2"
unified: "npm:^11.0.0"
unist-util-visit: "npm:^5.0.0"
+ vitest: "npm:^4.0.17"
peerDependencies:
"@radix-ui/react-popover": ^19.2.1
react: ^19.2.1
@@ -1617,6 +1803,181 @@ __metadata:
languageName: node
linkType: hard
+"@rollup/rollup-android-arm-eabi@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-android-arm-eabi@npm:4.55.2"
+ conditions: os=android & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-android-arm64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-android-arm64@npm:4.55.2"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-darwin-arm64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-darwin-arm64@npm:4.55.2"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-darwin-x64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-darwin-x64@npm:4.55.2"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-freebsd-arm64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-freebsd-arm64@npm:4.55.2"
+ conditions: os=freebsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-freebsd-x64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-freebsd-x64@npm:4.55.2"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2"
+ conditions: os=linux & cpu=arm & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-arm-musleabihf@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.55.2"
+ conditions: os=linux & cpu=arm & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-arm64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-arm64-musl@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-arm64-musl@npm:4.55.2"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-loong64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=loong64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-loong64-musl@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-loong64-musl@npm:4.55.2"
+ conditions: os=linux & cpu=loong64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-ppc64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=ppc64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-ppc64-musl@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.55.2"
+ conditions: os=linux & cpu=ppc64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-riscv64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=riscv64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-riscv64-musl@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.55.2"
+ conditions: os=linux & cpu=riscv64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-s390x-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-x64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.55.2"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-x64-musl@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-linux-x64-musl@npm:4.55.2"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-openbsd-x64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-openbsd-x64@npm:4.55.2"
+ conditions: os=openbsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-openharmony-arm64@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-openharmony-arm64@npm:4.55.2"
+ conditions: os=openharmony & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-win32-arm64-msvc@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.55.2"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-win32-ia32-msvc@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.55.2"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-win32-x64-gnu@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-win32-x64-gnu@npm:4.55.2"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-win32-x64-msvc@npm:4.55.2":
+ version: 4.55.2
+ resolution: "@rollup/rollup-win32-x64-msvc@npm:4.55.2"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@rtsao/scc@npm:^1.1.0":
version: 1.1.0
resolution: "@rtsao/scc@npm:1.1.0"
@@ -1737,6 +2098,13 @@ __metadata:
languageName: node
linkType: hard
+"@standard-schema/spec@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "@standard-schema/spec@npm:1.1.0"
+ checksum: 10c0/d90f55acde4b2deb983529c87e8025fa693de1a5e8b49ecc6eb84d1fd96328add0e03d7d551442156c7432fd78165b2c26ff561b970a9a881f046abb78d6a526
+ languageName: node
+ linkType: hard
+
"@swc/helpers@npm:0.5.15":
version: 0.5.15
resolution: "@swc/helpers@npm:0.5.15"
@@ -1796,6 +2164,16 @@ __metadata:
languageName: node
linkType: hard
+"@types/chai@npm:^5.2.2":
+ version: 5.2.3
+ resolution: "@types/chai@npm:5.2.3"
+ dependencies:
+ "@types/deep-eql": "npm:*"
+ assertion-error: "npm:^2.0.1"
+ checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f
+ languageName: node
+ linkType: hard
+
"@types/debug@npm:^4.0.0":
version: 4.1.12
resolution: "@types/debug@npm:4.1.12"
@@ -1805,6 +2183,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/deep-eql@npm:*":
+ version: 4.0.2
+ resolution: "@types/deep-eql@npm:4.0.2"
+ checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844
+ languageName: node
+ linkType: hard
+
"@types/estree-jsx@npm:^1.0.0":
version: 1.0.3
resolution: "@types/estree-jsx@npm:1.0.3"
@@ -1821,7 +2206,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/estree@npm:^1.0.6":
+"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.6":
version: 1.0.8
resolution: "@types/estree@npm:1.0.8"
checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5
@@ -2236,6 +2621,86 @@ __metadata:
languageName: node
linkType: hard
+"@vitest/expect@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/expect@npm:4.0.17"
+ dependencies:
+ "@standard-schema/spec": "npm:^1.0.0"
+ "@types/chai": "npm:^5.2.2"
+ "@vitest/spy": "npm:4.0.17"
+ "@vitest/utils": "npm:4.0.17"
+ chai: "npm:^6.2.1"
+ tinyrainbow: "npm:^3.0.3"
+ checksum: 10c0/cdaa6827aa3a9473d51fd0944bcd698a94507929fa3c98b00bbdb74342319ec04279f01108d7d2dd7cbcd0d8062f65a3f21bb3615c0d5223e61adcc036c8b370
+ languageName: node
+ linkType: hard
+
+"@vitest/mocker@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/mocker@npm:4.0.17"
+ dependencies:
+ "@vitest/spy": "npm:4.0.17"
+ estree-walker: "npm:^3.0.3"
+ magic-string: "npm:^0.30.21"
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+ checksum: 10c0/54e657fa5b79764926b15aac993528bfe7083f6731209253617b1f27d328aa3297fcbf96b67e84d1a5632553231f795585f2396f563837cf117a574c87f5cef7
+ languageName: node
+ linkType: hard
+
+"@vitest/pretty-format@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/pretty-format@npm:4.0.17"
+ dependencies:
+ tinyrainbow: "npm:^3.0.3"
+ checksum: 10c0/10a2dd7e2daf7ee006107d380bbd28b66b09a7014d31087daab0dea7dee0d12868cfcf6b3372729268502fd9065162345b68b9b9c5d225f5c6c2fd2c664a2a86
+ languageName: node
+ linkType: hard
+
+"@vitest/runner@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/runner@npm:4.0.17"
+ dependencies:
+ "@vitest/utils": "npm:4.0.17"
+ pathe: "npm:^2.0.3"
+ checksum: 10c0/f4ccc236d1ed5ba2186d5f36ff0306d4ac7b711a40d7316ad6fd71c0f7229482b19969a8737e87670f3d4efb08f2138ff5b47a744fd7ae8db6c03cf991293a04
+ languageName: node
+ linkType: hard
+
+"@vitest/snapshot@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/snapshot@npm:4.0.17"
+ dependencies:
+ "@vitest/pretty-format": "npm:4.0.17"
+ magic-string: "npm:^0.30.21"
+ pathe: "npm:^2.0.3"
+ checksum: 10c0/31a047a097b13eff6c0f5393ea3e7203771ae9a22afe6465cd9023fd2ed516ddccd84523d48504a032c9d04a86a12e3f1235e08bb2ffc7d7a125e372c41ef53d
+ languageName: node
+ linkType: hard
+
+"@vitest/spy@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/spy@npm:4.0.17"
+ checksum: 10c0/c290731ba3392f11eaba8fc7fa08063a3a4d14af6baeec210b260ccd5a46613196fb4a8ff3ac8bf91a9606aef90eee9b6364bda130ce71abff368e35dfe2b265
+ languageName: node
+ linkType: hard
+
+"@vitest/utils@npm:4.0.17":
+ version: 4.0.17
+ resolution: "@vitest/utils@npm:4.0.17"
+ dependencies:
+ "@vitest/pretty-format": "npm:4.0.17"
+ tinyrainbow: "npm:^3.0.3"
+ checksum: 10c0/1e2e4d7d7709ec022f603a1e12015523a2290f326c0bbe0c6bd5481ec396d4efc6bf8c738d601915d88e74267e9841df1e05157edced10f5048865204aeb86ff
+ languageName: node
+ linkType: hard
+
"abbrev@npm:^2.0.0":
version: 2.0.0
resolution: "abbrev@npm:2.0.0"
@@ -2562,6 +3027,13 @@ __metadata:
languageName: node
linkType: hard
+"assertion-error@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "assertion-error@npm:2.0.1"
+ checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8
+ languageName: node
+ linkType: hard
+
"ast-types-flow@npm:^0.0.8":
version: 0.0.8
resolution: "ast-types-flow@npm:0.0.8"
@@ -2843,6 +3315,13 @@ __metadata:
languageName: node
linkType: hard
+"chai@npm:^6.2.1":
+ version: 6.2.2
+ resolution: "chai@npm:6.2.2"
+ checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53
+ languageName: node
+ linkType: hard
+
"chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
@@ -3506,6 +3985,13 @@ __metadata:
languageName: node
linkType: hard
+"es-module-lexer@npm:^1.7.0":
+ version: 1.7.0
+ resolution: "es-module-lexer@npm:1.7.0"
+ checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b
+ languageName: node
+ linkType: hard
+
"es-object-atoms@npm:^1.0.0":
version: 1.0.0
resolution: "es-object-atoms@npm:1.0.0"
@@ -3600,6 +4086,95 @@ __metadata:
languageName: node
linkType: hard
+"esbuild@npm:^0.27.0":
+ version: 0.27.2
+ resolution: "esbuild@npm:0.27.2"
+ dependencies:
+ "@esbuild/aix-ppc64": "npm:0.27.2"
+ "@esbuild/android-arm": "npm:0.27.2"
+ "@esbuild/android-arm64": "npm:0.27.2"
+ "@esbuild/android-x64": "npm:0.27.2"
+ "@esbuild/darwin-arm64": "npm:0.27.2"
+ "@esbuild/darwin-x64": "npm:0.27.2"
+ "@esbuild/freebsd-arm64": "npm:0.27.2"
+ "@esbuild/freebsd-x64": "npm:0.27.2"
+ "@esbuild/linux-arm": "npm:0.27.2"
+ "@esbuild/linux-arm64": "npm:0.27.2"
+ "@esbuild/linux-ia32": "npm:0.27.2"
+ "@esbuild/linux-loong64": "npm:0.27.2"
+ "@esbuild/linux-mips64el": "npm:0.27.2"
+ "@esbuild/linux-ppc64": "npm:0.27.2"
+ "@esbuild/linux-riscv64": "npm:0.27.2"
+ "@esbuild/linux-s390x": "npm:0.27.2"
+ "@esbuild/linux-x64": "npm:0.27.2"
+ "@esbuild/netbsd-arm64": "npm:0.27.2"
+ "@esbuild/netbsd-x64": "npm:0.27.2"
+ "@esbuild/openbsd-arm64": "npm:0.27.2"
+ "@esbuild/openbsd-x64": "npm:0.27.2"
+ "@esbuild/openharmony-arm64": "npm:0.27.2"
+ "@esbuild/sunos-x64": "npm:0.27.2"
+ "@esbuild/win32-arm64": "npm:0.27.2"
+ "@esbuild/win32-ia32": "npm:0.27.2"
+ "@esbuild/win32-x64": "npm:0.27.2"
+ dependenciesMeta:
+ "@esbuild/aix-ppc64":
+ optional: true
+ "@esbuild/android-arm":
+ optional: true
+ "@esbuild/android-arm64":
+ optional: true
+ "@esbuild/android-x64":
+ optional: true
+ "@esbuild/darwin-arm64":
+ optional: true
+ "@esbuild/darwin-x64":
+ optional: true
+ "@esbuild/freebsd-arm64":
+ optional: true
+ "@esbuild/freebsd-x64":
+ optional: true
+ "@esbuild/linux-arm":
+ optional: true
+ "@esbuild/linux-arm64":
+ optional: true
+ "@esbuild/linux-ia32":
+ optional: true
+ "@esbuild/linux-loong64":
+ optional: true
+ "@esbuild/linux-mips64el":
+ optional: true
+ "@esbuild/linux-ppc64":
+ optional: true
+ "@esbuild/linux-riscv64":
+ optional: true
+ "@esbuild/linux-s390x":
+ optional: true
+ "@esbuild/linux-x64":
+ optional: true
+ "@esbuild/netbsd-arm64":
+ optional: true
+ "@esbuild/netbsd-x64":
+ optional: true
+ "@esbuild/openbsd-arm64":
+ optional: true
+ "@esbuild/openbsd-x64":
+ optional: true
+ "@esbuild/openharmony-arm64":
+ optional: true
+ "@esbuild/sunos-x64":
+ optional: true
+ "@esbuild/win32-arm64":
+ optional: true
+ "@esbuild/win32-ia32":
+ optional: true
+ "@esbuild/win32-x64":
+ optional: true
+ bin:
+ esbuild: bin/esbuild
+ checksum: 10c0/cf83f626f55500f521d5fe7f4bc5871bec240d3deb2a01fbd379edc43b3664d1167428738a5aad8794b35d1cca985c44c375b1cd38a2ca613c77ced2c83aafcd
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
@@ -4123,7 +4698,7 @@ __metadata:
languageName: node
linkType: hard
-"estree-walker@npm:^3.0.0":
+"estree-walker@npm:^3.0.0, estree-walker@npm:^3.0.3":
version: 3.0.3
resolution: "estree-walker@npm:3.0.3"
dependencies:
@@ -4139,6 +4714,13 @@ __metadata:
languageName: node
linkType: hard
+"expect-type@npm:^1.2.2":
+ version: 1.3.0
+ resolution: "expect-type@npm:1.3.0"
+ checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd
+ languageName: node
+ linkType: hard
+
"exponential-backoff@npm:^3.1.1":
version: 3.1.1
resolution: "exponential-backoff@npm:3.1.1"
@@ -4346,7 +4928,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:~2.3.2":
+"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
dependencies:
@@ -4356,7 +4938,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin