mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-06 19:15:12 +02:00
estree-util-value-to-estree
Convert a JavaScript value to an estree expression
Table of Contents
Installation
npm install estree-util-value-to-estree
Usage
This package converts a JavaScript value to an estree for values that can be constructed without the need for a context.
Currently the following types are supported:
- arrays
- bigints
- booleans
- dates
- maps
- null
- numbers (including
Infinity
,NaN
, and negative numbers) - objects (plain objects only)
- regular expressions
- sets
- strings
- symbols (only global symbols)
- typed arrays (
BigInt64Array
,BigUint64Array
,Float32Array
,Float64Array
,Int8Array
,Int16Array
,Int32Array
,Uint8Array
,Uint8ClampedArray
,Uint16Array
, andUint32Array
) - undefined
- URL objects
- URLSearchParams objects
if options.instanceAsObject
is set to true
, other objects are turned into plain object.
import { deepEqual, throws } from 'node:assert/strict'
import { valueToEstree } from 'estree-util-value-to-estree'
const result = valueToEstree({
null: null,
undefined,
string: 'Hello world!',
number: 42,
negativeNumber: -1337,
infinity: Number.POSITIVE_INFINITY,
notANumber: Number.NaN,
regex: /\w+/i,
date: new Date('1970-01-01'),
array: ['I’m an array item!'],
object: { nested: 'value' }
})
deepEqual(result, {
type: 'ObjectExpression',
properties: [
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'null' },
value: { type: 'Literal', value: null }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'undefined' },
value: { type: 'Identifier', name: 'undefined' }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'string' },
value: { type: 'Literal', value: 'Hello world!' }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'number' },
value: { type: 'Literal', value: 42 }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'negativeNumber' },
value: {
type: 'UnaryExpression',
operator: '-',
prefix: true,
argument: { type: 'Literal', value: 1337 }
}
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'infinity' },
value: { type: 'Identifier', name: 'Infinity' }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'notANumber' },
value: { type: 'Identifier', name: 'NaN' }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'regex' },
value: {
type: 'Literal',
value: /\w+/i,
regex: { pattern: '\\w+', flags: 'i' }
}
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'date' },
value: {
type: 'NewExpression',
callee: { type: 'Identifier', name: 'Date' },
arguments: [{ type: 'Literal', value: 0 }]
}
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'array' },
value: {
type: 'ArrayExpression',
elements: [{ type: 'Literal', value: 'I’m an array item!' }]
}
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'object' },
value: {
type: 'ObjectExpression',
properties: [
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'nested' },
value: { type: 'Literal', value: 'value' }
}
]
}
}
]
})
class Point {
line: number
column: number
constructor(line: number, column: number) {
this.line = line
this.column = column
}
}
// Normally complex objects throw.
throws(() => valueToEstree(new Point(2, 3)))
// `instanceAsObject: true` treats them as plain objects.
deepEqual(valueToEstree(new Point(2, 3), { instanceAsObject: true }), {
type: 'ObjectExpression',
properties: [
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'line' },
value: { type: 'Literal', value: 2 }
},
{
type: 'Property',
method: false,
shorthand: false,
computed: false,
kind: 'init',
key: { type: 'Literal', value: 'column' },
value: { type: 'Literal', value: 3 }
}
]
})
API
This API exports the function valueToEstree
.
valueToEstree(value, options?)
Convert a value to an ESTree node.
options
instanceAsObject
(boolean, default:false
) — If true, treat objects that have a prototype as plain objects.