diff --git a/packages/render/package.json b/packages/render/package.json
index df5ccbfeeb..d319a34925 100644
--- a/packages/render/package.json
+++ b/packages/render/package.json
@@ -124,6 +124,7 @@
"devDependencies": {
"@edge-runtime/vm": "5.0.0",
"@types/html-to-text": "9.0.4",
+ "@types/node": "^25.0.3",
"@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0",
"jsdom": "26.1.0",
diff --git a/packages/render/src/browser/render.tsx b/packages/render/src/browser/render.tsx
index a2cfd765f4..8f6ea6608f 100644
--- a/packages/render/src/browser/render.tsx
+++ b/packages/render/src/browser/render.tsx
@@ -1,7 +1,7 @@
import { Suspense } from 'react';
import { pretty, toPlainText } from '../node';
import type { Options } from '../shared/options';
-import { readStream } from '../shared/read-stream.browser';
+import { renderToReadableStream } from '../shared/render-to-readable-stream';
export const render = async (node: React.ReactNode, options?: Options) => {
const suspendedElement = {node};
@@ -12,18 +12,7 @@ export const render = async (node: React.ReactNode, options?: Options) => {
return m;
});
- const html = await new Promise((resolve, reject) => {
- reactDOMServer
- .renderToReadableStream(suspendedElement, {
- onError(error: unknown) {
- reject(error);
- },
- progressiveChunkSize: Number.POSITIVE_INFINITY,
- })
- .then(readStream)
- .then(resolve)
- .catch(reject);
- });
+ const html = await renderToReadableStream(suspendedElement, reactDOMServer);
if (options?.plainText) {
return toPlainText(html, options.htmlToTextOptions);
diff --git a/packages/render/src/edge/render.tsx b/packages/render/src/edge/render.tsx
index 121cae7578..3c811e971b 100644
--- a/packages/render/src/edge/render.tsx
+++ b/packages/render/src/edge/render.tsx
@@ -1,7 +1,7 @@
import { Suspense } from 'react';
import { pretty } from '../node';
import type { Options } from '../shared/options';
-import { readStream } from '../shared/read-stream.browser';
+import { renderToReadableStream } from '../shared/render-to-readable-stream';
import { toPlainText } from '../shared/utils/to-plain-text';
import { importReactDom } from './import-react-dom';
@@ -18,18 +18,7 @@ export const render = async (
return m;
});
- const html = await new Promise((resolve, reject) => {
- reactDOMServer
- .renderToReadableStream(suspendedElement, {
- onError(error: unknown) {
- reject(error);
- },
- progressiveChunkSize: Number.POSITIVE_INFINITY,
- })
- .then(readStream)
- .then(resolve)
- .catch(reject);
- });
+ const html = await renderToReadableStream(suspendedElement, reactDOMServer);
if (options?.plainText) {
return toPlainText(html, options.htmlToTextOptions);
diff --git a/packages/render/src/node/read-stream.spec.ts b/packages/render/src/node/read-stream.spec.ts
index a61867886c..3adb269313 100644
--- a/packages/render/src/node/read-stream.spec.ts
+++ b/packages/render/src/node/read-stream.spec.ts
@@ -3,189 +3,154 @@ import { describe, expect, it } from 'vitest';
import { readStream } from './read-stream';
describe('readStream', () => {
- describe('multi-byte character handling', () => {
- it('correctly decodes Japanese characters split across chunks', async () => {
- // Create a string with Japanese text that will be split across chunks
- const japaneseText = 'これはテストです。スケジュール確認をお願いします。';
- const buffer = Buffer.from(japaneseText, 'utf-8');
-
- // Split the buffer at a position that would break a multi-byte character
- // "ス" in UTF-8 is E3 82 B9, let's split after E3 82
- const splitPosition = buffer.indexOf(Buffer.from('スケジュール')) + 2;
-
- // Create chunks that split the character
- const chunk1 = buffer.slice(0, splitPosition);
- const chunk2 = buffer.slice(splitPosition);
-
- // Create a mock PipeableStream that emits our chunks
- const mockStream = new Readable({
- read() {
- if (this.chunkIndex === 0) {
- this.push(chunk1);
- this.chunkIndex++;
- } else if (this.chunkIndex === 1) {
- this.push(chunk2);
- this.chunkIndex++;
- } else {
- this.push(null); // End the stream
- }
- },
- });
- mockStream.chunkIndex = 0;
-
- // Add pipe method to match PipeableStream interface
- const pipeableStream = {
- pipe: (writable: any) => mockStream.pipe(writable),
- };
-
- const result = await readStream(pipeableStream as any);
-
- // The result should match the original text without corruption
- expect(result).toBe(japaneseText);
- expect(result).not.toContain('\0'); // No null characters
- expect(result).toContain('スケジュール'); // Full word intact
+ it('correctly decodes Japanese characters split across chunks', async () => {
+ // Create a string with Japanese text that will be split across chunks
+ const japaneseText = 'これはテストです。スケジュール確認をお願いします。';
+ const buffer = Buffer.from(japaneseText, 'utf-8');
+
+ // Split the buffer at a position that would break a multi-byte character
+ // "ス" in UTF-8 is E3 82 B9, let's split after E3 82
+ const splitPosition = buffer.indexOf(Buffer.from('スケジュール')) + 2;
+
+ // Create chunks that split the character
+ const chunk1 = buffer.subarray(0, splitPosition);
+ const chunk2 = buffer.subarray(splitPosition);
+
+ // Create a mock stream that emits our chunks
+ let chunkIndex = 0;
+ const mockStream = new Readable({
+ read() {
+ if (chunkIndex === 0) {
+ this.push(chunk1);
+ chunkIndex++;
+ } else if (chunkIndex === 1) {
+ this.push(chunk2);
+ chunkIndex++;
+ } else {
+ this.push(null); // End the stream
+ }
+ },
});
- it('handles Chinese characters split across chunks', async () => {
- const chineseText = '这是一个测试。请确认您的日程安排。';
- const buffer = Buffer.from(chineseText, 'utf-8');
-
- // Split in the middle of a Chinese character
- const splitPosition = buffer.indexOf(Buffer.from('日程')) + 1;
-
- const chunk1 = buffer.slice(0, splitPosition);
- const chunk2 = buffer.slice(splitPosition);
-
- const mockStream = new Readable({
- read() {
- if (this.chunkIndex === 0) {
- this.push(chunk1);
- this.chunkIndex++;
- } else if (this.chunkIndex === 1) {
- this.push(chunk2);
- this.chunkIndex++;
- } else {
- this.push(null);
- }
- },
- });
- mockStream.chunkIndex = 0;
-
- const pipeableStream = {
- pipe: (writable: any) => mockStream.pipe(writable),
- };
-
- const result = await readStream(pipeableStream as any);
-
- expect(result).toBe(chineseText);
- expect(result).not.toContain('\0');
- expect(result).toContain('日程');
- });
+ // Add pipe method to match stream interface
+ const pipeableStream = {
+ pipe: (writable: any) => mockStream.pipe(writable),
+ };
- it('handles emoji characters split across chunks', async () => {
- const emojiText = 'Hello 👋 World 🌍 Test 🚀';
- const buffer = Buffer.from(emojiText, 'utf-8');
-
- // Emojis are 4-byte UTF-8 sequences, split one
- const rocketEmoji = Buffer.from('🚀');
- const splitPosition = buffer.indexOf(rocketEmoji) + 2; // Split in middle of rocket emoji
-
- const chunk1 = buffer.slice(0, splitPosition);
- const chunk2 = buffer.slice(splitPosition);
-
- const mockStream = new Readable({
- read() {
- if (this.chunkIndex === 0) {
- this.push(chunk1);
- this.chunkIndex++;
- } else if (this.chunkIndex === 1) {
- this.push(chunk2);
- this.chunkIndex++;
- } else {
- this.push(null);
- }
- },
- });
- mockStream.chunkIndex = 0;
-
- const pipeableStream = {
- pipe: (writable: any) => mockStream.pipe(writable),
- };
-
- const result = await readStream(pipeableStream as any);
-
- expect(result).toBe(emojiText);
- expect(result).not.toContain('\0');
- expect(result).toContain('🚀');
- });
+ const result = await readStream(pipeableStream as any);
- it('handles many small chunks with multi-byte characters', async () => {
- const mixedText = 'Test テスト 测试 Тест מבחן';
- const buffer = Buffer.from(mixedText, 'utf-8');
-
- // Create many small chunks (3 bytes each)
- const chunks: Buffer[] = [];
- for (let i = 0; i < buffer.length; i += 3) {
- chunks.push(buffer.slice(i, Math.min(i + 3, buffer.length)));
- }
-
- let currentChunk = 0;
- const mockStream = new Readable({
- read() {
- if (currentChunk < chunks.length) {
- this.push(chunks[currentChunk]);
- currentChunk++;
- } else {
- this.push(null);
- }
- },
- });
-
- const pipeableStream = {
- pipe: (writable: any) => mockStream.pipe(writable),
- };
-
- const result = await readStream(pipeableStream as any);
-
- expect(result).toBe(mixedText);
- expect(result).not.toContain('\0');
- expect(result).toContain('テスト');
- expect(result).toContain('测试');
- expect(result).toContain('Тест');
- expect(result).toContain('מבחן');
- });
+ // The result should match the original text without corruption
+ expect(result).toBe(japaneseText);
+ expect(result).not.toContain('\0'); // No null characters
+ expect(result).toContain('スケジュール'); // Full word intact
});
- describe('ReadableStream (pipeTo) path', () => {
- it('handles multi-byte characters with ReadableStream', async () => {
- const japaneseText = 'バクラクのメールテンプレートでスケジュール確認';
- const buffer = Buffer.from(japaneseText, 'utf-8');
+ it('handles Chinese characters split across chunks', async () => {
+ const chineseText = '这是一个测试。请确认您的日程安排。';
+ const buffer = Buffer.from(chineseText, 'utf-8');
+
+ // Split in the middle of a Chinese character
+ const splitPosition = buffer.indexOf(Buffer.from('日程')) + 1;
+
+ const chunk1 = buffer.subarray(0, splitPosition);
+ const chunk2 = buffer.subarray(splitPosition);
+
+ let chunkIndex = 0;
+ const mockStream = new Readable({
+ read() {
+ if (chunkIndex === 0) {
+ this.push(chunk1);
+ chunkIndex++;
+ } else if (chunkIndex === 1) {
+ this.push(chunk2);
+ chunkIndex++;
+ } else {
+ this.push(null);
+ }
+ },
+ });
- // Split at a position that breaks a character
- const splitPosition = buffer.indexOf(Buffer.from('スケジュール')) + 2;
- const chunk1 = buffer.slice(0, splitPosition);
- const chunk2 = buffer.slice(splitPosition);
+ const pipeableStream = {
+ pipe: (writable: any) => mockStream.pipe(writable),
+ };
- // Mock a ReactDOMServerReadableStream
- const chunks = [chunk1, chunk2];
+ const result = await readStream(pipeableStream as any);
- const mockReadableStream = {
- pipeTo: async (writable: WritableStream) => {
- const writer = writable.getWriter();
+ expect(result).toBe(chineseText);
+ expect(result).not.toContain('\0');
+ expect(result).toContain('日程');
+ });
- for (const chunk of chunks) {
- await writer.write(chunk);
- }
+ it('handles emoji characters split across chunks', async () => {
+ const emojiText = 'Hello 👋 World 🌍 Test 🚀';
+ const buffer = Buffer.from(emojiText, 'utf-8');
+
+ // Emojis are 4-byte UTF-8 sequences, split one
+ const rocketEmoji = Buffer.from('🚀');
+ const splitPosition = buffer.indexOf(rocketEmoji) + 2; // Split in middle of rocket emoji
+
+ const chunk1 = buffer.subarray(0, splitPosition);
+ const chunk2 = buffer.subarray(splitPosition);
+
+ let chunkIndex = 0;
+ const mockStream = new Readable({
+ read() {
+ if (chunkIndex === 0) {
+ this.push(chunk1);
+ chunkIndex++;
+ } else if (chunkIndex === 1) {
+ this.push(chunk2);
+ chunkIndex++;
+ } else {
+ this.push(null);
+ }
+ },
+ });
- await writer.close();
- },
- };
+ const pipeableStream = {
+ pipe: (writable: any) => mockStream.pipe(writable),
+ };
- const result = await readStream(mockReadableStream as any);
+ const result = await readStream(pipeableStream as any);
- expect(result).toBe(japaneseText);
- expect(result).not.toContain('\0');
- expect(result).toContain('スケジュール');
+ expect(result).toBe(emojiText);
+ expect(result).not.toContain('\0');
+ expect(result).toContain('🚀');
+ });
+
+ it('handles many small chunks with multi-byte characters', async () => {
+ const mixedText = 'Test テスト 测试 Тест מבחן';
+ const buffer = Buffer.from(mixedText, 'utf-8');
+
+ // Create many small chunks (3 bytes each)
+ const chunks: Buffer[] = [];
+ for (let i = 0; i < buffer.length; i += 3) {
+ chunks.push(buffer.subarray(i, Math.min(i + 3, buffer.length)));
+ }
+
+ let currentChunk = 0;
+ const mockStream = new Readable({
+ read() {
+ if (currentChunk < chunks.length) {
+ this.push(chunks[currentChunk]);
+ currentChunk++;
+ } else {
+ this.push(null);
+ }
+ },
});
+
+ const pipeableStream = {
+ pipe: (writable: any) => mockStream.pipe(writable),
+ };
+
+ const result = await readStream(pipeableStream as any);
+
+ expect(result).toBe(mixedText);
+ expect(result).not.toContain('\0');
+ expect(result).toContain('テスト');
+ expect(result).toContain('测试');
+ expect(result).toContain('Тест');
+ expect(result).toContain('מבחן');
});
});
diff --git a/packages/render/src/node/read-stream.ts b/packages/render/src/node/read-stream.ts
index e4226b6549..c9cf15baa2 100644
--- a/packages/render/src/node/read-stream.ts
+++ b/packages/render/src/node/read-stream.ts
@@ -1,53 +1,37 @@
import { Writable } from 'node:stream';
-import type {
- PipeableStream,
- ReactDOMServerReadableStream,
-} from 'react-dom/server.browser';
+import type { PipeableStream } from 'react-dom/server.browser';
-export const readStream = async (
- stream: PipeableStream | ReactDOMServerReadableStream,
-) => {
+export const readStream = async (stream: PipeableStream) => {
let result = '';
// Create a single TextDecoder instance to handle streaming properly
- // This fixes issues with multi-byte characters (e.g., CJK) being split across chunks
+ // This fixes issues with multi-byte characters (e.g., CJK characters) being split across chunks
const decoder = new TextDecoder('utf-8');
- if ('pipeTo' in stream) {
- // means it's a readable stream
- const writableStream = new WritableStream({
- write(chunk: BufferSource) {
- // Use stream: true to handle multi-byte characters split across chunks
- result += decoder.decode(chunk, { stream: true });
- },
- close() {
- // Flush any remaining bytes
- result += decoder.decode();
- },
- });
- await stream.pipeTo(writableStream);
- } else {
- const writable = new Writable({
- write(chunk: BufferSource, _encoding, callback) {
- // Use stream: true to handle multi-byte characters split across chunks
- result += decoder.decode(chunk, { stream: true });
+ const writable = new Writable({
+ write(
+ chunk: BufferSource,
+ _encoding: BufferEncoding,
+ callback: (error?: Error | null) => void,
+ ) {
+ // Use stream: true to handle multi-byte characters split across chunks
+ result += decoder.decode(chunk, { stream: true });
- callback();
- },
- final(callback) {
- // Flush any remaining bytes
- result += decoder.decode();
- callback();
- },
- });
- stream.pipe(writable);
+ callback();
+ },
+ final(callback: (error?: Error | null) => void) {
+ // Flush any remaining bytes
+ result += decoder.decode();
+ callback();
+ },
+ });
+ stream.pipe(writable);
- await new Promise((resolve, reject) => {
- writable.on('error', reject);
- writable.on('close', () => {
- resolve();
- });
+ await new Promise((resolve, reject) => {
+ writable.on('error', reject);
+ writable.on('close', () => {
+ resolve();
});
- }
+ });
return result;
};
diff --git a/packages/render/src/node/render.tsx b/packages/render/src/node/render.tsx
index 642d14e131..cff88220b1 100644
--- a/packages/render/src/node/render.tsx
+++ b/packages/render/src/node/render.tsx
@@ -1,5 +1,6 @@
import { Suspense } from 'react';
import type { Options } from '../shared/options';
+import { renderToReadableStream } from '../shared/render-to-readable-stream';
import { pretty } from '../shared/utils/pretty';
import { toPlainText } from '../shared/utils/to-plain-text';
import { readStream } from './read-stream';
@@ -18,11 +19,7 @@ export const render = async (node: React.ReactNode, options?: Options) => {
Object.hasOwn(reactDOMServer, 'renderToReadableStream') &&
typeof WritableStream !== 'undefined'
) {
- html = await readStream(
- await reactDOMServer.renderToReadableStream(suspendedElement, {
- progressiveChunkSize: Number.POSITIVE_INFINITY,
- }),
- );
+ html = await renderToReadableStream(suspendedElement, reactDOMServer);
} else {
await new Promise((resolve, reject) => {
const stream = reactDOMServer.renderToPipeableStream(suspendedElement, {
@@ -30,6 +27,9 @@ export const render = async (node: React.ReactNode, options?: Options) => {
html = await readStream(stream);
resolve();
},
+ onShellError(error) {
+ reject(error as Error);
+ },
onError(error) {
reject(error as Error);
},
diff --git a/packages/render/src/shared/read-stream.browser.spec.ts b/packages/render/src/shared/read-stream.browser.spec.ts
new file mode 100644
index 0000000000..7ce2a433f4
--- /dev/null
+++ b/packages/render/src/shared/read-stream.browser.spec.ts
@@ -0,0 +1,34 @@
+import { readStream } from './read-stream.browser';
+
+describe('readStream() for the browser', () => {
+ it('handles multi-byte characters with ReadableStream', async () => {
+ const japaneseText = 'バクラクのメールテンプレートでスケジュール確認';
+ const buffer = Buffer.from(japaneseText, 'utf-8');
+
+ // Split at a position that breaks a character
+ const splitPosition = buffer.indexOf(Buffer.from('スケジュール')) + 2;
+ const chunk1 = buffer.subarray(0, splitPosition);
+ const chunk2 = buffer.subarray(splitPosition);
+
+ // Mock a ReactDOMServerReadableStream
+ const chunks = [chunk1, chunk2];
+
+ const mockReadableStream = {
+ pipeTo: async (writable: WritableStream) => {
+ const writer = writable.getWriter();
+
+ for (const chunk of chunks) {
+ await writer.write(chunk);
+ }
+
+ await writer.close();
+ },
+ };
+
+ const result = await readStream(mockReadableStream as any);
+
+ expect(result).toBe(japaneseText);
+ expect(result).not.toContain('\0');
+ expect(result).toContain('スケジュール');
+ });
+});
diff --git a/packages/render/src/shared/read-stream.browser.ts b/packages/render/src/shared/read-stream.browser.ts
index 0a619f88d2..4582e85c96 100644
--- a/packages/render/src/shared/read-stream.browser.ts
+++ b/packages/render/src/shared/read-stream.browser.ts
@@ -1,34 +1,22 @@
import type { ReactDOMServerReadableStream } from 'react-dom/server.browser';
-const decoder = new TextDecoder('utf-8');
-
export const readStream = async (stream: ReactDOMServerReadableStream) => {
- const chunks: Uint8Array[] = [];
+ let result = '';
+ // Create a single TextDecoder instance to handle streaming properly
+ // This fixes issues with multi-byte characters (e.g., CJK) being split across chunks
+ const decoder = new TextDecoder('utf-8');
const writableStream = new WritableStream({
- write(chunk: Uint8Array) {
- chunks.push(chunk);
+ write(chunk: BufferSource) {
+ // Use stream: true to handle multi-byte characters split across chunks
+ result += decoder.decode(chunk, { stream: true });
},
- abort(reason) {
- throw new Error('Stream aborted', {
- cause: {
- reason,
- },
- });
+ close() {
+ // Flush any remaining bytes
+ result += decoder.decode();
},
});
await stream.pipeTo(writableStream);
- let length = 0;
- chunks.forEach((item) => {
- length += item.length;
- });
- const mergedChunks = new Uint8Array(length);
- let offset = 0;
- chunks.forEach((item) => {
- mergedChunks.set(item, offset);
- offset += item.length;
- });
-
- return decoder.decode(mergedChunks);
+ return result;
};
diff --git a/packages/render/src/shared/render-to-readable-stream.ts b/packages/render/src/shared/render-to-readable-stream.ts
new file mode 100644
index 0000000000..7090924922
--- /dev/null
+++ b/packages/render/src/shared/render-to-readable-stream.ts
@@ -0,0 +1,19 @@
+import { readStream } from './read-stream.browser';
+
+export function renderToReadableStream(
+ node: React.ReactNode,
+ reactDomServer: typeof import('react-dom/server'),
+) {
+ return new Promise((resolve, reject) => {
+ return reactDomServer
+ .renderToReadableStream(node, {
+ onError(error: unknown) {
+ reject(error);
+ },
+ progressiveChunkSize: Number.POSITIVE_INFINITY,
+ })
+ .then(readStream)
+ .then(resolve)
+ .catch(reject);
+ });
+}
diff --git a/packages/render/tsconfig.json b/packages/render/tsconfig.json
index cd6c94d6e8..19fb0c9adf 100644
--- a/packages/render/tsconfig.json
+++ b/packages/render/tsconfig.json
@@ -1,5 +1,8 @@
{
"extends": "tsconfig/react-library.json",
+ "compilerOptions": {
+ "types": ["node", "vitest/globals"]
+ },
"include": ["."],
"exclude": ["dist", "build", "node_modules"]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 04673343d3..6008bab073 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -89,7 +89,7 @@ importers:
dependencies:
mintlify:
specifier: 4.2.218
- version: 4.2.218(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@24.9.1)(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
+ version: 4.2.218(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@22.14.1)(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
zod:
specifier: 3.24.3
version: 3.24.3
@@ -934,6 +934,9 @@ importers:
'@types/html-to-text':
specifier: 9.0.4
version: 9.0.4
+ '@types/node':
+ specifier: ^25.0.3
+ version: 25.0.3
'@types/react':
specifier: ^19.0.1
version: 19.0.1
@@ -1044,7 +1047,7 @@ importers:
version: 0.8.15
'@vitejs/plugin-react':
specifier: 4.4.1
- version: 4.4.1(vite@6.4.1(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1))
+ version: 4.4.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1))
css-tree:
specifier: 3.1.0
version: 3.1.0
@@ -1062,7 +1065,7 @@ importers:
version: 5.8.3
vite:
specifier: 6.4.1
- version: 6.4.1(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1)
+ version: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1)
yalc:
specifier: 1.0.0-pre.53
version: 1.0.0-pre.53
@@ -4530,8 +4533,8 @@ packages:
'@types/node@22.14.1':
resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==}
- '@types/node@24.9.1':
- resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==}
+ '@types/node@25.0.3':
+ resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
'@types/normalize-path@3.0.2':
resolution: {integrity: sha512-DO++toKYPaFn0Z8hQ7Tx+3iT9t77IJo/nDiqTXilgEP+kPNIYdpS9kh3fXuc53ugqwp9pxC1PVjCpV1tQDyqMA==}
@@ -10788,51 +10791,51 @@ snapshots:
'@inquirer/ansi@1.0.2': {}
- '@inquirer/checkbox@4.3.1(@types/node@24.9.1)':
+ '@inquirer/checkbox@4.3.1(@types/node@22.14.1)':
dependencies:
'@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/confirm@5.1.20(@types/node@24.9.1)':
+ '@inquirer/confirm@5.1.20(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/core@10.3.1(@types/node@24.9.1)':
+ '@inquirer/core@10.3.1(@types/node@22.14.1)':
dependencies:
'@inquirer/ansi': 1.0.2
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
cli-width: 4.1.0
mute-stream: 3.0.0
signal-exit: 4.1.0
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/editor@4.2.22(@types/node@24.9.1)':
+ '@inquirer/editor@4.2.22(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/external-editor': 1.0.3(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/external-editor': 1.0.3(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/expand@4.0.22(@types/node@24.9.1)':
+ '@inquirer/expand@4.0.22(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
'@inquirer/external-editor@1.0.3(@types/node@22.14.1)':
dependencies:
@@ -10841,97 +10844,90 @@ snapshots:
optionalDependencies:
'@types/node': 22.14.1
- '@inquirer/external-editor@1.0.3(@types/node@24.9.1)':
- dependencies:
- chardet: 2.1.1
- iconv-lite: 0.7.0
- optionalDependencies:
- '@types/node': 24.9.1
-
'@inquirer/figures@1.0.15': {}
- '@inquirer/input@4.3.0(@types/node@24.9.1)':
+ '@inquirer/input@4.3.0(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/number@3.0.22(@types/node@24.9.1)':
+ '@inquirer/number@3.0.22(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/password@4.0.22(@types/node@24.9.1)':
+ '@inquirer/password@4.0.22(@types/node@22.14.1)':
dependencies:
'@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
-
- '@inquirer/prompts@7.10.0(@types/node@24.9.1)':
- dependencies:
- '@inquirer/checkbox': 4.3.1(@types/node@24.9.1)
- '@inquirer/confirm': 5.1.20(@types/node@24.9.1)
- '@inquirer/editor': 4.2.22(@types/node@24.9.1)
- '@inquirer/expand': 4.0.22(@types/node@24.9.1)
- '@inquirer/input': 4.3.0(@types/node@24.9.1)
- '@inquirer/number': 3.0.22(@types/node@24.9.1)
- '@inquirer/password': 4.0.22(@types/node@24.9.1)
- '@inquirer/rawlist': 4.1.10(@types/node@24.9.1)
- '@inquirer/search': 3.2.1(@types/node@24.9.1)
- '@inquirer/select': 4.4.1(@types/node@24.9.1)
+ '@types/node': 22.14.1
+
+ '@inquirer/prompts@7.10.0(@types/node@22.14.1)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.1(@types/node@22.14.1)
+ '@inquirer/confirm': 5.1.20(@types/node@22.14.1)
+ '@inquirer/editor': 4.2.22(@types/node@22.14.1)
+ '@inquirer/expand': 4.0.22(@types/node@22.14.1)
+ '@inquirer/input': 4.3.0(@types/node@22.14.1)
+ '@inquirer/number': 3.0.22(@types/node@22.14.1)
+ '@inquirer/password': 4.0.22(@types/node@22.14.1)
+ '@inquirer/rawlist': 4.1.10(@types/node@22.14.1)
+ '@inquirer/search': 3.2.1(@types/node@22.14.1)
+ '@inquirer/select': 4.4.1(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
-
- '@inquirer/prompts@7.9.0(@types/node@24.9.1)':
- dependencies:
- '@inquirer/checkbox': 4.3.1(@types/node@24.9.1)
- '@inquirer/confirm': 5.1.20(@types/node@24.9.1)
- '@inquirer/editor': 4.2.22(@types/node@24.9.1)
- '@inquirer/expand': 4.0.22(@types/node@24.9.1)
- '@inquirer/input': 4.3.0(@types/node@24.9.1)
- '@inquirer/number': 3.0.22(@types/node@24.9.1)
- '@inquirer/password': 4.0.22(@types/node@24.9.1)
- '@inquirer/rawlist': 4.1.10(@types/node@24.9.1)
- '@inquirer/search': 3.2.1(@types/node@24.9.1)
- '@inquirer/select': 4.4.1(@types/node@24.9.1)
+ '@types/node': 22.14.1
+
+ '@inquirer/prompts@7.9.0(@types/node@22.14.1)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.1(@types/node@22.14.1)
+ '@inquirer/confirm': 5.1.20(@types/node@22.14.1)
+ '@inquirer/editor': 4.2.22(@types/node@22.14.1)
+ '@inquirer/expand': 4.0.22(@types/node@22.14.1)
+ '@inquirer/input': 4.3.0(@types/node@22.14.1)
+ '@inquirer/number': 3.0.22(@types/node@22.14.1)
+ '@inquirer/password': 4.0.22(@types/node@22.14.1)
+ '@inquirer/rawlist': 4.1.10(@types/node@22.14.1)
+ '@inquirer/search': 3.2.1(@types/node@22.14.1)
+ '@inquirer/select': 4.4.1(@types/node@22.14.1)
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/rawlist@4.1.10(@types/node@24.9.1)':
+ '@inquirer/rawlist@4.1.10(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/search@3.2.1(@types/node@24.9.1)':
+ '@inquirer/search@3.2.1(@types/node@22.14.1)':
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/select@4.4.1(@types/node@24.9.1)':
+ '@inquirer/select@4.4.1(@types/node@22.14.1)':
dependencies:
'@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
'@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
yoctocolors-cjs: 2.1.3
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
- '@inquirer/type@3.0.10(@types/node@24.9.1)':
+ '@inquirer/type@3.0.10(@types/node@22.14.1)':
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 22.14.1
'@isaacs/balanced-match@4.0.1': {}
@@ -11061,6 +11057,36 @@ snapshots:
- acorn
- supports-color
+ '@mdx-js/mdx@3.1.0(acorn@8.15.0)':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.3
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.0(acorn@8.15.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ source-map: 0.7.4
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - acorn
+ - supports-color
+
'@mdx-js/react@3.1.0(@types/react@19.2.6)(react@19.0.0)':
dependencies:
'@types/mdx': 2.0.13
@@ -11069,15 +11095,15 @@ snapshots:
'@mediapipe/tasks-vision@0.10.17': {}
- '@mintlify/cli@4.0.822(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@24.9.1)(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)':
+ '@mintlify/cli@4.0.822(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@22.14.1)(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)':
dependencies:
- '@inquirer/prompts': 7.9.0(@types/node@24.9.1)
+ '@inquirer/prompts': 7.9.0(@types/node@22.14.1)
'@mintlify/common': 1.0.619(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/link-rot': 3.0.762(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/link-rot': 3.0.762(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
'@mintlify/models': 0.0.243
- '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/previewing': 4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
- '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
+ '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
adm-zip: 0.5.16
chalk: 5.2.0
color: 4.2.3
@@ -11085,7 +11111,7 @@ snapshots:
fs-extra: 11.2.0
gray-matter: 4.0.3
ink: 6.3.0(@types/react@19.2.6)(react@19.0.0)
- inquirer: 12.3.0(@types/node@24.9.1)
+ inquirer: 12.3.0(@types/node@22.14.1)
js-yaml: 4.1.0
mdast-util-mdx-jsx: 3.2.0
react: 19.0.0
@@ -11164,12 +11190,12 @@ snapshots:
- ts-node
- typescript
- '@mintlify/link-rot@3.0.762(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
+ '@mintlify/link-rot@3.0.762(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
dependencies:
'@mintlify/common': 1.0.619(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/previewing': 4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
- '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
+ '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
fs-extra: 11.1.0
unist-util-visit: 4.1.2
transitivePeerDependencies:
@@ -11215,6 +11241,33 @@ snapshots:
- supports-color
- typescript
+ '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
+ dependencies:
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@shikijs/transformers': 3.15.0
+ '@shikijs/twoslash': 3.15.0(typescript@5.9.3)
+ arktype: 2.1.26
+ hast-util-to-string: 3.0.1
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.1.0
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-to-hast: 13.2.0
+ next-mdx-remote-client: 1.0.7(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ rehype-katex: 7.0.1
+ remark-gfm: 4.0.1
+ remark-math: 6.0.0
+ remark-smartypants: 3.0.2
+ shiki: 3.15.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - acorn
+ - supports-color
+ - typescript
+
'@mintlify/models@0.0.243':
dependencies:
axios: 1.10.0
@@ -11231,12 +11284,12 @@ snapshots:
leven: 4.0.0
yaml: 2.6.1
- '@mintlify/prebuild@1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
+ '@mintlify/prebuild@1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
dependencies:
'@mintlify/common': 1.0.619(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
'@mintlify/openapi-parser': 0.0.8
'@mintlify/scraping': 4.0.479(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
chalk: 5.3.0
favicons: 7.2.0
fs-extra: 11.1.0
@@ -11262,11 +11315,11 @@ snapshots:
- typescript
- utf-8-validate
- '@mintlify/previewing@4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)':
+ '@mintlify/previewing@4.0.798(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)':
dependencies:
'@mintlify/common': 1.0.619(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
- '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.748(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
better-opn: 3.0.2
chalk: 5.2.0
chokidar: 3.5.3
@@ -11355,6 +11408,29 @@ snapshots:
- supports-color
- typescript
+ '@mintlify/validation@0.1.529(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.9.3)
+ '@mintlify/models': 0.0.243
+ arktype: 2.1.27
+ js-yaml: 4.1.0
+ lcm: 0.0.3
+ lodash: 4.17.21
+ object-hash: 3.0.0
+ openapi-types: 12.1.3
+ uuid: 11.1.0
+ zod: 3.21.4
+ zod-to-json-schema: 3.20.4(zod@3.21.4)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - acorn
+ - debug
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+
'@monogrid/gainmap-js@3.1.0(three@0.170.0)':
dependencies:
promise-worker-transferable: 1.0.4
@@ -13297,7 +13373,7 @@ snapshots:
dependencies:
undici-types: 6.21.0
- '@types/node@24.9.1':
+ '@types/node@25.0.3':
dependencies:
undici-types: 7.16.0
@@ -13413,14 +13489,14 @@ snapshots:
next: 16.0.10(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
- '@vitejs/plugin-react@4.4.1(vite@6.4.1(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1))':
+ '@vitejs/plugin-react@4.4.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1))':
dependencies:
'@babel/core': 7.26.10
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 6.4.1(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1)
+ vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1)
transitivePeerDependencies:
- supports-color
@@ -15652,12 +15728,12 @@ snapshots:
inline-style-parser@0.2.4: {}
- inquirer@12.3.0(@types/node@24.9.1):
+ inquirer@12.3.0(@types/node@22.14.1):
dependencies:
- '@inquirer/core': 10.3.1(@types/node@24.9.1)
- '@inquirer/prompts': 7.10.0(@types/node@24.9.1)
- '@inquirer/type': 3.0.10(@types/node@24.9.1)
- '@types/node': 24.9.1
+ '@inquirer/core': 10.3.1(@types/node@22.14.1)
+ '@inquirer/prompts': 7.10.0(@types/node@22.14.1)
+ '@inquirer/type': 3.0.10(@types/node@22.14.1)
+ '@types/node': 22.14.1
ansi-escapes: 4.3.2
mute-stream: 2.0.0
run-async: 3.0.0
@@ -16709,9 +16785,9 @@ snapshots:
minipass: 3.3.6
yallist: 4.0.0
- mintlify@4.2.218(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@24.9.1)(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3):
+ mintlify@4.2.218(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@22.14.1)(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3):
dependencies:
- '@mintlify/cli': 4.0.822(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@24.9.1)(@types/react@19.2.6)(acorn@8.11.2)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
+ '@mintlify/cli': 4.0.822(@radix-ui/react-popover@1.1.15(@types/react-dom@19.0.1)(@types/react@19.2.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/node@22.14.1)(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(typescript@5.9.3)
transitivePeerDependencies:
- '@radix-ui/react-popover'
- '@types/node'
@@ -16789,6 +16865,22 @@ snapshots:
- acorn
- supports-color
+ next-mdx-remote-client@1.0.7(@types/react@19.2.6)(acorn@8.15.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@mdx-js/mdx': 3.1.0(acorn@8.15.0)
+ '@mdx-js/react': 3.1.0(@types/react@19.2.6)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ remark-mdx-remove-esm: 1.1.0
+ serialize-error: 12.0.0
+ vfile: 6.0.3
+ vfile-matter: 5.0.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - acorn
+ - supports-color
+
next-safe-action@8.0.11(next@16.0.10(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
next: 16.0.10(@babel/core@7.26.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -17632,6 +17724,16 @@ snapshots:
transitivePeerDependencies:
- acorn
+ recma-jsx@1.0.0(acorn@8.15.0):
+ dependencies:
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - acorn
+
recma-parse@1.0.0:
dependencies:
'@types/estree': 1.0.8
@@ -19223,7 +19325,7 @@ snapshots:
tsx: 4.21.0
yaml: 2.6.1
- vite@6.4.1(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1):
+ vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.37.0)(tsx@4.21.0)(yaml@2.6.1):
dependencies:
esbuild: 0.25.10
fdir: 6.5.0(picomatch@4.0.3)
@@ -19232,7 +19334,7 @@ snapshots:
rollup: 4.52.2
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 25.0.3
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.30.2