@toaq-oss/omni-mdx 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.cjs CHANGED
@@ -577,7 +577,7 @@ var MdxBinaryDecoder = class {
577
577
  children
578
578
  };
579
579
  }
580
- throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);
580
+ throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);
581
581
  }
582
582
  readU8() {
583
583
  const val = this.view.getUint8(this.offset);
@@ -633,8 +633,7 @@ async function parseMdxClient(mdx) {
633
633
  const decoder = new MdxBinaryDecoder(binaryAst);
634
634
  return decoder.decode();
635
635
  } catch (err) {
636
- console.error("[omni-mdx] WASM client parse error:", err);
637
- return [];
636
+ throw new Error("[toaq-oss/omni-mdx] Syntax error in MDX: " + err.message);
638
637
  }
639
638
  }
640
639
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../wasm/omni_mdx_core.js","../src/client.ts","../src/MDXClientRenderer.tsx","../src/MDXErrorBoundary.tsx","../src/utils/binaryDecoder.ts","../src/parse.client.ts"],"sourcesContent":["/* @ts-self-types=\"./omni_mdx_core.d.ts\" */\n\n/**\n * Compiles the raw MDX input into a minified JSON string representing the AST.\n *\n * This function is exposed directly to JavaScript via `wasm-bindgen`.\n * It returns a standard `JsError` if the parsing fails, ensuring that Node.js\n * or the browser can `try/catch` the error cleanly instead of encountering a WASM panic.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Compiles the raw MDX input into a pretty-printed JSON string.\n *\n * Useful for debugging, logging, or local development environments where\n * human-readable AST introspection is required.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json_pretty(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json_pretty(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Utility function exposed to JavaScript to fetch the compiled parser's version,\n * allowing the frontend package to verify WASM binary compatibility.\n * @returns {string}\n */\nexport function parse_mdx_version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.parse_mdx_version();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\n\n/**\n * @param {Uint8Array} mdx_input\n * @returns {Uint8Array}\n */\nexport function parse_to_binary(mdx_input) {\n const ptr0 = passArray8ToWasm0(mdx_input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_to_binary(ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./omni_mdx_core_bg.js\": import0,\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('omni_mdx_core_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","\"use client\";\n\n/**\n * @toaq/omni-mdx/client\n *\n * Client-only entry point.\n * Use for live MDX editors, previews, or any fully client-side rendering.\n */\n\nexport { MDXClientRenderer } from \"./MDXClientRenderer\";\nexport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nexport { parseMdxClient as parseMdx } from \"./parse.client\";\nexport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\nexport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";","\"use client\";\n\n/**\n * MDXClientRenderer.tsx\n *\n * Client Component — handles KaTeX hydration and interactive components.\n *\n * You generally do NOT use this directly.\n * Use <MDXServerRenderer> in Server Components and only register Client\n * Components (wrapped in \"use client\") for interactive parts (charts, tabs, etc.).\n *\n * Use this component ONLY when:\n * 1. You are in a page/layout that is entirely client-side (no RSC)\n * 2. You need live re-rendering (e.g. a live MDX editor/preview)\n *\n * For the live editor use case, import from '@toaq/omni-mdx/client'.\n */\n\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport katex from \"katex\";\nimport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nimport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";\n\n\n\n// Attr resolver (client version handles expressions fully)\n\ntype AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\": return attr.value;\n case \"boolean\": return true;\n case \"expression\": {\n const raw = attr.value.trim();\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n case \"ast\":\n return <MDXClientContent ast={attr.value} components={components} />;\n default:\n return undefined;\n }\n}\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"article\",\"aside\",\"b\",\"blockquote\",\"br\",\"caption\",\"cite\",\"code\",\n \"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\n \"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\n \"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\"p\",\"pre\",\"q\",\"s\",\"section\",\"small\",\"span\",\n \"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\n \"u\",\"ul\",\"var\",\n]);\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") return node.content ?? null;\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {node.children?.map((c, i) => renderNode(c, i, components))}\n </React.Fragment>\n );\n }\n\n // Math — rendered directly via KaTeX (static import)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: false, throwOnError: false, output: \"html\" });\n return <span key={key} className=\"math math-inline\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: true, throwOnError: false, output: \"html\" });\n return <div key={key} className=\"math math-display\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n // 1. Sécurisation : si c'est une string (depuis N-API Rust), on la parse\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n // 2. Itération sur l'objet parsé\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children?.length\n ? node.children.map((c, i) => renderNode(c, i, components))\n : (node.content ?? undefined);\n\n const Custom = components[node.node_type];\n if (Custom) {\n return (\n <MDXErrorBoundary key={key} componentName={node.node_type}>\n <Custom {...resolvedProps}>\n {renderedChildren}\n </Custom>\n </MDXErrorBoundary>\n );\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as any;\n return <Tag key={key} {...resolvedProps}>{renderedChildren}</Tag>;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>`);\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction MDXClientContent({\n ast,\n components,\n}: {\n ast: AstNode[];\n components: MDXComponents;\n}) {\n return <>{ast.map((node, i) => renderNode(node, i, components))}</>;\n}\n\ninterface MDXClientRendererProps {\n /** AST from parseMdx() — must be JSON-serialisable (pass via Server Component). */\n ast: AstNode[];\n /** Component registry — same shape as MDX_COMPONENTS. */\n components?: MDXComponents;\n}\n\nexport function MDXClientRenderer({\n ast,\n components = {},\n}: MDXClientRendererProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n if (!ast || !Array.isArray(ast)) return null;\n\n return (\n <div className=\"omni-mdx-root\">\n <MDXClientContent ast={ast} components={components} />\n </div>\n );\n}","\"use client\";\nimport { Component, ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n /** The name of the MDX component being rendered (e.g., 'Chart', 'SplitLayout') */\n componentName?: string;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * A dedicated Error Boundary for MDX rendering.\n *\n * If a React component injected via MDX crashes (e.g., due to a data parsing error \n * inside a <Chart />), this boundary intercepts the error. This prevents the \n * entire React tree from unmounting and displays a clean fallback UI to \n * isolate the defective component.\n */\nexport class MDXErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n /**\n * Updates the state when an error occurs to trigger the fallback UI rendering.\n */\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n /**\n * Intercepts the error and its contextual information.\n * This is the ideal place to hook into monitoring tools (like Sentry or Datadog) \n * for production environments.\n */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\n `[MDXErrorBoundary] Error caught in component <${this.props.componentName || 'Unknown'}>:\\n`,\n error,\n errorInfo.componentStack\n );\n }\n \n render() {\n if (this.state.hasError) {\n // Fallback UI: A clean, isolated container that doesn't break the main layout\n return (\n <div style={{ padding: '1rem', border: '2px solid #ef4444', backgroundColor: '#fef2f2', borderRadius: '0.5rem', margin: '1rem 0' }}>\n <h3 style={{ color: '#b91c1c', fontWeight: 'bold', margin: 0 }}>\n Render Error : {this.props.componentName || 'Unknown Component'}\n </h3>\n <p style={{ color: '#dc2626', fontFamily: 'monospace', fontSize: '0.875rem' }}>\n {this.state.error?.message}\n </p>\n </div>\n );\n }\n return this.props.children;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","// parse.client.ts\n//\n// Client-side MDX parser using WASM (--target web build).\n// Designed for live editors and fully client-side rendering contexts.\n// Never runs on the server — returns [] immediately if called server-side.\n\nimport type { AstNode } from \"./MDXServerRenderer\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\nlet _parseClient: ((mdx: Uint8Array) => Uint8Array) | null = null;\n\nasync function getClientParser(): Promise<(mdx: Uint8Array) => Uint8Array> {\n if (_parseClient) return _parseClient;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wasm: any = await import(\"../wasm/omni_mdx_core.js\");\n\n if (typeof wasm.default === \"function\") {\n const wasmUrl = new URL(\"./omni_mdx_core_bg.wasm\", import.meta.url);\n await wasm.default(wasmUrl);\n }\n\n _parseClient = (mdx: Uint8Array): Uint8Array => wasm.parse_to_binary(mdx);\n return _parseClient!;\n}\n\nexport async function parseMdxClient(mdx: string | Uint8Array): Promise<AstNode[]> {\n if (typeof window === \"undefined\") return [];\n\n try {\n const parse = await getClientParser();\n const inputBuffer = typeof mdx === \"string\" \n ? new TextEncoder().encode(mdx) \n : mdx;\n const binaryAst = parse(inputBuffer);\n const decoder = new MdxBinaryDecoder(binaryAst);\n return decoder.decode();\n } catch (err) {\n console.error(\"[omni-mdx] WASM client parse error:\", err);\n return [];\n }\n}"],"mappings":"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","names":["ptr","module","import_react","import_jsx_runtime","React","katex","import_meta","wasm"]}
1
+ {"version":3,"sources":["../wasm/omni_mdx_core.js","../src/client.ts","../src/MDXClientRenderer.tsx","../src/MDXErrorBoundary.tsx","../src/utils/binaryDecoder.ts","../src/parse.client.ts"],"sourcesContent":["/* @ts-self-types=\"./omni_mdx_core.d.ts\" */\n\n/**\n * Compiles the raw MDX input into a minified JSON string representing the AST.\n *\n * This function is exposed directly to JavaScript via `wasm-bindgen`.\n * It returns a standard `JsError` if the parsing fails, ensuring that Node.js\n * or the browser can `try/catch` the error cleanly instead of encountering a WASM panic.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Compiles the raw MDX input into a pretty-printed JSON string.\n *\n * Useful for debugging, logging, or local development environments where\n * human-readable AST introspection is required.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json_pretty(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json_pretty(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Utility function exposed to JavaScript to fetch the compiled parser's version,\n * allowing the frontend package to verify WASM binary compatibility.\n * @returns {string}\n */\nexport function parse_mdx_version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.parse_mdx_version();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\n\n/**\n * @param {Uint8Array} mdx_input\n * @returns {Uint8Array}\n */\nexport function parse_to_binary(mdx_input) {\n const ptr0 = passArray8ToWasm0(mdx_input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_to_binary(ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./omni_mdx_core_bg.js\": import0,\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('omni_mdx_core_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","\"use client\";\n\n/**\n * @toaq/omni-mdx/client\n *\n * Client-only entry point.\n * Use for live MDX editors, previews, or any fully client-side rendering.\n */\n\nexport { MDXClientRenderer } from \"./MDXClientRenderer\";\nexport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nexport { parseMdxClient as parseMdx } from \"./parse.client\";\nexport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\nexport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";","\"use client\";\n\n/**\n * MDXClientRenderer.tsx\n *\n * Client Component — handles KaTeX hydration and interactive components.\n *\n * You generally do NOT use this directly.\n * Use <MDXServerRenderer> in Server Components and only register Client\n * Components (wrapped in \"use client\") for interactive parts (charts, tabs, etc.).\n *\n * Use this component ONLY when:\n * 1. You are in a page/layout that is entirely client-side (no RSC)\n * 2. You need live re-rendering (e.g. a live MDX editor/preview)\n *\n * For the live editor use case, import from '@toaq/omni-mdx/client'.\n */\n\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport katex from \"katex\";\nimport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nimport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";\n\n\n\n// Attr resolver (client version handles expressions fully)\n\ntype AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\": return attr.value;\n case \"boolean\": return true;\n case \"expression\": {\n const raw = attr.value.trim();\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n case \"ast\":\n return <MDXClientContent ast={attr.value} components={components} />;\n default:\n return undefined;\n }\n}\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"article\",\"aside\",\"b\",\"blockquote\",\"br\",\"caption\",\"cite\",\"code\",\n \"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\n \"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\n \"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\"p\",\"pre\",\"q\",\"s\",\"section\",\"small\",\"span\",\n \"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\n \"u\",\"ul\",\"var\",\n]);\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") return node.content ?? null;\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {node.children?.map((c, i) => renderNode(c, i, components))}\n </React.Fragment>\n );\n }\n\n // Math — rendered directly via KaTeX (static import)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: false, throwOnError: false, output: \"html\" });\n return <span key={key} className=\"math math-inline\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: true, throwOnError: false, output: \"html\" });\n return <div key={key} className=\"math math-display\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n // 1. Sécurisation : si c'est une string (depuis N-API Rust), on la parse\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n // 2. Itération sur l'objet parsé\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children?.length\n ? node.children.map((c, i) => renderNode(c, i, components))\n : (node.content ?? undefined);\n\n const Custom = components[node.node_type];\n if (Custom) {\n return (\n <MDXErrorBoundary key={key} componentName={node.node_type}>\n <Custom {...resolvedProps}>\n {renderedChildren}\n </Custom>\n </MDXErrorBoundary>\n );\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as any;\n return <Tag key={key} {...resolvedProps}>{renderedChildren}</Tag>;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>`);\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction MDXClientContent({\n ast,\n components,\n}: {\n ast: AstNode[];\n components: MDXComponents;\n}) {\n return <>{ast.map((node, i) => renderNode(node, i, components))}</>;\n}\n\ninterface MDXClientRendererProps {\n /** AST from parseMdx() — must be JSON-serialisable (pass via Server Component). */\n ast: AstNode[];\n /** Component registry — same shape as MDX_COMPONENTS. */\n components?: MDXComponents;\n}\n\nexport function MDXClientRenderer({\n ast,\n components = {},\n}: MDXClientRendererProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n if (!ast || !Array.isArray(ast)) return null;\n\n return (\n <div className=\"omni-mdx-root\">\n <MDXClientContent ast={ast} components={components} />\n </div>\n );\n}","\"use client\";\nimport { Component, ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n /** The name of the MDX component being rendered (e.g., 'Chart', 'SplitLayout') */\n componentName?: string;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * A dedicated Error Boundary for MDX rendering.\n *\n * If a React component injected via MDX crashes (e.g., due to a data parsing error \n * inside a <Chart />), this boundary intercepts the error. This prevents the \n * entire React tree from unmounting and displays a clean fallback UI to \n * isolate the defective component.\n */\nexport class MDXErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n /**\n * Updates the state when an error occurs to trigger the fallback UI rendering.\n */\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n /**\n * Intercepts the error and its contextual information.\n * This is the ideal place to hook into monitoring tools (like Sentry or Datadog) \n * for production environments.\n */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\n `[MDXErrorBoundary] Error caught in component <${this.props.componentName || 'Unknown'}>:\\n`,\n error,\n errorInfo.componentStack\n );\n }\n \n render() {\n if (this.state.hasError) {\n // Fallback UI: A clean, isolated container that doesn't break the main layout\n return (\n <div style={{ padding: '1rem', border: '2px solid #ef4444', backgroundColor: '#fef2f2', borderRadius: '0.5rem', margin: '1rem 0' }}>\n <h3 style={{ color: '#b91c1c', fontWeight: 'bold', margin: 0 }}>\n Render Error : {this.props.componentName || 'Unknown Component'}\n </h3>\n <p style={{ color: '#dc2626', fontFamily: 'monospace', fontSize: '0.875rem' }}>\n {this.state.error?.message}\n </p>\n </div>\n );\n }\n return this.props.children;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","// parse.client.ts\n//\n// Client-side MDX parser using WASM (--target web build).\n// Designed for live editors and fully client-side rendering contexts.\n// Never runs on the server — returns [] immediately if called server-side.\n\nimport type { AstNode } from \"./MDXServerRenderer\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\nlet _parseClient: ((mdx: Uint8Array) => Uint8Array) | null = null;\n\nasync function getClientParser(): Promise<(mdx: Uint8Array) => Uint8Array> {\n if (_parseClient) return _parseClient;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wasm: any = await import(\"../wasm/omni_mdx_core.js\");\n\n if (typeof wasm.default === \"function\") {\n const wasmUrl = new URL(\"./omni_mdx_core_bg.wasm\", import.meta.url);\n await wasm.default(wasmUrl);\n }\n\n _parseClient = (mdx: Uint8Array): Uint8Array => wasm.parse_to_binary(mdx);\n return _parseClient!;\n}\n\nexport async function parseMdxClient(mdx: string | Uint8Array): Promise<AstNode[]> {\n if (typeof window === \"undefined\") return [];\n\n try {\n const parse = await getClientParser();\n const inputBuffer = typeof mdx === \"string\" \n ? new TextEncoder().encode(mdx) \n : mdx;\n const binaryAst = parse(inputBuffer);\n const decoder = new MdxBinaryDecoder(binaryAst);\n return decoder.decode();\n } catch (err) {\n throw new Error(\"[toaq-oss/omni-mdx] Syntax error in MDX: \" + (err as Error).message);\n }\n}"],"mappings":"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","names":["ptr","module","import_react","import_jsx_runtime","React","katex","import_meta","wasm"]}
package/dist/client.js CHANGED
@@ -544,7 +544,7 @@ var MdxBinaryDecoder = class {
544
544
  children
545
545
  };
546
546
  }
547
- throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);
547
+ throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);
548
548
  }
549
549
  readU8() {
550
550
  const val = this.view.getUint8(this.offset);
@@ -599,8 +599,7 @@ async function parseMdxClient(mdx) {
599
599
  const decoder = new MdxBinaryDecoder(binaryAst);
600
600
  return decoder.decode();
601
601
  } catch (err) {
602
- console.error("[omni-mdx] WASM client parse error:", err);
603
- return [];
602
+ throw new Error("[toaq-oss/omni-mdx] Syntax error in MDX: " + err.message);
604
603
  }
605
604
  }
606
605
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../wasm/omni_mdx_core.js","../src/MDXClientRenderer.tsx","../src/MDXErrorBoundary.tsx","../src/utils/binaryDecoder.ts","../src/parse.client.ts"],"sourcesContent":["/* @ts-self-types=\"./omni_mdx_core.d.ts\" */\n\n/**\n * Compiles the raw MDX input into a minified JSON string representing the AST.\n *\n * This function is exposed directly to JavaScript via `wasm-bindgen`.\n * It returns a standard `JsError` if the parsing fails, ensuring that Node.js\n * or the browser can `try/catch` the error cleanly instead of encountering a WASM panic.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Compiles the raw MDX input into a pretty-printed JSON string.\n *\n * Useful for debugging, logging, or local development environments where\n * human-readable AST introspection is required.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json_pretty(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json_pretty(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Utility function exposed to JavaScript to fetch the compiled parser's version,\n * allowing the frontend package to verify WASM binary compatibility.\n * @returns {string}\n */\nexport function parse_mdx_version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.parse_mdx_version();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\n\n/**\n * @param {Uint8Array} mdx_input\n * @returns {Uint8Array}\n */\nexport function parse_to_binary(mdx_input) {\n const ptr0 = passArray8ToWasm0(mdx_input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_to_binary(ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./omni_mdx_core_bg.js\": import0,\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('omni_mdx_core_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","\"use client\";\n\n/**\n * MDXClientRenderer.tsx\n *\n * Client Component — handles KaTeX hydration and interactive components.\n *\n * You generally do NOT use this directly.\n * Use <MDXServerRenderer> in Server Components and only register Client\n * Components (wrapped in \"use client\") for interactive parts (charts, tabs, etc.).\n *\n * Use this component ONLY when:\n * 1. You are in a page/layout that is entirely client-side (no RSC)\n * 2. You need live re-rendering (e.g. a live MDX editor/preview)\n *\n * For the live editor use case, import from '@toaq/omni-mdx/client'.\n */\n\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport katex from \"katex\";\nimport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nimport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";\n\n\n\n// Attr resolver (client version handles expressions fully)\n\ntype AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\": return attr.value;\n case \"boolean\": return true;\n case \"expression\": {\n const raw = attr.value.trim();\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n case \"ast\":\n return <MDXClientContent ast={attr.value} components={components} />;\n default:\n return undefined;\n }\n}\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"article\",\"aside\",\"b\",\"blockquote\",\"br\",\"caption\",\"cite\",\"code\",\n \"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\n \"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\n \"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\"p\",\"pre\",\"q\",\"s\",\"section\",\"small\",\"span\",\n \"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\n \"u\",\"ul\",\"var\",\n]);\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") return node.content ?? null;\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {node.children?.map((c, i) => renderNode(c, i, components))}\n </React.Fragment>\n );\n }\n\n // Math — rendered directly via KaTeX (static import)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: false, throwOnError: false, output: \"html\" });\n return <span key={key} className=\"math math-inline\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: true, throwOnError: false, output: \"html\" });\n return <div key={key} className=\"math math-display\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n // 1. Sécurisation : si c'est une string (depuis N-API Rust), on la parse\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n // 2. Itération sur l'objet parsé\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children?.length\n ? node.children.map((c, i) => renderNode(c, i, components))\n : (node.content ?? undefined);\n\n const Custom = components[node.node_type];\n if (Custom) {\n return (\n <MDXErrorBoundary key={key} componentName={node.node_type}>\n <Custom {...resolvedProps}>\n {renderedChildren}\n </Custom>\n </MDXErrorBoundary>\n );\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as any;\n return <Tag key={key} {...resolvedProps}>{renderedChildren}</Tag>;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>`);\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction MDXClientContent({\n ast,\n components,\n}: {\n ast: AstNode[];\n components: MDXComponents;\n}) {\n return <>{ast.map((node, i) => renderNode(node, i, components))}</>;\n}\n\ninterface MDXClientRendererProps {\n /** AST from parseMdx() — must be JSON-serialisable (pass via Server Component). */\n ast: AstNode[];\n /** Component registry — same shape as MDX_COMPONENTS. */\n components?: MDXComponents;\n}\n\nexport function MDXClientRenderer({\n ast,\n components = {},\n}: MDXClientRendererProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n if (!ast || !Array.isArray(ast)) return null;\n\n return (\n <div className=\"omni-mdx-root\">\n <MDXClientContent ast={ast} components={components} />\n </div>\n );\n}","\"use client\";\nimport { Component, ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n /** The name of the MDX component being rendered (e.g., 'Chart', 'SplitLayout') */\n componentName?: string;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * A dedicated Error Boundary for MDX rendering.\n *\n * If a React component injected via MDX crashes (e.g., due to a data parsing error \n * inside a <Chart />), this boundary intercepts the error. This prevents the \n * entire React tree from unmounting and displays a clean fallback UI to \n * isolate the defective component.\n */\nexport class MDXErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n /**\n * Updates the state when an error occurs to trigger the fallback UI rendering.\n */\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n /**\n * Intercepts the error and its contextual information.\n * This is the ideal place to hook into monitoring tools (like Sentry or Datadog) \n * for production environments.\n */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\n `[MDXErrorBoundary] Error caught in component <${this.props.componentName || 'Unknown'}>:\\n`,\n error,\n errorInfo.componentStack\n );\n }\n \n render() {\n if (this.state.hasError) {\n // Fallback UI: A clean, isolated container that doesn't break the main layout\n return (\n <div style={{ padding: '1rem', border: '2px solid #ef4444', backgroundColor: '#fef2f2', borderRadius: '0.5rem', margin: '1rem 0' }}>\n <h3 style={{ color: '#b91c1c', fontWeight: 'bold', margin: 0 }}>\n Render Error : {this.props.componentName || 'Unknown Component'}\n </h3>\n <p style={{ color: '#dc2626', fontFamily: 'monospace', fontSize: '0.875rem' }}>\n {this.state.error?.message}\n </p>\n </div>\n );\n }\n return this.props.children;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","// parse.client.ts\n//\n// Client-side MDX parser using WASM (--target web build).\n// Designed for live editors and fully client-side rendering contexts.\n// Never runs on the server — returns [] immediately if called server-side.\n\nimport type { AstNode } from \"./MDXServerRenderer\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\nlet _parseClient: ((mdx: Uint8Array) => Uint8Array) | null = null;\n\nasync function getClientParser(): Promise<(mdx: Uint8Array) => Uint8Array> {\n if (_parseClient) return _parseClient;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wasm: any = await import(\"../wasm/omni_mdx_core.js\");\n\n if (typeof wasm.default === \"function\") {\n const wasmUrl = new URL(\"./omni_mdx_core_bg.wasm\", import.meta.url);\n await wasm.default(wasmUrl);\n }\n\n _parseClient = (mdx: Uint8Array): Uint8Array => wasm.parse_to_binary(mdx);\n return _parseClient!;\n}\n\nexport async function parseMdxClient(mdx: string | Uint8Array): Promise<AstNode[]> {\n if (typeof window === \"undefined\") return [];\n\n try {\n const parse = await getClientParser();\n const inputBuffer = typeof mdx === \"string\" \n ? new TextEncoder().encode(mdx) \n : mdx;\n const binaryAst = parse(inputBuffer);\n const decoder = new MdxBinaryDecoder(binaryAst);\n return decoder.decode();\n } catch (err) {\n console.error(\"[omni-mdx] WASM client parse error:\", err);\n return [];\n }\n}"],"mappings":"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","names":["ptr","jsx","wasm"]}
1
+ {"version":3,"sources":["../wasm/omni_mdx_core.js","../src/MDXClientRenderer.tsx","../src/MDXErrorBoundary.tsx","../src/utils/binaryDecoder.ts","../src/parse.client.ts"],"sourcesContent":["/* @ts-self-types=\"./omni_mdx_core.d.ts\" */\n\n/**\n * Compiles the raw MDX input into a minified JSON string representing the AST.\n *\n * This function is exposed directly to JavaScript via `wasm-bindgen`.\n * It returns a standard `JsError` if the parsing fails, ensuring that Node.js\n * or the browser can `try/catch` the error cleanly instead of encountering a WASM panic.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Compiles the raw MDX input into a pretty-printed JSON string.\n *\n * Useful for debugging, logging, or local development environments where\n * human-readable AST introspection is required.\n * @param {string} input\n * @returns {string}\n */\nexport function parse_mdx_to_json_pretty(input) {\n let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passStringToWasm0(input, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_mdx_to_json_pretty(ptr0, len0);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\n/**\n * Utility function exposed to JavaScript to fetch the compiled parser's version,\n * allowing the frontend package to verify WASM binary compatibility.\n * @returns {string}\n */\nexport function parse_mdx_version() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.parse_mdx_version();\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n}\n\n/**\n * @param {Uint8Array} mdx_input\n * @returns {Uint8Array}\n */\nexport function parse_to_binary(mdx_input) {\n const ptr0 = passArray8ToWasm0(mdx_input, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.parse_to_binary(ptr0, len0);\n if (ret[3]) {\n throw takeFromExternrefTable0(ret[2]);\n }\n var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);\n return v2;\n}\n\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./omni_mdx_core_bg.js\": import0,\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('omni_mdx_core_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","\"use client\";\n\n/**\n * MDXClientRenderer.tsx\n *\n * Client Component — handles KaTeX hydration and interactive components.\n *\n * You generally do NOT use this directly.\n * Use <MDXServerRenderer> in Server Components and only register Client\n * Components (wrapped in \"use client\") for interactive parts (charts, tabs, etc.).\n *\n * Use this component ONLY when:\n * 1. You are in a page/layout that is entirely client-side (no RSC)\n * 2. You need live re-rendering (e.g. a live MDX editor/preview)\n *\n * For the live editor use case, import from '@toaq/omni-mdx/client'.\n */\n\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport katex from \"katex\";\nimport { MDXErrorBoundary } from \"./MDXErrorBoundary\";\nimport type { AstNode, MDXComponents } from \"./MDXServerRenderer\";\n\n\n\n// Attr resolver (client version handles expressions fully)\n\ntype AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\": return attr.value;\n case \"boolean\": return true;\n case \"expression\": {\n const raw = attr.value.trim();\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n case \"ast\":\n return <MDXClientContent ast={attr.value} components={components} />;\n default:\n return undefined;\n }\n}\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"article\",\"aside\",\"b\",\"blockquote\",\"br\",\"caption\",\"cite\",\"code\",\n \"col\",\"colgroup\",\"dd\",\"del\",\"details\",\"dfn\",\"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\n \"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\n \"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\"p\",\"pre\",\"q\",\"s\",\"section\",\"small\",\"span\",\n \"strong\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"tr\",\n \"u\",\"ul\",\"var\",\n]);\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") return node.content ?? null;\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {node.children?.map((c, i) => renderNode(c, i, components))}\n </React.Fragment>\n );\n }\n\n // Math — rendered directly via KaTeX (static import)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: false, throwOnError: false, output: \"html\" });\n return <span key={key} className=\"math math-inline\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n try {\n const html = katex.renderToString(formula, { displayMode: true, throwOnError: false, output: \"html\" });\n return <div key={key} className=\"math math-display\" dangerouslySetInnerHTML={{ __html: html }} />;\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n // 1. Sécurisation : si c'est une string (depuis N-API Rust), on la parse\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n // 2. Itération sur l'objet parsé\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children?.length\n ? node.children.map((c, i) => renderNode(c, i, components))\n : (node.content ?? undefined);\n\n const Custom = components[node.node_type];\n if (Custom) {\n return (\n <MDXErrorBoundary key={key} componentName={node.node_type}>\n <Custom {...resolvedProps}>\n {renderedChildren}\n </Custom>\n </MDXErrorBoundary>\n );\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as any;\n return <Tag key={key} {...resolvedProps}>{renderedChildren}</Tag>;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(`[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>`);\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction MDXClientContent({\n ast,\n components,\n}: {\n ast: AstNode[];\n components: MDXComponents;\n}) {\n return <>{ast.map((node, i) => renderNode(node, i, components))}</>;\n}\n\ninterface MDXClientRendererProps {\n /** AST from parseMdx() — must be JSON-serialisable (pass via Server Component). */\n ast: AstNode[];\n /** Component registry — same shape as MDX_COMPONENTS. */\n components?: MDXComponents;\n}\n\nexport function MDXClientRenderer({\n ast,\n components = {},\n}: MDXClientRendererProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n if (!ast || !Array.isArray(ast)) return null;\n\n return (\n <div className=\"omni-mdx-root\">\n <MDXClientContent ast={ast} components={components} />\n </div>\n );\n}","\"use client\";\nimport { Component, ErrorInfo, ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n /** The name of the MDX component being rendered (e.g., 'Chart', 'SplitLayout') */\n componentName?: string;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * A dedicated Error Boundary for MDX rendering.\n *\n * If a React component injected via MDX crashes (e.g., due to a data parsing error \n * inside a <Chart />), this boundary intercepts the error. This prevents the \n * entire React tree from unmounting and displays a clean fallback UI to \n * isolate the defective component.\n */\nexport class MDXErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n /**\n * Updates the state when an error occurs to trigger the fallback UI rendering.\n */\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n /**\n * Intercepts the error and its contextual information.\n * This is the ideal place to hook into monitoring tools (like Sentry or Datadog) \n * for production environments.\n */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\n `[MDXErrorBoundary] Error caught in component <${this.props.componentName || 'Unknown'}>:\\n`,\n error,\n errorInfo.componentStack\n );\n }\n \n render() {\n if (this.state.hasError) {\n // Fallback UI: A clean, isolated container that doesn't break the main layout\n return (\n <div style={{ padding: '1rem', border: '2px solid #ef4444', backgroundColor: '#fef2f2', borderRadius: '0.5rem', margin: '1rem 0' }}>\n <h3 style={{ color: '#b91c1c', fontWeight: 'bold', margin: 0 }}>\n Render Error : {this.props.componentName || 'Unknown Component'}\n </h3>\n <p style={{ color: '#dc2626', fontFamily: 'monospace', fontSize: '0.875rem' }}>\n {this.state.error?.message}\n </p>\n </div>\n );\n }\n return this.props.children;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","// parse.client.ts\n//\n// Client-side MDX parser using WASM (--target web build).\n// Designed for live editors and fully client-side rendering contexts.\n// Never runs on the server — returns [] immediately if called server-side.\n\nimport type { AstNode } from \"./MDXServerRenderer\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\nlet _parseClient: ((mdx: Uint8Array) => Uint8Array) | null = null;\n\nasync function getClientParser(): Promise<(mdx: Uint8Array) => Uint8Array> {\n if (_parseClient) return _parseClient;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wasm: any = await import(\"../wasm/omni_mdx_core.js\");\n\n if (typeof wasm.default === \"function\") {\n const wasmUrl = new URL(\"./omni_mdx_core_bg.wasm\", import.meta.url);\n await wasm.default(wasmUrl);\n }\n\n _parseClient = (mdx: Uint8Array): Uint8Array => wasm.parse_to_binary(mdx);\n return _parseClient!;\n}\n\nexport async function parseMdxClient(mdx: string | Uint8Array): Promise<AstNode[]> {\n if (typeof window === \"undefined\") return [];\n\n try {\n const parse = await getClientParser();\n const inputBuffer = typeof mdx === \"string\" \n ? new TextEncoder().encode(mdx) \n : mdx;\n const binaryAst = parse(inputBuffer);\n const decoder = new MdxBinaryDecoder(binaryAst);\n return decoder.decode();\n } catch (err) {\n throw new Error(\"[toaq-oss/omni-mdx] Syntax error in MDX: \" + (err as Error).message);\n }\n}"],"mappings":"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","names":["ptr","jsx","wasm"]}
package/dist/server.js CHANGED
@@ -74,7 +74,7 @@ var MdxBinaryDecoder = class {
74
74
  children
75
75
  };
76
76
  }
77
- throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);
77
+ throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);
78
78
  }
