mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-19 21:04:56 +02:00
259 lines
6.4 KiB
Markdown
259 lines
6.4 KiB
Markdown
# estree-util-value-to-estree
|
||
|
||
[](https://github.com/remcohaszing/estree-util-value-to-estree/actions/workflows/ci.yaml)
|
||
[](https://codecov.io/gh/remcohaszing/estree-util-value-to-estree)
|
||
[](https://www.npmjs.com/package/estree-util-value-to-estree)
|
||
[](https://prettier.io)
|
||
|
||
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)
|
||
- [options](#options)
|
||
- [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) 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`, and`Uint32Array`)
|
||
- undefined
|
||
- URL objects
|
||
- URLSearchParams objects
|
||
|
||
if `options.instanceAsObject` is set to `true`, other objects are turned into plain object.
|
||
|
||
```ts
|
||
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.
|
||
|
||
## License
|
||
|
||
[MIT](LICENSE.md) © [Remco Haszing](https://github.com/remcohaszing)
|