(
value: any,
{
circularReferenceToken = 'CIRCULAR_REFERENCE',
doubleQuote = true,
includeFunctions = true,
includeUndefinedProperties = false,
indentLevel = 0,
indentString = ' ',
lineEnding = '\n',
visitedObjects = new Set(),
}: any = {},
)
| 24 | * @returns |
| 25 | */ |
| 26 | export const valueToSource = ( |
| 27 | value: any, |
| 28 | { |
| 29 | circularReferenceToken = 'CIRCULAR_REFERENCE', |
| 30 | doubleQuote = true, |
| 31 | includeFunctions = true, |
| 32 | includeUndefinedProperties = false, |
| 33 | indentLevel = 0, |
| 34 | indentString = ' ', |
| 35 | lineEnding = '\n', |
| 36 | visitedObjects = new Set(), |
| 37 | }: any = {}, |
| 38 | ): any => { |
| 39 | switch (typeof value) { |
| 40 | case 'boolean': |
| 41 | return value ? `${indentString.repeat(indentLevel)}true` : `${indentString.repeat(indentLevel)}false` |
| 42 | case 'function': |
| 43 | if (includeFunctions) { |
| 44 | return `${indentString.repeat(indentLevel)}${value}` |
| 45 | } |
| 46 | return null |
| 47 | case 'number': |
| 48 | return `${indentString.repeat(indentLevel)}${value}` |
| 49 | case 'object': |
| 50 | if (!value) { |
| 51 | return `${indentString.repeat(indentLevel)}null` |
| 52 | } |
| 53 | |
| 54 | if (visitedObjects.has(value)) { |
| 55 | return `${indentString.repeat(indentLevel)}${circularReferenceToken}` |
| 56 | } |
| 57 | |
| 58 | if (value instanceof Date) { |
| 59 | return `${indentString.repeat(indentLevel)}new Date(${quoteString(value.toISOString(), { |
| 60 | doubleQuote, |
| 61 | })})` |
| 62 | } |
| 63 | |
| 64 | if (value instanceof Map) { |
| 65 | return value.size |
| 66 | ? `${indentString.repeat(indentLevel)}new Map(${valueToSource([...value], { |
| 67 | circularReferenceToken, |
| 68 | doubleQuote, |
| 69 | includeFunctions, |
| 70 | includeUndefinedProperties, |
| 71 | indentLevel, |
| 72 | indentString, |
| 73 | lineEnding, |
| 74 | visitedObjects: new Set([value, ...visitedObjects]), |
| 75 | }).slice(indentLevel * indentString.length)})` |
| 76 | : `${indentString.repeat(indentLevel)}new Map()` |
| 77 | } |
| 78 | |
| 79 | if (value instanceof RegExp) { |
| 80 | return `${indentString.repeat(indentLevel)}/${value.source}/${value.flags}` |
| 81 | } |
| 82 | |
| 83 | if (value instanceof Set) { |
no test coverage detected