senselogic-def
Version:
Data exchange format.
113 lines (102 loc) • 2.86 kB
JavaScript
// -- FUNCTIONS
export function getDumpText(
value,
level = 0,
levelSpaceCount = 2
)
{
if ( value === undefined )
{
return 'undefined';
}
else if ( value === null )
{
return 'null';
}
else if ( typeof value === 'boolean'
|| typeof value === 'number' )
{
return String( value );
}
else if ( typeof value === 'string' )
{
return JSON.stringify( value );
}
else if ( Array.isArray( value ) )
{
if ( value.length === 0 )
{
return '[]';
}
else
{
let text = '[\n';
let indent = ' '.repeat( ( level + 1 ) * levelSpaceCount );
for ( let item of value )
{
text
+= indent
+ getDumpText( item, level + 1, levelSpaceCount )
+ ',\n';
}
text = text.substring( 0, text.length - 2 ) + '\n';
text += ' '.repeat( level * levelSpaceCount ) + ']';
return text;
}
}
else if ( value instanceof Map )
{
if ( value.size === 0 )
{
return 'Map(0) {}';
}
else
{
let text = 'Map(' + value.size + ') {\n';
let indent = ' '.repeat( ( level + 1 ) * levelSpaceCount );
for ( let [ entry_key, entry_value ] of value.entries() )
{
text
+= indent
+ getDumpText( entry_key, level + 1, levelSpaceCount )
+ ' => '
+ getDumpText( entry_value, level + 1, levelSpaceCount )
+ ',\n';
}
text = text.substring( 0, text.length - 2 ) + '\n';
text += ' '.repeat( level * levelSpaceCount ) + '}';
return text;
}
}
else if ( typeof value === 'object' )
{
if ( Object.keys( value ).length === 0 )
{
return '{}';
}
else
{
let text = '{\n';
let indent = ' '.repeat( ( level + 1 ) * levelSpaceCount );
for ( let key in value )
{
if ( Object.prototype.hasOwnProperty.call( value, key ) )
{
text
+= indent
+ JSON.stringify( key )
+ ': '
+ getDumpText( value[ key ], level + 1, levelSpaceCount )
+ ',\n';
}
}
text = text.substring( 0, text.length - 2 ) + '\n';
text += ' '.repeat( level * levelSpaceCount ) + '}';
return text;
}
}
else
{
return String( value );
}
}