File tree Expand file tree Collapse file tree 6 files changed +18
-6
lines changed
src/lib/svelte-json-tree/SvelteJsonTree Expand file tree Collapse file tree 6 files changed +18
-6
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ ' svelte-json-tree ' : minor
3+ ---
4+
5+ Add ` shouldTreatIterableAsObject ` to treat iterable as plain object
Original file line number Diff line number Diff line change 1212 import JsonSvelteStoreNode from ' ./JSONSvelteStoreNode.svelte' ;
1313 import TypedArrayNode from ' ./TypedArrayNode.svelte' ;
1414 import RegExpNode from ' ./RegExpNode.svelte' ;
15+ import { useState } from ' ./utils/context' ;
1516
1617 export let value: unknown ;
1718 const nodeType = writable <string >();
18- $ : $nodeType = objType (value );
19+ const { shouldTreatIterableAsObject } = useState ();
20+
21+ $ : $nodeType = objType (value , shouldTreatIterableAsObject );
1922 $ : [componentType , props ] = getComponentAndProps ($nodeType , value );
2023
2124 function getComponentAndProps(nodeType : string , value : any ) {
7073 case ' RegExp' :
7174 return [RegExpNode ];
7275 default :
73- return [JSONValueNode , { nodeType , value: ` <${ nodeType }> ` }];
76+ return [JSONObjectNode , { summary: nodeType }];
7477 }
7578 }
7679 </script >
Original file line number Diff line number Diff line change 44 import PreviewList from ' ./PreviewList.svelte' ;
55
66 export let value: Record <string , unknown >;
7+ export let summary: string | undefined ;
78
89 $ : keys = Object .getOwnPropertyNames (value );
910 $ : previewKeys = keys .slice (0 , 5 );
1011 </script >
1112
1213<JSONNested {keys }>
13- <svelte:fragment slot ="summary" ><span class ="label" >{' {…}' }</span ></svelte:fragment >
14+ <svelte:fragment slot ="summary" ><span class ="label" >{summary ?? ' {…}' }</span ></svelte:fragment >
1415 <svelte:fragment slot =" preview" let:root >
15- <PreviewList list ={previewKeys } hasMore ={previewKeys .length < keys .length } prefix ={' {' } postfix ={' }' } {root }>
16+ <PreviewList list ={previewKeys } hasMore ={previewKeys .length < keys .length } prefix ={summary ? ` ${ summary } { ` : ' {' } postfix ={' }' } {root }>
1617 <svelte:fragment slot =" item" let:item
1718 ><span class ="property" >{item }</span ><span class ="operator" >{' : ' }</span ><JSONNode value ={value [item ]} /></svelte:fragment
1819 >
Original file line number Diff line number Diff line change 77
88 export let value: unknown ;
99 export let shouldShowPreview: boolean = true ;
10+ export let shouldTreatIterableAsObject: boolean = false ;
1011 export let defaultExpandedPaths: string [] = [];
1112 export let defaultExpandedLevel: number = 0 ;
1213
2122 level: 0 ,
2223 keyPath: [],
2324 showPreview: shouldShowPreview ,
25+ shouldTreatIterableAsObject ,
2426 });
2527 </script >
2628
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ export type State = {
1212 keyPath : string [ ] ,
1313 level : number ,
1414 showPreview : boolean ;
15+ shouldTreatIterableAsObject : boolean ;
1516} ;
1617
1718export function useState ( newState ?: Partial < State > | ( ( state : State ) => Partial < State > ) , opts ?: { expandable ?: boolean } ) : State {
Original file line number Diff line number Diff line change 1- export default function objType ( obj : unknown ) : string {
1+ export default function objType ( obj : unknown , shouldTreatIterableAsObject : boolean ) : string {
22 const type = Object . prototype . toString . call ( obj ) . slice ( 8 , - 1 ) ;
33 if ( type === 'Object' ) {
4- if ( typeof obj [ Symbol . iterator ] === 'function' ) {
4+ if ( ! shouldTreatIterableAsObject && typeof obj [ Symbol . iterator ] === 'function' ) {
55 return 'Iterable' ;
66 }
77 return obj . constructor . name ;
You can’t perform that action at this time.
0 commit comments