Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/remcohaszing/estree-util-value-to-estree
Convert a JavaScript value to an estree expression
https://github.com/remcohaszing/estree-util-value-to-estree
esast estree estree-util javascript language typescript unist
Last synced: 29 days ago
JSON representation
Convert a JavaScript value to an estree expression
- Host: GitHub
- URL: https://github.com/remcohaszing/estree-util-value-to-estree
- Owner: remcohaszing
- License: mit
- Created: 2021-03-06T19:34:09.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-26T11:13:26.000Z (5 months ago)
- Last Synced: 2024-10-31T00:02:20.802Z (about 1 month ago)
- Topics: esast, estree, estree-util, javascript, language, typescript, unist
- Language: JavaScript
- Homepage:
- Size: 761 KB
- Stars: 24
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-syntax-tree - estree-util-value-to-estree - Turn a JavaScript value into an estree expression (esast utilities)
- awesome-fe-resources - estree-util-value-to-estree
README
# estree-util-value-to-estree
[![github actions](https://github.com/remcohaszing/estree-util-value-to-estree/actions/workflows/ci.yaml/badge.svg)](https://github.com/remcohaszing/estree-util-value-to-estree/actions/workflows/ci.yaml)
[![codecov](https://codecov.io/gh/remcohaszing/estree-util-value-to-estree/branch/main/graph/badge.svg)](https://codecov.io/gh/remcohaszing/estree-util-value-to-estree)
[![npm version](https://img.shields.io/npm/v/estree-util-value-to-estree)](https://www.npmjs.com/package/estree-util-value-to-estree)
[![npm downloads](https://img.shields.io/npm/dm/estree-util-value-to-estree)](https://www.npmjs.com/package/estree-util-value-to-estree)Convert a JavaScript value to an [ESTree](https://github.com/estree/estree) expression.
## Table of Contents
- [Installation](#installation)
- [Usage](#usage)
- [API](#api)
- [`valueToEstree(value, options?)`](#valuetoestreevalue-options)
- [Compatibility](#compatibility)
- [License](#license)## Installation
```sh
npm install estree-util-value-to-estree
```## Usage
This package converts a JavaScript value to an [ESTree](https://github.com/estree/estree) expression
for values that can be constructed without the need for a context.Currently the following types are supported:
- [`bigint`](https://developer.mozilla.org/en-US/docs/Glossary/BigInt)
- [`boolean`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
- [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null)
- [`number`](https://developer.mozilla.org/en-US/docs/Glossary/Number) (Including
[Infinity](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity)
and [NaN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN))
- [`string`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
- [`symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol)
([shared](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry)
and
[well-known](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#well-known_symbols))
- [`object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
- [null-prototype `Object`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#null-prototype_objects)
- [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Undefined)
- [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
- [`BigInt64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array)
- [`BigUint64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigUint64Array)
- [`Boolean`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
- [`Buffer`](https://nodejs.org/api/buffer.html)
- [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)
- [`Float32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array)
- [`Float64Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array)
- [`Int16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array)
- [`Int32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array)
- [`Int8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array)
- [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
- [`Number`](https://developer.mozilla.org/en-US/docs/Glossary/Number)
- [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)
- [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)
- [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
- [`Uint16Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array)
- [`Uint32Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array)
- [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)
- [`Uint8ClampedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray)
- [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL)
- [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)If `options.instanceAsObject` is set to `true`, other objects are turned into plain object.
```ts
import assert 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' }
})assert.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: numbercolumn: number
constructor(line: number, column: number) {
this.line = line
this.column = column
}
}// Normally complex objects throw.
assert.throws(() => valueToEstree(new Point(2, 3)))// `instanceAsObject: true` treats them as plain objects.
assert.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](https://github.com/estree/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.## Compatibility
This project is compatible with Node.js 16 or greater.
## License
[MIT](LICENSE.md) © [Remco Haszing](https://github.com/remcohaszing)