79
79
  readU8() {
80
80
  const val = this.view.getUint8(this.offset);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse.server.ts","../src/utils/binaryDecoder.ts","../src/MDXServerRenderer.tsx"],"sourcesContent":["import type { AstNode } from \"./MDXServerRenderer\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, resolve } from \"path\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\ndeclare const __non_webpack_require__: NodeRequire | undefined;\n\nconst _require = createRequire(import.meta.url);\nconst nativeRequire: NodeRequire =\n typeof __non_webpack_require__ !== \"undefined\"\n ? __non_webpack_require__\n : _require;\n\nlet _nativeModule: any = null;\n\nfunction getNativeModuleSync():any {\n if (_nativeModule) return _nativeModule;\n\n const platformPackages = [\n \"@toaq-oss/omni-mdx-darwin-arm64\",\n \"@toaq-oss/omni-mdx-darwin-x64\",\n \"@toaq-oss/omni-mdx-linux-x64-gnu\",\n \"@toaq-oss/omni-mdx-win32-x64-msvc\",\n ];\n\n for (const pkg of platformPackages) {\n try {\n const native = nativeRequire(pkg);\n if (\n typeof native.parseToBinary === \"function\" ||\n typeof native.parse_to_binary === \"function\" ||\n typeof native.parseToJson === \"function\" ||\n typeof native.parse_to_json === \"function\"\n ) {\n _nativeModule = native;\n return _nativeModule;\n }\n } catch { /* not installed on this platform */ }\n }\n\n // Fallback local\n try {\n const __dir = dirname(fileURLToPath(import.meta.url));\n const nativeDir = resolve(__dir, \"../native\");\n const fs = nativeRequire(\"fs\") as typeof import(\"fs\");\n\n if (fs.existsSync(nativeDir)) {\n const files = fs.readdirSync(nativeDir).filter((f: string) => f.endsWith(\".node\"));\n const platform = process.platform ?? \"\";\n const arch = process.arch ?? \"\";\n const match = files.find((f: string) => f.includes(platform) && f.includes(arch))\n ?? files[0];\n\n if (match) {\n const native = nativeRequire(resolve(nativeDir, match));\n _nativeModule = native;\n if (typeof native.parseToJson === \"function\") {\n return _nativeModule;\n } else if (typeof native.parse_to_json === \"function\") {\n return _nativeModule;\n }\n }\n }\n } catch { /* native/ missing */ }\n\n throw new Error(\n `[toaq-oss/omni-mdx] Native parser not found for this platform.\\n` +\n ` Tried npm packages: ${platformPackages.join(\", \")}\\n` +\n ` ➜ Install the prebuilt package (once published):\\n` +\n ` npm install @toaq-oss/omni-mdx-darwin-arm64 # Mac M1/M2\\n` +\n ` npm install @toaq-oss/omni-mdx-linux-x64-gnu # Linux/Vercel\\n` +\n ` npm install @toaq-oss/omni-mdx-win32-x64-msvc # Windows\\n`\n );\n}\n\nfunction getParseFn(native: any): (mdx: string | Buffer | Uint8Array) => any {\n if (typeof native.parseToBinary === \"function\") return native.parseToBinary;\n if (typeof native.parse_to_binary === \"function\") return native.parse_to_binary;\n if (typeof native.parse === \"function\") return native.parse;\n if (typeof native.parseToJson === \"function\") return native.parseToJson;\n if (typeof native.parse_to_json === \"function\") return native.parse_to_json;\n\n throw new Error(\"[toaq-oss/omni-mdx] Native parser lacks a valid parse function.\");\n}\n\nexport async function parseMdx(mdx: string | Buffer | Uint8Array): Promise<AstNode[]> {\n const native = getNativeModuleSync();\n const parse = getParseFn(native);\n let result: any;\n \n try {\n result = parse(mdx);\n } catch (err: any) {\n const sourceSnippet = typeof mdx === 'string' ? mdx.slice(0, 50) : \"Binary Data\";\n throw new MDXParseError(err?.message ?? String(err), sourceSnippet);\n }\n \n\n if (result instanceof Uint8Array || Buffer.isBuffer(result)) {\n const decoder = new MdxBinaryDecoder(result);\n return decoder.decode();\n }\n\n if (typeof result === \"string\") {\n try { return JSON.parse(result) as AstNode[]; } catch { throw new Error(\"Invalid JSON string.\"); }\n }\n\n if (typeof result === \"object\" && result !== null) {\n if (typeof result.toJson === \"function\") {\n try {\n const jsonString = result.toJson();\n return JSON.parse(jsonString) as AstNode[];\n } catch (e) {\n throw new Error(\"[toaq-oss/omni-mdx] Failed to serialize MdxAst to JSON.\");\n }\n }\n \n if (typeof result.to_json === \"function\") {\n try { return JSON.parse(result.to_json()) as AstNode[]; } catch (e) {}\n }\n \n if (Array.isArray(result)) return result as AstNode[];\n }\n\n throw new Error(\"[toaq-oss/omni-mdx] Unrecognized return format from Rust parser. Available properties: \" + Object.keys(result.__proto__ || result).join(\", \"));\n}\n\nexport function parseMdxSync(mdx: string | Buffer | Uint8Array): AstNode[] {\n const native = getNativeModuleSync();\n const parse = getParseFn(native);\n\n let result: any;\n try {\n result = parse(mdx);\n } catch (err: any) {\n const sourceSnippet = typeof mdx === 'string' ? mdx.slice(0, 50) : \"Binary Data\";\n throw new MDXParseError(err?.message ?? String(err), sourceSnippet);\n }\n\n if (result instanceof Uint8Array || Buffer.isBuffer(result)) {\n const decoder = new MdxBinaryDecoder(result);\n return decoder.decode();\n }\n \n if (typeof result === \"string\") {\n try { return JSON.parse(result) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n if (typeof result === \"object\" && result !== null && typeof result.toJson === \"function\") {\n try { return JSON.parse(result.toJson()) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n if (typeof result === \"object\" && result !== null && typeof result.to_json === \"function\") {\n try { return JSON.parse(result.to_json()) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n throw new Error(\"[toaq-oss/omni-mdx] Unrecognized return format from Rust parser.\");\n}\n\nexport async function compileToJsx(mdx: string): Promise<string> {\n const native = getNativeModuleSync();\n \n const compileFn = native.compileToJsx || native.compile_to_jsx;\n \n if (typeof compileFn !== \"function\") {\n throw new Error(\"[toaq-oss/omni-mdx] compileToJsx is not supported by this native module version.\");\n }\n \n try {\n return compileFn(mdx);\n } catch (err: any) {\n throw new MDXParseError(err?.message ?? String(err), mdx);\n }\n}\n\nexport function compileToJsxSync(mdx: string): string {\n const native = getNativeModuleSync();\n \n const compileFn = native.compileToJsx || native.compile_to_jsx;\n if (typeof compileFn !== \"function\") {\n throw new Error(\"[toaq-oss/omni-mdx] compileToJsx is not supported by this native module version.\");\n }\n \n try {\n return compileFn(mdx);\n } catch (err: any) {\n throw new MDXParseError(err?.message ?? String(err), mdx);\n }\n}\n\nexport class MDXParseError extends Error {\n readonly source: string;\n constructor(message: string, source: string) {\n super(`MDX parse error: ${message}`);\n this.name = \"MDXParseError\";\n this.source = source;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[Omni-Core] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","/**\n * MDXServerRenderer.tsx\n *\n * React Server Component — renders an MDX AST on the server.\n * No \"use client\" — safe for Next.js SSR, SSG, and ISR.\n *\n * Drop-in replacement for <MDXRemote source={...} components={MDX_COMPONENTS} />\n *\n * Usage in a Server Component (page.tsx):\n *\n * import { MDXServerRenderer, parseMdx } from '@toaq/omni-mdx/server';\n * import { MDX_COMPONENTS } from './MDXComponents';\n *\n * export default async function Page() {\n * const ast = await parseMdx(mdxString);\n * return <MDXServerRenderer ast={ast} components={MDX_COMPONENTS} />;\n * }\n */\n\nimport React, { ReactNode, JSX } from \"react\";\nimport katex from \"katex\";\n\n// AST types (mirror Rust output exactly)\n\nexport type AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nexport interface AstNode {\n node_type: string;\n content?: string;\n self_closing?: boolean;\n child_count?: number; // Rendu optionnel\n attributes?: Record<string, AttrValueKind> | string; // Accepte l'objet binaire ou la string\n children?: AstNode[];\n}\n\nexport type MDXComponents = Record<string, React.ComponentType<any>>;\n\n/**\n * Converts a raw AttrValueKind from the Rust AST into a React-usable prop value.\n * text → string\n * expression → attempt JSON/JS parse, fallback to string\n * boolean → true\n * ast → <MDXServerRenderer ast={...} components={...} />\n */\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\":\n return attr.value;\n\n case \"boolean\":\n return true;\n\n case \"expression\": {\n const raw = attr.value.trim();\n // Try JSON first (safe), then JS expression as last resort\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n\n case \"ast\":\n return (\n <MDXServerRenderer\n ast={attr.value}\n components={components}\n />\n );\n\n default:\n return undefined;\n }\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"blockquote\",\"br\",\n \"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"dd\",\"del\",\"details\",\"dfn\",\n \"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\n \"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\n \"p\",\"pre\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"small\",\"span\",\"strong\",\n \"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\n \"u\",\"ul\",\"var\",\"wbr\",\n]);\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") {\n return node.content ?? null;\n }\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {renderChildren(node, components)}\n </React.Fragment>\n );\n }\n\n // Math — server-side rendering via KaTeX (static HTML, no client-side JavaScript)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n\n try {\n const html = katex.renderToString(formula, {\n displayMode: false,\n throwOnError: false,\n output: \"html\",\n });\n return (\n <span\n key={key}\n className=\"math math-inline\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n\n try {\n const html = katex.renderToString(formula, {\n displayMode: true,\n throwOnError: false,\n output: \"html\",\n });\n return (\n <div\n key={key}\n className=\"math math-display\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n // Resolve props from AST attributes\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children && node.children.length > 0\n ? renderChildren(node, components)\n : (node.content ?? undefined);\n\n // Custom registered component\n const Custom = components[node.node_type];\n if (Custom) {\n try {\n return (\n <Custom key={key} {...resolvedProps}>\n {renderedChildren}\n </Custom>\n );\n } catch (err) {\n if (process.env.NODE_ENV === \"development\") {\n console.error(`[toaq-oss/omni-mdx] Server render failed for <${node.node_type}>:`, err);\n }\n return (\n <div\n key={key}\n className=\"mdx-component-error\"\n data-component={node.node_type}\n style={{ padding: \"1rem\", border: \"2px solid #ef4444\", borderRadius: \"0.5rem\", margin: \"1rem 0\", background: \"#fef2f2\" }}\n >\n <strong style={{ color: \"#b91c1c\" }}>Render error: &lt;{node.node_type}&gt;</strong>\n {process.env.NODE_ENV === \"development\" && (\n <pre style={{ color: \"#dc2626\", fontSize: \"0.875rem\", marginTop: \"0.5rem\" }}>\n {String(err)}\n </pre>\n )}\n </div>\n );\n }\n }\n\n if (node.node_type === \"table\") {\n const firstChild = node.children?.[0];\n const hasThead = firstChild?.node_type === \"thead\";\n const theadNode = hasThead ? firstChild : null;\n const bodyRows = hasThead ? node.children!.slice(1) : node.children ?? [];\n\n const theadEl = theadNode ? (\n <thead key=\"thead\">\n <tr>\n {theadNode.children?.map((cell, i) =>\n renderNode({ ...cell, node_type: \"th\" }, i, components)\n )}\n </tr>\n </thead>\n ) : null;\n\n const tbodyEl = bodyRows.length > 0 ? (\n <tbody key=\"tbody\">\n {bodyRows.map((row, i) => renderNode(row, i, components))}\n </tbody>\n ) : null;\n\n return <table key={key} {...resolvedProps}>{theadEl}{tbodyEl}</table>;\n }\n\n if (node.node_type === \"pre\") {\n const rawText = extractText(node);\n return <pre key={key} {...resolvedProps}><code>{rawText}</code></pre>;\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as keyof JSX.IntrinsicElements;\n return (\n <Tag key={key} {...resolvedProps}>\n {renderedChildren}\n </Tag>\n );\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>. ` +\n `Register it via MDX_COMPONENTS or add it to your components prop.`\n );\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction renderChildren(node: AstNode, components: MDXComponents): ReactNode[] {\n if (!node.children?.length) return [];\n return node.children.map((child, i) => renderNode(child, i, components));\n}\n\ninterface MDXServerRendererProps {\n /** AST produced by parseMdx() — JSON-serialisable. */\n ast: AstNode[];\n /**\n * Component registry. Keys are JSX tag names (e.g. \"Note\", \"Details\").\n * Values are React components (Server or Client).\n *\n * Server Components render on the server (recommended for static content).\n * Client Components receive \"use client\" and hydrate in the browser.\n */\n components?: MDXComponents;\n}\n\nexport function MDXServerRenderer({\n ast,\n components = {},\n}: MDXServerRendererProps): JSX.Element {\n if (!ast || !Array.isArray(ast)) {\n return <></>;\n }\n\n return (\n <div className=\"omni-mdx-root\">\n {ast.map((node, i) => renderNode(node, i, components))}\n </div>\n );\n}"],"mappings":";AACA,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,SAAS,eAAe;;;ACDjC,IAAM,YAAY;AAClB,IAAM,eAAe;AAErB,IAAM,YAAY;AAClB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAM,WAAW;AAEV,IAAM,mBAAN,MAAuB;AAAA,EAO5B,YAAY,QAAoB;AAJhC,SAAQ,SAAiB;AACzB,SAAQ,UAAU,IAAI,YAAY,OAAO;AACzC,SAAQ,cAAc,oBAAI,IAAoB;AAG5C,SAAK,SAAS;AACd,SAAK,OAAO,IAAI,SAAS,OAAO,QAAQ,OAAO,YAAY,OAAO,UAAU;AAAA,EAC9E;AAAA,EAEO,SAAoB;AACzB,UAAM,YAAY,KAAK,QAAQ;AAC/B,UAAM,QAAmB,CAAC;AAC1B,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAM,KAAK,KAAK,WAAW,CAAC;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAsB;AAC5B,UAAM,OAAO,KAAK,OAAO;AAEzB,QAAI,SAAS,WAAW;AACtB,aAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS,KAAK,cAAc;AAAA,MAC9B;AAAA,IACF;AAEA,QAAI,SAAS,cAAc;AACzB,YAAM,YAAY,KAAK,cAAc;AACrC,YAAM,eAAe,KAAK,OAAO,MAAM;AACvC,YAAM,YAAY,KAAK,QAAQ;AAE/B,UAAI,aAAwD;AAE5D,UAAI,YAAY,GAAG;AACjB,qBAAa,CAAC;AACd,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAM,MAAM,KAAK,cAAc;AAC/B,gBAAM,WAAW,KAAK,OAAO;AAE7B,cAAI,aAAa,WAAW;AAC1B,uBAAW,GAAG,IAAI,EAAE,MAAM,QAAQ,OAAO,KAAK,cAAc,EAAE;AAAA,UAChE,WAAW,aAAa,iBAAiB;AACvC,uBAAW,GAAG,IAAI,EAAE,MAAM,cAAc,OAAO,KAAK,cAAc,EAAE;AAAA,UACtE,WAAW,aAAa,cAAc;AACpC,uBAAW,GAAG,IAAI,EAAE,MAAM,UAAU;AAAA,UACtC,WAAW,aAAa,UAAU;AAChC,kBAAM,eAAe,KAAK,QAAQ;AAClC,kBAAM,WAAsB,CAAC;AAC7B,qBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,uBAAS,KAAK,KAAK,WAAW,CAAC;AAAA,YACjC;AACA,uBAAW,GAAG,IAAI,EAAE,MAAM,OAAO,OAAO,SAAS;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAEA,YAAM,aAAa,KAAK,QAAQ;AAChC,YAAM,WAAsB,CAAC;AAC7B,UAAI,aAAa,GAAG;AAClB,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,mBAAS,KAAK,KAAK,WAAW,CAAC;AAAA,QACjC;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,sCAAsC,IAAI,cAAc,KAAK,MAAM,EAAE;AAAA,EACvF;AAAA,EAEQ,SAAiB;AACvB,UAAM,MAAM,KAAK,KAAK,SAAS,KAAK,MAAM;AAC1C,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEQ,UAAkB;AACxB,UAAM,MAAM,KAAK,KAAK,UAAU,KAAK,QAAQ,IAAI;AACjD,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEQ,UAAkB;AACxB,UAAM,MAAM,KAAK,KAAK,UAAU,KAAK,QAAQ,IAAI;AACjD,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAwB;AAC9B,UAAM,MAAM,KAAK,QAAQ;AACzB,UAAM,MAAM,KAAK,QAAQ,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,KAAK,SAAS,GAAG,CAAC;AACpF,SAAK,UAAU;AAEf,QAAI,SAAS,KAAK,YAAY,IAAI,GAAG;AACrC,QAAI,OAAQ,QAAO;AACnB,SAAK,YAAY,IAAI,KAAK,GAAG;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAwB;AAC9B,UAAM,MAAM,KAAK,QAAQ;AACzB,UAAM,MAAM,KAAK,QAAQ,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,KAAK,SAAS,GAAG,CAAC;AACpF,SAAK,UAAU;AACf,WAAO;AAAA,EACT;AACF;;;ADrHA,IAAM,WAAW,cAAc,YAAY,GAAG;AAC9C,IAAM,gBACJ,OAAO,4BAA4B,cAC/B,0BACA;AAEN,IAAI,gBAAqB;AAEzB,SAAS,sBAA0B;AACjC,MAAI,cAAe,QAAO;AAE1B,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,OAAO,kBAAkB;AAClC,QAAI;AACF,YAAM,SAAS,cAAc,GAAG;AAChC,UACE,OAAO,OAAO,kBAAkB,cAChC,OAAO,OAAO,oBAAoB,cAClC,OAAO,OAAO,gBAAgB,cAC9B,OAAO,OAAO,kBAAkB,YAChC;AACA,wBAAgB;AAChB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAAuC;AAAA,EACjD;AAGA,MAAI;AACF,UAAM,QAAW,QAAQ,cAAc,YAAY,GAAG,CAAC;AACvD,UAAM,YAAY,QAAQ,OAAO,WAAW;AAC5C,UAAM,KAAK,cAAc,IAAI;AAE7B,QAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,YAAM,QAAQ,GAAG,YAAY,SAAS,EAAE,OAAO,CAAC,MAAc,EAAE,SAAS,OAAO,CAAC;AACjF,YAAM,WAAW,QAAQ,YAAY;AACrC,YAAM,OAAW,QAAQ,QAAY;AACrC,YAAM,QAAW,MAAM,KAAK,CAAC,MAAc,EAAE,SAAS,QAAQ,KAAK,EAAE,SAAS,IAAI,CAAC,KAClE,MAAM,CAAC;AAExB,UAAI,OAAO;AACT,cAAM,SAAS,cAAc,QAAQ,WAAW,KAAK,CAAC;AACtD,wBAAgB;AAChB,YAAI,OAAO,OAAO,gBAAgB,YAAY;AAC5C,iBAAO;AAAA,QACT,WAAW,OAAO,OAAO,kBAAkB,YAAY;AACrD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAAwB;AAEhC,QAAM,IAAI;AAAA,IACR;AAAA,wBACyB,iBAAiB,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtD;AACF;AAEA,SAAS,WAAW,QAAyD;AAC3E,MAAI,OAAO,OAAO,kBAAkB,WAAY,QAAO,OAAO;AAC9D,MAAI,OAAO,OAAO,oBAAoB,WAAY,QAAO,OAAO;AAChE,MAAI,OAAO,OAAO,UAAU,WAAY,QAAO,OAAO;AACtD,MAAI,OAAO,OAAO,gBAAgB,WAAY,QAAO,OAAO;AAC5D,MAAI,OAAO,OAAO,kBAAkB,WAAY,QAAO,OAAO;AAE9D,QAAM,IAAI,MAAM,iEAAiE;AACnF;AAEA,eAAsB,SAAS,KAAuD;AACpF,QAAM,SAAS,oBAAoB;AACnC,QAAM,QAAQ,WAAW,MAAM;AAC/B,MAAI;AAEJ,MAAI;AACF,aAAS,MAAM,GAAG;AAAA,EACpB,SAAS,KAAU;AACjB,UAAM,gBAAgB,OAAO,QAAQ,WAAW,IAAI,MAAM,GAAG,EAAE,IAAI;AACnE,UAAM,IAAI,cAAc,KAAK,WAAW,OAAO,GAAG,GAAG,aAAa;AAAA,EACpE;AAGA,MAAI,kBAAkB,cAAc,OAAO,SAAS,MAAM,GAAG;AAC3D,UAAM,UAAU,IAAI,iBAAiB,MAAM;AAC3C,WAAO,QAAQ,OAAO;AAAA,EACxB;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,QAAI;AAAE,aAAO,KAAK,MAAM,MAAM;AAAA,IAAgB,QAAQ;AAAE,YAAM,IAAI,MAAM,sBAAsB;AAAA,IAAG;AAAA,EACnG;AAEA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,QAAI,OAAO,OAAO,WAAW,YAAY;AACvC,UAAI;AACF,cAAM,aAAa,OAAO,OAAO;AACjC,eAAO,KAAK,MAAM,UAAU;AAAA,MAC9B,SAAS,GAAG;AACV,cAAM,IAAI,MAAM,yDAAyD;AAAA,MAC3E;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,YAAY,YAAY;AACxC,UAAI;AAAE,eAAO,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,MAAgB,SAAS,GAAG;AAAA,MAAC;AAAA,IACvE;AAEA,QAAI,MAAM,QAAQ,MAAM,EAAG,QAAO;AAAA,EACpC;AAEA,QAAM,IAAI,MAAM,4FAA4F,OAAO,KAAK,OAAO,aAAa,MAAM,EAAE,KAAK,IAAI,CAAC;AAChK;AAEO,SAAS,aAAa,KAA8C;AACzE,QAAM,SAAS,oBAAoB;AACnC,QAAM,QAAQ,WAAW,MAAM;AAE/B,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,GAAG;AAAA,EACpB,SAAS,KAAU;AACjB,UAAM,gBAAgB,OAAO,QAAQ,WAAW,IAAI,MAAM,GAAG,EAAE,IAAI;AACnE,UAAM,IAAI,cAAc,KAAK,WAAW,OAAO,GAAG,GAAG,aAAa;AAAA,EACpE;AAEA,MAAI,kBAAkB,cAAc,OAAO,SAAS,MAAM,GAAG;AAC3D,UAAM,UAAU,IAAI,iBAAiB,MAAM;AAC3C,WAAO,QAAQ,OAAO;AAAA,EACxB;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,QAAI;AAAE,aAAO,KAAK,MAAM,MAAM;AAAA,IAAgB,QAAQ;AAAE,YAAM,IAAI,MAAM,cAAc;AAAA,IAAG;AAAA,EAC3F;AAEA,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,OAAO,OAAO,WAAW,YAAY;AACxF,QAAI;AAAE,aAAO,KAAK,MAAM,OAAO,OAAO,CAAC;AAAA,IAAgB,QAAQ;AAAE,YAAM,IAAI,MAAM,cAAc;AAAA,IAAG;AAAA,EACpG;AAEA,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,OAAO,OAAO,YAAY,YAAY;AACzF,QAAI;AAAE,aAAO,KAAK,MAAM,OAAO,QAAQ,CAAC;AAAA,IAAgB,QAAQ;AAAE,YAAM,IAAI,MAAM,cAAc;AAAA,IAAG;AAAA,EACrG;AAEA,QAAM,IAAI,MAAM,kEAAkE;AACpF;AAEA,eAAsB,aAAa,KAA8B;AAC/D,QAAM,SAAS,oBAAoB;AAEnC,QAAM,YAAY,OAAO,gBAAgB,OAAO;AAEhD,MAAI,OAAO,cAAc,YAAY;AACnC,UAAM,IAAI,MAAM,kFAAkF;AAAA,EACpG;AAEA,MAAI;AACF,WAAO,UAAU,GAAG;AAAA,EACtB,SAAS,KAAU;AACjB,UAAM,IAAI,cAAc,KAAK,WAAW,OAAO,GAAG,GAAG,GAAG;AAAA,EAC1D;AACF;AAEO,SAAS,iBAAiB,KAAqB;AACpD,QAAM,SAAS,oBAAoB;AAEnC,QAAM,YAAY,OAAO,gBAAgB,OAAO;AAChD,MAAI,OAAO,cAAc,YAAY;AACnC,UAAM,IAAI,MAAM,kFAAkF;AAAA,EACpG;AAEA,MAAI;AACF,WAAO,UAAU,GAAG;AAAA,EACtB,SAAS,KAAU;AACjB,UAAM,IAAI,cAAc,KAAK,WAAW,OAAO,GAAG,GAAG,GAAG;AAAA,EAC1D;AACF;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAEvC,YAAY,SAAiB,QAAgB;AAC3C,UAAM,oBAAoB,OAAO,EAAE;AACnC,SAAK,OAAS;AACd,SAAK,SAAS;AAAA,EAChB;AACF;;;AEnLA,OAAO,WAA+B;AACtC,OAAO,WAAW;AAiDV,SAmNG,UAnNH,KA6HE,YA7HF;AArBR,SAAS,YACP,MACA,YACoC;AACpC,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,KAAK;AAAA,IAEd,KAAK;AACH,aAAO;AAAA,IAET,KAAK,cAAc;AACjB,YAAM,MAAM,KAAK,MAAM,KAAK;AAE5B,UAAI;AAAE,eAAO,KAAK,MAAM,GAAG;AAAA,MAAG,QAAQ;AAAA,MAAC;AACvC,UAAI;AAAE,eAAO,IAAI,SAAS,WAAW,GAAG,GAAG,EAAE;AAAA,MAAG,QAAQ;AAAA,MAAC;AACzD,aAAO;AAAA,IACT;AAAA,IAEA,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,KAAK;AAAA,UACV;AAAA;AAAA,MACF;AAAA,IAGJ;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,YAAY,oBAAI,IAAI;AAAA,EACxB;AAAA,EAAI;AAAA,EAAO;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAa;AAAA,EACpE;AAAA,EAAU;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAW;AAAA,EAAO;AAAA,EAAK;AAAA,EAAM;AAAA,EAAU;AAAA,EACrE;AAAA,EAAM;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAa;AAAA,EAAS;AAAA,EAAS;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnE;AAAA,EAAK;AAAA,EAAK;AAAA,EAAS;AAAA,EAAK;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAK;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EACvE;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAO;AAAA,EAAI;AAAA,EAAO;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAO;AAAA,EACnE;AAAA,EAAM;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAO;AAAA,EACvE;AAAA,EAAI;AAAA,EAAK;AAAA,EAAM;AACjB,CAAC;AAED,SAAS,YAAY,MAAuB;AAC1C,MAAI,KAAK,cAAc,OAAQ,QAAO,KAAK,WAAW;AACtD,MAAI,KAAK,QAAS,QAAO,KAAK;AAC9B,UAAQ,KAAK,YAAY,CAAC,GAAG,IAAI,WAAW,EAAE,KAAK,EAAE;AACvD;AAEA,SAAS,WACP,MACA,OACA,YACW;AACX,QAAM,MAAM,GAAG,KAAK,SAAS,IAAI,KAAK;AAEtC,MAAI,KAAK,cAAc,QAAQ;AAC7B,WAAO,KAAK,WAAW;AAAA,EACzB;AAEA,MAAI,KAAK,cAAc,YAAY;AACjC,WACE,oBAAC,MAAM,UAAN,EACE,yBAAe,MAAM,UAAU,KADb,GAErB;AAAA,EAEJ;AAGA,MAAI,KAAK,cAAc,cAAc;AACnC,UAAM,UAAU,YAAY,IAAI;AAEhC,QAAI;AACF,YAAM,OAAO,MAAM,eAAe,SAAS;AAAA,QACzC,aAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAc;AAAA,MAChB,CAAC;AACD,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,yBAAyB,EAAE,QAAQ,KAAK;AAAA;AAAA,QAFnC;AAAA,MAGP;AAAA,IAEJ,QAAQ;AACN,aAAO,oBAAC,UAAe,WAAU,oBAAoB,qBAAnC,GAA2C;AAAA,IAC/D;AAAA,EACF;AAEA,MAAI,KAAK,cAAc,aAAa;AAClC,UAAM,UAAU,YAAY,IAAI;AAEhC,QAAI;AACF,YAAM,OAAO,MAAM,eAAe,SAAS;AAAA,QACzC,aAAc;AAAA,QACd,cAAc;AAAA,QACd,QAAc;AAAA,MAChB,CAAC;AACD,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,yBAAyB,EAAE,QAAQ,KAAK;AAAA;AAAA,QAFnC;AAAA,MAGP;AAAA,IAEJ,QAAQ;AACN,aAAO,oBAAC,SAAc,WAAU,qBAAqB,qBAApC,GAA4C;AAAA,IAC/D;AAAA,EACF;AAGA,QAAM,gBAAqC,CAAC;AAC5C,MAAI,KAAK,YAAY;AACnB,UAAM,QAAQ,OAAO,KAAK,eAAe,WACrC,KAAK,MAAM,KAAK,UAAU,IAC1B,KAAK;AAET,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,oBAAc,CAAC,IAAI,YAAY,GAAoB,UAAU;AAAA,IAC/D;AAAA,EACF;AAEA,QAAM,mBAAmB,KAAK,YAAY,KAAK,SAAS,SAAS,IAC7D,eAAe,MAAM,UAAU,IAC9B,KAAK,WAAW;AAGrB,QAAM,SAAS,WAAW,KAAK,SAAS;AACxC,MAAI,QAAQ;AACV,QAAI;AACF,aACE,oBAAC,UAAkB,GAAG,eACnB,8BADU,GAEb;AAAA,IAEJ,SAAS,KAAK;AACZ,UAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,gBAAQ,MAAM,iDAAiD,KAAK,SAAS,MAAM,GAAG;AAAA,MACxF;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,kBAAgB,KAAK;AAAA,UACrB,OAAO,EAAE,SAAS,QAAQ,QAAQ,qBAAqB,cAAc,UAAU,QAAQ,UAAU,YAAY,UAAU;AAAA,UAEvH;AAAA,iCAAC,YAAO,OAAO,EAAE,OAAO,UAAU,GAAG;AAAA;AAAA,cAAmB,KAAK;AAAA,cAAU;AAAA,eAAI;AAAA,YAC1E,QAAQ,IAAI,aAAa,iBACxB,oBAAC,SAAI,OAAO,EAAE,OAAO,WAAW,UAAU,YAAY,WAAW,SAAS,GACvE,iBAAO,GAAG,GACb;AAAA;AAAA;AAAA,QATG;AAAA,MAWP;AAAA,IAEJ;AAAA,EACF;AAEA,MAAI,KAAK,cAAc,SAAS;AAC9B,UAAM,aAAa,KAAK,WAAW,CAAC;AACpC,UAAM,WAAa,YAAY,cAAc;AAC7C,UAAM,YAAa,WAAW,aAAa;AAC3C,UAAM,WAAa,WAAW,KAAK,SAAU,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;AAE1E,UAAM,UAAU,YACd,oBAAC,WACC,8BAAC,QACE,oBAAU,UAAU;AAAA,MAAI,CAAC,MAAM,MAC9B,WAAW,EAAE,GAAG,MAAM,WAAW,KAAK,GAAG,GAAG,UAAU;AAAA,IACxD,GACF,KALS,OAMX,IACE;AAEJ,UAAM,UAAU,SAAS,SAAS,IAChC,oBAAC,WACE,mBAAS,IAAI,CAAC,KAAK,MAAM,WAAW,KAAK,GAAG,UAAU,CAAC,KAD/C,OAEX,IACE;AAEJ,WAAO,qBAAC,WAAiB,GAAG,eAAgB;AAAA;AAAA,MAAS;AAAA,SAAlC,GAA0C;AAAA,EAC/D;AAEA,MAAI,KAAK,cAAc,OAAO;AAC5B,UAAM,UAAU,YAAY,IAAI;AAChC,WAAO,oBAAC,SAAe,GAAG,eAAe,8BAAC,UAAM,mBAAQ,KAAvC,GAA8C;AAAA,EACjE;AAEA,MAAI,UAAU,IAAI,KAAK,SAAS,GAAG;AACjC,UAAM,MAAM,KAAK;AACjB,WACE,oBAAC,OAAe,GAAG,eAChB,8BADO,GAEV;AAAA,EAEJ;AAEA,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,YAAQ;AAAA,MACN,2CAA2C,KAAK,SAAS;AAAA,IAE3D;AAAA,EACF;AACA,SACE,oBAAC,SAAc,0BAAwB,KAAK,WAAW,WAAU,yBAC9D,8BADO,GAEV;AAEJ;AAEA,SAAS,eAAe,MAAe,YAAwC;AAC7E,MAAI,CAAC,KAAK,UAAU,OAAQ,QAAO,CAAC;AACpC,SAAO,KAAK,SAAS,IAAI,CAAC,OAAO,MAAM,WAAW,OAAO,GAAG,UAAU,CAAC;AACzE;AAeO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,aAAa,CAAC;AAChB,GAAwC;AACtC,MAAI,CAAC,OAAO,CAAC,MAAM,QAAQ,GAAG,GAAG;AAC/B,WAAO,gCAAE;AAAA,EACX;AAEA,SACE,oBAAC,SAAI,WAAU,iBACZ,cAAI,IAAI,CAAC,MAAM,MAAM,WAAW,MAAM,GAAG,UAAU,CAAC,GACvD;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/parse.server.ts","../src/utils/binaryDecoder.ts","../src/MDXServerRenderer.tsx"],"sourcesContent":["import type { AstNode } from \"./MDXServerRenderer\";\nimport { createRequire } from \"module\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, resolve } from \"path\";\nimport { MdxBinaryDecoder } from \"./utils/binaryDecoder\";\n\ndeclare const __non_webpack_require__: NodeRequire | undefined;\n\nconst _require = createRequire(import.meta.url);\nconst nativeRequire: NodeRequire =\n typeof __non_webpack_require__ !== \"undefined\"\n ? __non_webpack_require__\n : _require;\n\nlet _nativeModule: any = null;\n\nfunction getNativeModuleSync():any {\n if (_nativeModule) return _nativeModule;\n\n const platformPackages = [\n \"@toaq-oss/omni-mdx-darwin-arm64\",\n \"@toaq-oss/omni-mdx-darwin-x64\",\n \"@toaq-oss/omni-mdx-linux-x64-gnu\",\n \"@toaq-oss/omni-mdx-win32-x64-msvc\",\n ];\n\n for (const pkg of platformPackages) {\n try {\n const native = nativeRequire(pkg);\n if (\n typeof native.parseToBinary === \"function\" ||\n typeof native.parse_to_binary === \"function\" ||\n typeof native.parseToJson === \"function\" ||\n typeof native.parse_to_json === \"function\"\n ) {\n _nativeModule = native;\n return _nativeModule;\n }\n } catch { /* not installed on this platform */ }\n }\n\n // Fallback local\n try {\n const __dir = dirname(fileURLToPath(import.meta.url));\n const nativeDir = resolve(__dir, \"../native\");\n const fs = nativeRequire(\"fs\") as typeof import(\"fs\");\n\n if (fs.existsSync(nativeDir)) {\n const files = fs.readdirSync(nativeDir).filter((f: string) => f.endsWith(\".node\"));\n const platform = process.platform ?? \"\";\n const arch = process.arch ?? \"\";\n const match = files.find((f: string) => f.includes(platform) && f.includes(arch))\n ?? files[0];\n\n if (match) {\n const native = nativeRequire(resolve(nativeDir, match));\n _nativeModule = native;\n if (typeof native.parseToJson === \"function\") {\n return _nativeModule;\n } else if (typeof native.parse_to_json === \"function\") {\n return _nativeModule;\n }\n }\n }\n } catch { /* native/ missing */ }\n\n throw new Error(\n `[toaq-oss/omni-mdx] Native parser not found for this platform.\\n` +\n ` Tried npm packages: ${platformPackages.join(\", \")}\\n` +\n ` ➜ Install the prebuilt package (once published):\\n` +\n ` npm install @toaq-oss/omni-mdx-darwin-arm64 # Mac M1/M2\\n` +\n ` npm install @toaq-oss/omni-mdx-linux-x64-gnu # Linux/Vercel\\n` +\n ` npm install @toaq-oss/omni-mdx-win32-x64-msvc # Windows\\n`\n );\n}\n\nfunction getParseFn(native: any): (mdx: string | Buffer | Uint8Array) => any {\n if (typeof native.parseToBinary === \"function\") return native.parseToBinary;\n if (typeof native.parse_to_binary === \"function\") return native.parse_to_binary;\n if (typeof native.parse === \"function\") return native.parse;\n if (typeof native.parseToJson === \"function\") return native.parseToJson;\n if (typeof native.parse_to_json === \"function\") return native.parse_to_json;\n\n throw new Error(\"[toaq-oss/omni-mdx] Native parser lacks a valid parse function.\");\n}\n\nexport async function parseMdx(mdx: string | Buffer | Uint8Array): Promise<AstNode[]> {\n const native = getNativeModuleSync();\n const parse = getParseFn(native);\n let result: any;\n \n try {\n result = parse(mdx);\n } catch (err: any) {\n const sourceSnippet = typeof mdx === 'string' ? mdx.slice(0, 50) : \"Binary Data\";\n throw new MDXParseError(err?.message ?? String(err), sourceSnippet);\n }\n \n\n if (result instanceof Uint8Array || Buffer.isBuffer(result)) {\n const decoder = new MdxBinaryDecoder(result);\n return decoder.decode();\n }\n\n if (typeof result === \"string\") {\n try { return JSON.parse(result) as AstNode[]; } catch { throw new Error(\"Invalid JSON string.\"); }\n }\n\n if (typeof result === \"object\" && result !== null) {\n if (typeof result.toJson === \"function\") {\n try {\n const jsonString = result.toJson();\n return JSON.parse(jsonString) as AstNode[];\n } catch (e) {\n throw new Error(\"[toaq-oss/omni-mdx] Failed to serialize MdxAst to JSON.\");\n }\n }\n \n if (typeof result.to_json === \"function\") {\n try { return JSON.parse(result.to_json()) as AstNode[]; } catch (e) {}\n }\n \n if (Array.isArray(result)) return result as AstNode[];\n }\n\n throw new Error(\"[toaq-oss/omni-mdx] Unrecognized return format from Rust parser. Available properties: \" + Object.keys(result.__proto__ || result).join(\", \"));\n}\n\nexport function parseMdxSync(mdx: string | Buffer | Uint8Array): AstNode[] {\n const native = getNativeModuleSync();\n const parse = getParseFn(native);\n\n let result: any;\n try {\n result = parse(mdx);\n } catch (err: any) {\n const sourceSnippet = typeof mdx === 'string' ? mdx.slice(0, 50) : \"Binary Data\";\n throw new MDXParseError(err?.message ?? String(err), sourceSnippet);\n }\n\n if (result instanceof Uint8Array || Buffer.isBuffer(result)) {\n const decoder = new MdxBinaryDecoder(result);\n return decoder.decode();\n }\n \n if (typeof result === \"string\") {\n try { return JSON.parse(result) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n if (typeof result === \"object\" && result !== null && typeof result.toJson === \"function\") {\n try { return JSON.parse(result.toJson()) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n if (typeof result === \"object\" && result !== null && typeof result.to_json === \"function\") {\n try { return JSON.parse(result.to_json()) as AstNode[]; } catch { throw new Error(\"Invalid JSON\"); }\n }\n\n throw new Error(\"[toaq-oss/omni-mdx] Unrecognized return format from Rust parser.\");\n}\n\nexport async function compileToJsx(mdx: string): Promise<string> {\n const native = getNativeModuleSync();\n \n const compileFn = native.compileToJsx || native.compile_to_jsx;\n \n if (typeof compileFn !== \"function\") {\n throw new Error(\"[toaq-oss/omni-mdx] compileToJsx is not supported by this native module version.\");\n }\n \n try {\n return compileFn(mdx);\n } catch (err: any) {\n throw new MDXParseError(err?.message ?? String(err), mdx);\n }\n}\n\nexport function compileToJsxSync(mdx: string): string {\n const native = getNativeModuleSync();\n \n const compileFn = native.compileToJsx || native.compile_to_jsx;\n if (typeof compileFn !== \"function\") {\n throw new Error(\"[toaq-oss/omni-mdx] compileToJsx is not supported by this native module version.\");\n }\n \n try {\n return compileFn(mdx);\n } catch (err: any) {\n throw new MDXParseError(err?.message ?? String(err), mdx);\n }\n}\n\nexport class MDXParseError extends Error {\n readonly source: string;\n constructor(message: string, source: string) {\n super(`MDX parse error: ${message}`);\n this.name = \"MDXParseError\";\n this.source = source;\n }\n}","import type { AstNode, AttrValueKind } from \"../MDXServerRenderer\";\n\nconst NODE_TEXT = 0x01;\nconst NODE_ELEMENT = 0x02;\n\nconst ATTR_TEXT = 0x10;\nconst ATTR_EXPRESSION = 0x11;\nconst ATTR_BOOLEAN = 0x12;\nconst ATTR_AST = 0x13;\n\nexport class MdxBinaryDecoder {\n private view: DataView;\n private buffer: Uint8Array;\n private offset: number = 0;\n private decoder = new TextDecoder(\"utf-8\");\n private stringCache = new Map<string, string>();\n\n constructor(buffer: Uint8Array) {\n this.buffer = buffer;\n this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n\n public decode(): AstNode[] {\n const rootCount = this.readU32();\n const nodes: AstNode[] = [];\n for (let i = 0; i < rootCount; i++) {\n nodes.push(this.decodeNode());\n }\n return nodes;\n }\n\n private decodeNode(): AstNode {\n const type = this.readU8();\n\n if (type === NODE_TEXT) {\n return {\n node_type: \"text\",\n content: this.readStringU32(),\n };\n }\n\n if (type === NODE_ELEMENT) {\n const node_type = this.readStringU16();\n const self_closing = this.readU8() === 1;\n const attrCount = this.readU16();\n \n let attributes: Record<string, AttrValueKind> | undefined = undefined;\n \n if (attrCount > 0) {\n attributes = {};\n for (let i = 0; i < attrCount; i++) {\n const key = this.readStringU16();\n const attrKind = this.readU8();\n \n if (attrKind === ATTR_TEXT) {\n attributes[key] = { kind: \"text\", value: this.readStringU32() };\n } else if (attrKind === ATTR_EXPRESSION) {\n attributes[key] = { kind: \"expression\", value: this.readStringU32() };\n } else if (attrKind === ATTR_BOOLEAN) {\n attributes[key] = { kind: \"boolean\" };\n } else if (attrKind === ATTR_AST) {\n const subNodeCount = this.readU32();\n const subNodes: AstNode[] = [];\n for (let j = 0; j < subNodeCount; j++) {\n subNodes.push(this.decodeNode());\n }\n attributes[key] = { kind: \"ast\", value: subNodes };\n }\n }\n }\n\n const childCount = this.readU32();\n const children: AstNode[] = [];\n if (childCount > 0) {\n for (let i = 0; i < childCount; i++) {\n children.push(this.decodeNode());\n }\n }\n\n return {\n node_type,\n self_closing,\n attributes,\n children,\n };\n }\n\n throw new Error(`[@toaq-oss/omni-mdx] Unknown binary opcode: ${type} at offset ${this.offset}`);\n }\n\n private readU8(): number {\n const val = this.view.getUint8(this.offset);\n this.offset += 1;\n return val;\n }\n\n private readU16(): number {\n const val = this.view.getUint16(this.offset, true);\n this.offset += 2;\n return val;\n }\n\n private readU32(): number {\n const val = this.view.getUint32(this.offset, true);\n this.offset += 4;\n return val;\n }\n\n private readStringU16(): string {\n const len = this.readU16();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n\n let cached = this.stringCache.get(str);\n if (cached) return cached;\n this.stringCache.set(str, str);\n return str;\n }\n\n private readStringU32(): string {\n const len = this.readU32();\n const str = this.decoder.decode(this.buffer.subarray(this.offset, this.offset + len));\n this.offset += len;\n return str;\n }\n}","/**\n * MDXServerRenderer.tsx\n *\n * React Server Component — renders an MDX AST on the server.\n * No \"use client\" — safe for Next.js SSR, SSG, and ISR.\n *\n * Drop-in replacement for <MDXRemote source={...} components={MDX_COMPONENTS} />\n *\n * Usage in a Server Component (page.tsx):\n *\n * import { MDXServerRenderer, parseMdx } from '@toaq/omni-mdx/server';\n * import { MDX_COMPONENTS } from './MDXComponents';\n *\n * export default async function Page() {\n * const ast = await parseMdx(mdxString);\n * return <MDXServerRenderer ast={ast} components={MDX_COMPONENTS} />;\n * }\n */\n\nimport React, { ReactNode, JSX } from \"react\";\nimport katex from \"katex\";\n\n// AST types (mirror Rust output exactly)\n\nexport type AttrValueKind =\n | { kind: \"text\"; value: string }\n | { kind: \"expression\"; value: string }\n | { kind: \"boolean\" }\n | { kind: \"ast\"; value: AstNode[] };\n\nexport interface AstNode {\n node_type: string;\n content?: string;\n self_closing?: boolean;\n child_count?: number; // Rendu optionnel\n attributes?: Record<string, AttrValueKind> | string; // Accepte l'objet binaire ou la string\n children?: AstNode[];\n}\n\nexport type MDXComponents = Record<string, React.ComponentType<any>>;\n\n/**\n * Converts a raw AttrValueKind from the Rust AST into a React-usable prop value.\n * text → string\n * expression → attempt JSON/JS parse, fallback to string\n * boolean → true\n * ast → <MDXServerRenderer ast={...} components={...} />\n */\nfunction resolveAttr(\n attr: AttrValueKind,\n components: MDXComponents,\n): React.ReactNode | string | boolean {\n switch (attr.kind) {\n case \"text\":\n return attr.value;\n\n case \"boolean\":\n return true;\n\n case \"expression\": {\n const raw = attr.value.trim();\n // Try JSON first (safe), then JS expression as last resort\n try { return JSON.parse(raw); } catch {}\n try { return new Function(`return (${raw})`)(); } catch {}\n return raw;\n }\n\n case \"ast\":\n return (\n <MDXServerRenderer\n ast={attr.value}\n components={components}\n />\n );\n\n default:\n return undefined;\n }\n}\n\nconst HTML_TAGS = new Set([\n \"a\",\"abbr\",\"address\",\"article\",\"aside\",\"b\",\"bdi\",\"bdo\",\"blockquote\",\"br\",\n \"caption\",\"cite\",\"code\",\"col\",\"colgroup\",\"data\",\"dd\",\"del\",\"details\",\"dfn\",\n \"div\",\"dl\",\"dt\",\"em\",\"figcaption\",\"figure\",\"footer\",\"h1\",\"h2\",\"h3\",\"h4\",\n \"h5\",\"h6\",\"header\",\"hr\",\"i\",\"img\",\"ins\",\"kbd\",\"li\",\"main\",\"mark\",\"nav\",\"ol\",\n \"p\",\"pre\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"small\",\"span\",\"strong\",\n \"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\n \"u\",\"ul\",\"var\",\"wbr\",\n]);\n\nfunction extractText(node: AstNode): string {\n if (node.node_type === \"text\") return node.content ?? \"\";\n if (node.content) return node.content;\n return (node.children ?? []).map(extractText).join(\"\");\n}\n\nfunction renderNode(\n node: AstNode,\n index: number,\n components: MDXComponents,\n): ReactNode {\n const key = `${node.node_type}-${index}`;\n\n if (node.node_type === \"text\") {\n return node.content ?? null;\n }\n\n if (node.node_type === \"fragment\") {\n return (\n <React.Fragment key={key}>\n {renderChildren(node, components)}\n </React.Fragment>\n );\n }\n\n // Math — server-side rendering via KaTeX (static HTML, no client-side JavaScript)\n if (node.node_type === \"InlineMath\") {\n const formula = extractText(node);\n\n try {\n const html = katex.renderToString(formula, {\n displayMode: false,\n throwOnError: false,\n output: \"html\",\n });\n return (\n <span\n key={key}\n className=\"math math-inline\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return <span key={key} className=\"math math-inline\">{formula}</span>;\n }\n }\n\n if (node.node_type === \"BlockMath\") {\n const formula = extractText(node);\n\n try {\n const html = katex.renderToString(formula, {\n displayMode: true,\n throwOnError: false,\n output: \"html\",\n });\n return (\n <div\n key={key}\n className=\"math math-display\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n } catch {\n return <div key={key} className=\"math math-display\">{formula}</div>;\n }\n }\n\n // Resolve props from AST attributes\n const resolvedProps: Record<string, any> = {};\n if (node.attributes) {\n const attrs = typeof node.attributes === \"string\" \n ? JSON.parse(node.attributes) \n : node.attributes;\n\n for (const [k, v] of Object.entries(attrs)) {\n resolvedProps[k] = resolveAttr(v as AttrValueKind, components);\n }\n }\n\n const renderedChildren = node.children && node.children.length > 0\n ? renderChildren(node, components)\n : (node.content ?? undefined);\n\n // Custom registered component\n const Custom = components[node.node_type];\n if (Custom) {\n try {\n return (\n <Custom key={key} {...resolvedProps}>\n {renderedChildren}\n </Custom>\n );\n } catch (err) {\n if (process.env.NODE_ENV === \"development\") {\n console.error(`[toaq-oss/omni-mdx] Server render failed for <${node.node_type}>:`, err);\n }\n return (\n <div\n key={key}\n className=\"mdx-component-error\"\n data-component={node.node_type}\n style={{ padding: \"1rem\", border: \"2px solid #ef4444\", borderRadius: \"0.5rem\", margin: \"1rem 0\", background: \"#fef2f2\" }}\n >\n <strong style={{ color: \"#b91c1c\" }}>Render error: &lt;{node.node_type}&gt;</strong>\n {process.env.NODE_ENV === \"development\" && (\n <pre style={{ color: \"#dc2626\", fontSize: \"0.875rem\", marginTop: \"0.5rem\" }}>\n {String(err)}\n </pre>\n )}\n </div>\n );\n }\n }\n\n if (node.node_type === \"table\") {\n const firstChild = node.children?.[0];\n const hasThead = firstChild?.node_type === \"thead\";\n const theadNode = hasThead ? firstChild : null;\n const bodyRows = hasThead ? node.children!.slice(1) : node.children ?? [];\n\n const theadEl = theadNode ? (\n <thead key=\"thead\">\n <tr>\n {theadNode.children?.map((cell, i) =>\n renderNode({ ...cell, node_type: \"th\" }, i, components)\n )}\n </tr>\n </thead>\n ) : null;\n\n const tbodyEl = bodyRows.length > 0 ? (\n <tbody key=\"tbody\">\n {bodyRows.map((row, i) => renderNode(row, i, components))}\n </tbody>\n ) : null;\n\n return <table key={key} {...resolvedProps}>{theadEl}{tbodyEl}</table>;\n }\n\n if (node.node_type === \"pre\") {\n const rawText = extractText(node);\n return <pre key={key} {...resolvedProps}><code>{rawText}</code></pre>;\n }\n\n if (HTML_TAGS.has(node.node_type)) {\n const Tag = node.node_type as keyof JSX.IntrinsicElements;\n return (\n <Tag key={key} {...resolvedProps}>\n {renderedChildren}\n </Tag>\n );\n }\n\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\n `[toaq-oss/omni-mdx] Unknown component: <${node.node_type}>. ` +\n `Register it via MDX_COMPONENTS or add it to your components prop.`\n );\n }\n return (\n <div key={key} data-missing-component={node.node_type} className=\"mdx-missing-component\">\n {renderedChildren}\n </div>\n );\n}\n\nfunction renderChildren(node: AstNode, components: MDXComponents): ReactNode[] {\n if (!node.children?.length) return [];\n return node.children.map((child, i) => renderNode(child, i, components));\n}\n\ninterface MDXServerRendererProps {\n /** AST produced by parseMdx() — JSON-serialisable. */\n ast: AstNode[];\n /**\n * Component registry. Keys are JSX tag names (e.g. \"Note\", \"Details\").\n * Values are React components (Server or Client).\n *\n * Server Components render on the server (recommended for static content).\n * Client Components receive \"use client\" and hydrate in the browser.\n */\n components?: MDXComponents;\n}\n\nexport function MDXServerRenderer({\n ast,\n components = {},\n}: MDXServerRendererProps): JSX.Element {\n if (!ast || !Array.isArray(ast)) {\n return <></>;\n }\n\n return (\n <div className=\"omni-mdx-root\">\n {ast.map((node, i) => renderNode(node, i, components))}\n </div>\n );\n}"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toaq-oss/omni-mdx",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "MDX parser + renderer for Next.js \u2014 Rust core, RSC-compatible",
5
5
  "license": "MIT",
6
6
  "type": "module",