Package Exports
- estree-util-value-to-estree
Readme
estree-util-value-to-estree
Convert a JavaScript value to an ESTree expression.
Table of Contents
Installation
npm install estree-util-value-to-estreeUsage
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:
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 }
// }
// ]
// })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.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.
Examples
Transform unsupported values into plain objects
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 }
// }
// ]
// }Serialize custom values
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)Compatibility
This project is compatible with Node.js 16 or greater.