@@ -234,7 +234,8 @@ export function WorkspaceProvider({ children }: { children: ReactNode }) {
234234
235235 const finalOptions = { ...lbrnOptions , ...options }
236236
237- const xml = await convertCircuitJsonToLbrn ( circuitJson , finalOptions )
237+ const rawXml = await convertCircuitJsonToLbrn ( circuitJson , finalOptions )
238+ const xml = formatLbrnXml ( rawXml )
238239
239240 setLbrnFileContent ( {
240241 xml,
@@ -275,6 +276,44 @@ export function WorkspaceProvider({ children }: { children: ReactNode }) {
275276 )
276277}
277278
279+ const formatLbrnXml = ( value : unknown ) : string => {
280+ if ( typeof value === "string" ) {
281+ return value
282+ }
283+
284+ if ( value && typeof value === "object" ) {
285+ const candidate = value as { xml ?: unknown ; outerHTML ?: unknown }
286+ if ( typeof candidate . xml === "string" ) {
287+ return candidate . xml
288+ }
289+ if ( typeof candidate . outerHTML === "string" ) {
290+ return candidate . outerHTML
291+ }
292+ }
293+
294+ if ( typeof window !== "undefined" && value instanceof XMLDocument ) {
295+ return new XMLSerializer ( ) . serializeToString ( value )
296+ }
297+
298+ if ( typeof window !== "undefined" && value instanceof Element ) {
299+ return new XMLSerializer ( ) . serializeToString ( value )
300+ }
301+
302+ if ( Array . isArray ( value ) ) {
303+ return value . map ( formatLbrnXml ) . join ( "" )
304+ }
305+
306+ const fallback = String ( value )
307+ if ( fallback . startsWith ( "[object " ) && fallback . endsWith ( "]" ) ) {
308+ const inner = fallback . slice ( 8 , - 1 )
309+ if ( inner . trim ( ) . startsWith ( "<?xml" ) ) {
310+ return inner
311+ }
312+ }
313+
314+ return fallback
315+ }
316+
278317export function useWorkspace ( ) {
279318 const context = useContext ( WorkspaceContext )
280319 if ( context === undefined ) {
0 commit comments