Convert a JavaScript value to an ESTree expression.
npm install estree-util-value-to-estreeThis 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:
bigintbooleannullnumber(Including Infinity and NaN)stringsymbol(shared and well-known)object- null-prototype
Object undefinedArrayBigInt64ArrayBigUint64ArrayBooleanBufferDateFloat16ArrayFloat32ArrayFloat64ArrayInt8ArrayInt16ArrayInt32ArrayMapNumberRegExpSetStringTemporal.DurationTemporal.InstantTemporal.PlainDateTemporal.PlainDateTimeTemporal.PlainYearMonthTemporal.PlainMonthDayTemporal.PlainTimeTemporal.ZonedDateTimeUint8ArrayUint8ClampedArrayUint16ArrayUint32ArrayURLURLSearchParams- custom
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.
instanceAsObject(boolean, default:false) — If true, treat objects that have a prototype as plain objects.preserveReferences(boolean, default:false) — If true, preserve references to the same object found within the input. This also allows to serialize recursive structures. If needed, the resulting expression will be an iife.replacer(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.
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:
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.