@@ -11,10 +11,10 @@ import {
1111import { SerovalChunkReader } from "../../server/serialization.ts" ;
1212import { Badge } from "../ui/Badge.tsx" ;
1313import { Cascade , CascadeOption } from "../ui/Cascade.tsx" ;
14+ import { PropertySeparator } from "../ui/Properties.tsx" ;
1415import { Section } from "../ui/Section.tsx" ;
1516import { HexViewer } from "./HexViewer.tsx" ;
1617import { SerovalValue } from "./SerovalValue.tsx" ;
17- import { PropertySeparator } from "../ui/Properties.tsx" ;
1818
1919import "./SerovalViewer.css" ;
2020
@@ -153,6 +153,8 @@ function getNodeType(node: SerovalNode) {
153153 // StreamConstructor = 31,
154154 case 31 :
155155 return "Stream" ;
156+ case 35 :
157+ return "Sequence" ;
156158 }
157159 throw new Error ( "unsupported node type" ) ;
158160}
@@ -266,7 +268,12 @@ function traverse(
266268 break ;
267269 // Plugin = 25,
268270 case 25 :
269- // due to the nature of this node, we have to traverse it ourselves
271+ for ( const key in node . s ) {
272+ const current = node . s [ key ] ;
273+ if ( current ) {
274+ traverse ( current , handler ) ;
275+ }
276+ }
270277 break ;
271278 // SpecialReference = 26,
272279 case 26 :
@@ -304,6 +311,14 @@ function traverse(
304311 case 34 :
305312 traverse ( node . f , handler ) ;
306313 break ;
314+ case 35 :
315+ // Traverse items
316+ for ( const child of node . a ) {
317+ if ( child ) {
318+ traverse ( child , handler ) ;
319+ }
320+ }
321+ break ;
307322 }
308323}
309324
@@ -442,17 +457,27 @@ function renderSerovalNode(
442457 // BigInt = 3,
443458 case 3 :
444459 return (
445- < >
460+ < div data-start-seroval-link >
446461 < Badge type = "info" > bigint</ Badge >
447462 < SerovalValue value = { node . s } />
448- </ >
463+ </ div >
449464 ) ;
450465 // Date = 5,
451466 case 5 :
452- return < SerovalValue value = { node . s } /> ;
467+ return (
468+ < div data-start-seroval-link >
469+ < Badge type = "info" > Date</ Badge >
470+ < SerovalValue value = { node . s } />
471+ </ div >
472+ ) ;
453473 // RegExp = 6,
454474 case 6 :
455- return < SerovalValue value = { `/${ node . c } /${ node . m } ` } /> ;
475+ return (
476+ < div data-start-seroval-link >
477+ < Badge type = "info" > RegExp</ Badge >
478+ < SerovalValue value = { `/${ node . c } /${ node . m } ` } />
479+ </ div >
480+ ) ;
456481 // Set = 7,
457482 case 7 :
458483 return (
@@ -730,8 +755,34 @@ function renderSerovalNode(
730755 ) ;
731756 // Plugin = 25
732757 case 25 :
733- // due to the nature of this node, we have to traverse it ourselves
734- break ;
758+ return (
759+ < >
760+ < Section title = "Information" options = { { size : "xs" } } >
761+ < div data-start-seroval-property >
762+ < SerovalValue value = "plugin" />
763+ < PropertySeparator />
764+ < SerovalValue value = { node . c } />
765+ </ div >
766+ </ Section >
767+ < Section title = "Properties" options = { { size : "xs" } } >
768+ < Cascade < number | undefined >
769+ data-start-seroval-properties
770+ defaultValue = { undefined }
771+ onChange = { onSelect }
772+ >
773+ < For each = { Object . entries ( node . s ) } >
774+ { ( [ key , value ] ) => (
775+ < div data-start-seroval-property >
776+ < SerovalValue value = { key } />
777+ < PropertySeparator />
778+ { renderSerovalNode ( ctx , value , onSelect , true ) }
779+ </ div >
780+ ) }
781+ </ For >
782+ </ Cascade >
783+ </ Section >
784+ </ >
785+ ) ;
735786 // IteratorFactory = 27,
736787 case 27 :
737788 break ;
@@ -770,6 +821,24 @@ function renderSerovalNode(
770821 } ) ( ) }
771822 </ >
772823 ) ;
824+ case 35 :
825+ return (
826+ < Cascade < number | undefined >
827+ data-start-seroval-properties
828+ defaultValue = { undefined }
829+ onChange = { onSelect }
830+ >
831+ < For each = { node . a } >
832+ { ( current , index ) => (
833+ < div data-start-seroval-property >
834+ < SerovalValue value = { index ( ) === node . l ? 'return' : index ( ) === node . s ? 'throw' : 'next' } />
835+ < PropertySeparator />
836+ { renderSerovalNode ( ctx , current , onSelect , true ) }
837+ </ div >
838+ ) }
839+ </ For >
840+ </ Cascade >
841+ ) ;
773842 }
774843}
775844
@@ -917,13 +986,9 @@ export function SerovalViewer(props: SerovalViewerProps): JSX.Element {
917986 case 27 :
918987 case 29 :
919988 case 31 :
989+ case 35 :
920990 references . write ( node . i , node ) ;
921991 break ;
922- case 28 : {
923- break ;
924- }
925- case 30 :
926- break ;
927992 }
928993 }
929994
0 commit comments