Convert a JavaScript value to an estree expression
npm install estree-util-value-to-estree



Convert a JavaScript value to an ESTree expression.
- Installation
- Usage
- API
- valueToEstree(value, options?)
- Examples
- Transform unsupported values into plain objects
- Serialize custom values
- Compatibility
- License
``sh`
npm install estree-util-value-to-estree
This package converts a JavaScript value to an ESTree expression
for values that can be constructed without the need for a context.
Currently the following types are supported:
- bigint
- boolean
- null
- number (Including
Infinity
and NaN)
- string
- symbol
(shared
and
well-known)
- object
- null-prototype Object
- undefined
- Array
- BigInt64Array
- BigUint64Array
- Boolean
- Buffer
- Date
- Float16Array
- Float32Array
- Float64Array
- Int8Array
- Int16Array
- Int32Array
- Map
- Number
- RegExp
- Set
- String
- Temporal.Duration
- Temporal.Instant
- Temporal.PlainDate
- Temporal.PlainDateTime
- Temporal.PlainYearMonth
- Temporal.PlainMonthDay
- Temporal.PlainTime
- Temporal.ZonedDateTime
- Uint8Array
- Uint8ClampedArray
- Uint16Array
- Uint32Array
- URL
- URLSearchParams
- custom
`ts
import { valueToEstree } from 'estree-util-value-to-estree'
const result = valueToEstree({
string: 'Hello world!',
number: 42
})
console.log(result)
// {
// type: 'ObjectExpression',
// properties: [
// {
// 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 }
// }
// ]
// })
`
This API exports the function valueToEstree.
Convert a value to an ESTree node.
#### options
- instanceAsObject (boolean, default: false) — If true, treat objects that have a prototype aspreserveReferences
plain objects.
- (boolean, default: false) — If true, preserve references to the same objectreplacer
found within the input. This also allows to serialize recursive structures. If needed, the
resulting expression will be an iife.
- (Function) — A function to customize the serialization of a value. It accepts the value
to serialize as an argument. It must return the value serialized to an ESTree expression. If
nothing is returned, the value is processed by the builtin logic.
By default custom types result in an error. If options.instanceAsObject is set to true however,
they are turned into plain objects.
`ts
import { valueToEstree } from 'estree-util-value-to-estree'
class Point {
line: number
column: number
constructor(line: number, column: number) {
this.line = line
this.column = column
}
}
const point = new Point(2, 3)
const result = valueToEstree(point, { instanceAsObject: true })
console.log(result)
// {
// 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 }
// }
// ]
// }
`
You can customize the serialization of values using the replacer option. For example, to serialize
a custom class:
`ts
import { valueToEstree } from 'estree-util-value-to-estree'
class Point {
line: number
column: number
constructor(line: number, column: number) {
this.line = line
this.column = column
}
}
const point = new Point(2, 3)
const result = valueToEstree(point, {
replacer(value) {
if (value instanceof Point) {
return {
type: 'NewExpression',
callee: { type: 'Identifier', name: 'Point' },
arguments: [
{ type: 'Literal', value: value.line },
{ type: 'Literal', value: value.column }
]
}
}
}
})
console.log(result)
``
This project is compatible with Node.js 16 or greater.