Files
documentation/node_modules/estree-util-value-to-estree/README.md
2024-03-22 03:47:51 +05:30

259 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](https://img.shields.io/npm/v/estree-util-value-to-estree)](https://www.npmjs.com/package/estree-util-value-to-estree)
[![prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](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: ['Im 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: 'Im 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)