🎉 initiate project *astro_rewrite*

This commit is contained in:
sindrekjelsrud 2023-07-19 21:31:30 +02:00
parent ffd4d5e86c
commit 2ba37bfbe3
8658 changed files with 2268794 additions and 2538 deletions

7
node_modules/estree-util-to-js/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,7 @@
export {toJs} from './lib/index.js'
export {jsx} from './lib/jsx.js'
export type Handler = import('./lib/types.js').Handler
export type Handlers = import('./lib/types.js').Handlers
export type Options = import('./lib/index.js').Options
export type Result = import('./lib/index.js').Result
export type State = import('./lib/types.js').State

10
node_modules/estree-util-to-js/index.js generated vendored Normal file
View file

@ -0,0 +1,10 @@
/**
* @typedef {import('./lib/types.js').Handler} Handler
* @typedef {import('./lib/types.js').Handlers} Handlers
* @typedef {import('./lib/index.js').Options} Options
* @typedef {import('./lib/index.js').Result} Result
* @typedef {import('./lib/types.js').State} State
*/
export {toJs} from './lib/index.js'
export {jsx} from './lib/jsx.js'

112
node_modules/estree-util-to-js/lib/index.d.ts generated vendored Normal file
View file

@ -0,0 +1,112 @@
/**
* Serialize an estree as JavaScript.
*
* @param tree
* Estree (esast).
* @param options
* Configuration (optional).
* @returns
* Result, optionally with source map.
*/
export const toJs: ((
value: Program,
options: OptionsWithSourceMapGenerator
) => ResultWithSourceMapGenerator) &
((
value: Program,
options: OptionsWithMaybeMapGenerator
) => ResultMaybeSourceMapGenerator) &
((
value: Program,
options?: OptionsWithoutSourceMapGenerator | null | undefined
) => ResultWithoutSourceMapGenerator)
export type Program = import('estree-jsx').Program
export type SourceMapGenerator = typeof import('source-map').SourceMapGenerator
export type Map = import('source-map').RawSourceMap
export type Handlers = import('./types.js').Handlers
export type BaseFields = {
/**
* Object mapping node types to functions handling the corresponding nodes.
*/
handlers?: Handlers | null | undefined
}
export type SourceMapFieldsWithoutSourceMapGenerator = {
/**
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
*/
SourceMapGenerator?: null | undefined
/**
* Path to input file.
* Only used in source map.
*/
filePath?: null | undefined
}
export type SourceMapFieldsWithSourceMapGenerator = {
/**
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
*/
SourceMapGenerator: SourceMapGenerator
/**
* Path to input file.
* Only used in source map.
*/
filePath?: string | null | undefined
}
export type SourceMapFieldsMaybeSourceMapGenerator = {
/**
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
*/
SourceMapGenerator: SourceMapGenerator | null | undefined
/**
* Path to input file.
* Only used in source map.
*/
filePath?: string | null | undefined
}
export type OptionsWithoutSourceMapGenerator = BaseFields &
SourceMapFieldsWithoutSourceMapGenerator
export type OptionsWithSourceMapGenerator = BaseFields &
SourceMapFieldsWithSourceMapGenerator
export type OptionsWithMaybeMapGenerator = BaseFields &
SourceMapFieldsMaybeSourceMapGenerator
/**
* Configuration (optional).
*/
export type Options = OptionsWithMaybeMapGenerator
export type BaseResultFields = {
/**
* Serialized JavaScript.
*/
value: string
}
export type ResultFieldsWithoutSourceMapGenerator = {
/**
* Source map as (parsed) JSON, if `SourceMapGenerator` is passed.
*/
map: undefined
}
export type ResultFieldsWithSourceMapGenerator = {
/**
* Source map as (parsed) JSON, if `SourceMapGenerator` is not passed.
*/
map: Map
}
export type ResultFieldsMaybeSourceMapGenerator = {
/**
* Source map as (parsed) JSON, if `SourceMapGenerator` might be passed.
*/
map: Map | undefined
}
export type ResultWithoutSourceMapGenerator = BaseResultFields &
ResultFieldsWithoutSourceMapGenerator
export type ResultWithSourceMapGenerator = BaseResultFields &
ResultFieldsWithSourceMapGenerator
export type ResultMaybeSourceMapGenerator = BaseResultFields &
ResultFieldsMaybeSourceMapGenerator
export type Result = ResultMaybeSourceMapGenerator

118
node_modules/estree-util-to-js/lib/index.js generated vendored Normal file
View file

@ -0,0 +1,118 @@
/**
* @typedef {import('estree-jsx').Program} Program
* @typedef {typeof import('source-map').SourceMapGenerator} SourceMapGenerator
* @typedef {import('source-map').RawSourceMap} Map
* @typedef {import('./types.js').Handlers} Handlers
*/
/**
* @typedef BaseFields
* @property {Handlers | null | undefined} [handlers]
* Object mapping node types to functions handling the corresponding nodes.
*
* @typedef SourceMapFieldsWithoutSourceMapGenerator
* @property {null | undefined} [SourceMapGenerator]
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
* @property {null | undefined} [filePath]
* Path to input file.
* Only used in source map.
*
* @typedef SourceMapFieldsWithSourceMapGenerator
* @property {SourceMapGenerator} SourceMapGenerator
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
* @property {string | null | undefined} [filePath]
* Path to input file.
* Only used in source map.
*
* @typedef SourceMapFieldsMaybeSourceMapGenerator
* @property {SourceMapGenerator | null | undefined} SourceMapGenerator
* Generate a source map by passing a `SourceMapGenerator` from `source-map`
* in.
* This works if there is positional info on nodes.
* @property {string | null | undefined} [filePath]
* Path to input file.
* Only used in source map.
*
* @typedef {BaseFields & SourceMapFieldsWithoutSourceMapGenerator} OptionsWithoutSourceMapGenerator
* @typedef {BaseFields & SourceMapFieldsWithSourceMapGenerator} OptionsWithSourceMapGenerator
* @typedef {BaseFields & SourceMapFieldsMaybeSourceMapGenerator} OptionsWithMaybeMapGenerator
*
* @typedef {OptionsWithMaybeMapGenerator} Options
* Configuration (optional).
*
* @typedef BaseResultFields
* @property {string} value
* Serialized JavaScript.
*
* @typedef ResultFieldsWithoutSourceMapGenerator
* @property {undefined} map
* Source map as (parsed) JSON, if `SourceMapGenerator` is passed.
*
* @typedef ResultFieldsWithSourceMapGenerator
* @property {Map} map
* Source map as (parsed) JSON, if `SourceMapGenerator` is not passed.
*
* @typedef ResultFieldsMaybeSourceMapGenerator
* @property {Map | undefined} map
* Source map as (parsed) JSON, if `SourceMapGenerator` might be passed.
*
* @typedef {BaseResultFields & ResultFieldsWithoutSourceMapGenerator} ResultWithoutSourceMapGenerator
* @typedef {BaseResultFields & ResultFieldsWithSourceMapGenerator} ResultWithSourceMapGenerator
* @typedef {BaseResultFields & ResultFieldsMaybeSourceMapGenerator} ResultMaybeSourceMapGenerator
*
* @typedef {ResultMaybeSourceMapGenerator} Result
*/
// @ts-expect-error: `astring` has broken types.
import * as astring from 'astring'
/** @type {Handlers} */
const GENERATOR = astring.GENERATOR
/** @type {(node: Program, options: unknown) => string} */
const generate = astring.generate
/**
* Serialize an estree as JavaScript.
*
* @param tree
* Estree (esast).
* @param options
* Configuration (optional).
* @returns
* Result, optionally with source map.
*/
export const toJs =
/**
* @type {(
* ((value: Program, options: OptionsWithSourceMapGenerator) => ResultWithSourceMapGenerator) &
* ((value: Program, options: OptionsWithMaybeMapGenerator) => ResultMaybeSourceMapGenerator) &
* ((value: Program, options?: OptionsWithoutSourceMapGenerator | null | undefined) => ResultWithoutSourceMapGenerator)
* )}
*/
(
/**
* @param {Program} tree
* @param {Options | null | undefined} [options]
* @returns {Result}
*/
function (tree, options) {
const {SourceMapGenerator, filePath, handlers} = options || {}
const sourceMap = SourceMapGenerator
? new SourceMapGenerator({file: filePath || '<unknown>.js'})
: undefined
const value = generate(tree, {
comments: true,
generator: {...GENERATOR, ...handlers},
sourceMap
})
const map = sourceMap ? sourceMap.toJSON() : undefined
return {value, map}
}
)

265
node_modules/estree-util-to-js/lib/jsx.d.ts generated vendored Normal file
View file

@ -0,0 +1,265 @@
export namespace jsx {
export {JSXAttribute}
export {JSXClosingElement}
export {JSXClosingFragment}
export {JSXElement}
export {JSXEmptyExpression}
export {JSXExpressionContainer}
export {JSXFragment}
export {JSXIdentifier}
export {JSXMemberExpression}
export {JSXNamespacedName}
export {JSXOpeningElement}
export {JSXOpeningFragment}
export {JSXSpreadAttribute}
export {JSXText}
}
export type JSXAttribute = import('estree-jsx').JSXAttribute
export type JSXClosingElement = import('estree-jsx').JSXClosingElement
export type JSXClosingFragment = import('estree-jsx').JSXClosingFragment
export type JSXElement = import('estree-jsx').JSXElement
export type JSXExpressionContainer = import('estree-jsx').JSXExpressionContainer
export type JSXFragment = import('estree-jsx').JSXFragment
export type JSXIdentifier = import('estree-jsx').JSXIdentifier
export type JSXMemberExpression = import('estree-jsx').JSXMemberExpression
export type JSXNamespacedName = import('estree-jsx').JSXNamespacedName
export type JSXOpeningElement = import('estree-jsx').JSXOpeningElement
export type JSXOpeningFragment = import('estree-jsx').JSXOpeningFragment
export type JSXSpreadAttribute = import('estree-jsx').JSXSpreadAttribute
export type JSXText = import('estree-jsx').JSXText
export type Generator = import('./types.js').Generator
export type State = import('./types.js').State
/**
* `attr`
* `attr="something"`
* `attr={1}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXAttribute} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXAttribute(
this: import('./types.js').Generator,
node: JSXAttribute,
state: State
): void
/**
* `</div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXClosingElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXClosingElement(
this: import('./types.js').Generator,
node: JSXClosingElement,
state: State
): void
/**
* `</>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXClosingFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXClosingFragment(
this: import('./types.js').Generator,
node: JSXClosingFragment,
state: State
): void
/**
* `<div />`
* `<div></div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXElement(
this: import('./types.js').Generator,
node: JSXElement,
state: State
): void
/**
* `{}` (always in a `JSXExpressionContainer`, which does the curlies)
*
* @this {Generator}
* `astring` generator.
* @returns {void}
* Nothing.
*/
declare function JSXEmptyExpression(this: import('./types.js').Generator): void
/**
* `{expression}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXExpressionContainer} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXExpressionContainer(
this: import('./types.js').Generator,
node: JSXExpressionContainer,
state: State
): void
/**
* `<></>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXFragment(
this: import('./types.js').Generator,
node: JSXFragment,
state: State
): void
/**
* `div`
*
* @this {Generator}
* `astring` generator.
* @param {JSXIdentifier} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXIdentifier(
this: import('./types.js').Generator,
node: JSXIdentifier,
state: State
): void
/**
* `member.expression`
*
* @this {Generator}
* `astring` generator.
* @param {JSXMemberExpression} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXMemberExpression(
this: import('./types.js').Generator,
node: JSXMemberExpression,
state: State
): void
/**
* `ns:name`
*
* @this {Generator}
* `astring` generator.
* @param {JSXNamespacedName} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXNamespacedName(
this: import('./types.js').Generator,
node: JSXNamespacedName,
state: State
): void
/**
* `<div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXOpeningElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXOpeningElement(
this: import('./types.js').Generator,
node: JSXOpeningElement,
state: State
): void
/**
* `<>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXOpeningFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXOpeningFragment(
this: import('./types.js').Generator,
node: JSXOpeningFragment,
state: State
): void
/**
* `{...argument}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXSpreadAttribute} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXSpreadAttribute(
this: import('./types.js').Generator,
node: JSXSpreadAttribute,
state: State
): void
/**
* `!`
*
* @this {Generator}
* `astring` generator.
* @param {JSXText} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
declare function JSXText(
this: import('./types.js').Generator,
node: JSXText,
state: State
): void
export {}

360
node_modules/estree-util-to-js/lib/jsx.js generated vendored Normal file
View file

@ -0,0 +1,360 @@
/**
* @typedef {import('estree-jsx').JSXAttribute} JSXAttribute
* @typedef {import('estree-jsx').JSXClosingElement} JSXClosingElement
* @typedef {import('estree-jsx').JSXClosingFragment} JSXClosingFragment
* @typedef {import('estree-jsx').JSXElement} JSXElement
* @typedef {import('estree-jsx').JSXExpressionContainer} JSXExpressionContainer
* @typedef {import('estree-jsx').JSXFragment} JSXFragment
* @typedef {import('estree-jsx').JSXIdentifier} JSXIdentifier
* @typedef {import('estree-jsx').JSXMemberExpression} JSXMemberExpression
* @typedef {import('estree-jsx').JSXNamespacedName} JSXNamespacedName
* @typedef {import('estree-jsx').JSXOpeningElement} JSXOpeningElement
* @typedef {import('estree-jsx').JSXOpeningFragment} JSXOpeningFragment
* @typedef {import('estree-jsx').JSXSpreadAttribute} JSXSpreadAttribute
* @typedef {import('estree-jsx').JSXText} JSXText
* @typedef {import('./types.js').Generator} Generator
* @typedef {import('./types.js').State} State
*/
export const jsx = {
JSXAttribute,
JSXClosingElement,
JSXClosingFragment,
JSXElement,
JSXEmptyExpression,
JSXExpressionContainer,
JSXFragment,
JSXIdentifier,
JSXMemberExpression,
JSXNamespacedName,
JSXOpeningElement,
JSXOpeningFragment,
JSXSpreadAttribute,
JSXText
}
/**
* `attr`
* `attr="something"`
* `attr={1}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXAttribute} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXAttribute(node, state) {
this[node.name.type](node.name, state)
if (node.value !== undefined && node.value !== null) {
state.write('=')
// Encode double quotes in attribute values.
if (node.value.type === 'Literal') {
state.write(
'"' + encodeJsx(String(node.value.value)).replace(/"/g, '&quot;') + '"',
node
)
} else {
this[node.value.type](node.value, state)
}
}
}
/**
* `</div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXClosingElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXClosingElement(node, state) {
state.write('</')
this[node.name.type](node.name, state)
state.write('>')
}
/**
* `</>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXClosingFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXClosingFragment(node, state) {
state.write('</>', node)
}
/**
* `<div />`
* `<div></div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXElement(node, state) {
let index = -1
this[node.openingElement.type](node.openingElement, state)
if (node.children) {
while (++index < node.children.length) {
const child = node.children[index]
// Supported in types but not by Acorn.
/* c8 ignore next 3 */
if (child.type === 'JSXSpreadChild') {
throw new Error('JSX spread children are not supported')
}
this[child.type](child, state)
}
}
if (node.closingElement) {
this[node.closingElement.type](node.closingElement, state)
}
}
/**
* `{}` (always in a `JSXExpressionContainer`, which does the curlies)
*
* @this {Generator}
* `astring` generator.
* @returns {void}
* Nothing.
*/
function JSXEmptyExpression() {}
/**
* `{expression}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXExpressionContainer} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXExpressionContainer(node, state) {
state.write('{')
this[node.expression.type](node.expression, state)
state.write('}')
}
/**
* `<></>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXFragment(node, state) {
let index = -1
this[node.openingFragment.type](node.openingFragment, state)
if (node.children) {
while (++index < node.children.length) {
const child = node.children[index]
// Supported in types but not by Acorn.
/* c8 ignore next 3 */
if (child.type === 'JSXSpreadChild') {
throw new Error('JSX spread children are not supported')
}
this[child.type](child, state)
}
}
this[node.closingFragment.type](node.closingFragment, state)
}
/**
* `div`
*
* @this {Generator}
* `astring` generator.
* @param {JSXIdentifier} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXIdentifier(node, state) {
state.write(node.name, node)
}
/**
* `member.expression`
*
* @this {Generator}
* `astring` generator.
* @param {JSXMemberExpression} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXMemberExpression(node, state) {
this[node.object.type](node.object, state)
state.write('.')
this[node.property.type](node.property, state)
}
/**
* `ns:name`
*
* @this {Generator}
* `astring` generator.
* @param {JSXNamespacedName} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXNamespacedName(node, state) {
this[node.namespace.type](node.namespace, state)
state.write(':')
this[node.name.type](node.name, state)
}
/**
* `<div>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXOpeningElement} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXOpeningElement(node, state) {
let index = -1
state.write('<')
this[node.name.type](node.name, state)
if (node.attributes) {
while (++index < node.attributes.length) {
state.write(' ')
this[node.attributes[index].type](node.attributes[index], state)
}
}
state.write(node.selfClosing ? ' />' : '>')
}
/**
* `<>`
*
* @this {Generator}
* `astring` generator.
* @param {JSXOpeningFragment} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXOpeningFragment(node, state) {
state.write('<>', node)
}
/**
* `{...argument}`
*
* @this {Generator}
* `astring` generator.
* @param {JSXSpreadAttribute} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXSpreadAttribute(node, state) {
state.write('{')
// eslint-disable-next-line new-cap
this.SpreadElement(node, state)
state.write('}')
}
/**
* `!`
*
* @this {Generator}
* `astring` generator.
* @param {JSXText} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
function JSXText(node, state) {
state.write(
encodeJsx(node.value).replace(/[<>{}]/g, ($0) =>
$0 === '<'
? '&lt;'
: $0 === '>'
? '&gt;'
: $0 === '{'
? '&#123;'
: '&#125;'
),
node
)
}
/**
* Make sure that character references dont pop up.
*
* For example, the text `&copy;` should stay that way, and not turn into `©`.
* We could encode all `&` (easy but verbose) or look for actual valid
* references (complex but cleanest output).
* Looking for the 2nd character gives us a middle ground.
* The `#` is for (decimal and hexadecimal) numeric references, the letters
* are for the named references.
*
* @param {string} value
* Value to encode.
* @returns {string}
* Encoded value.
*/
function encodeJsx(value) {
return value.replace(/&(?=[#a-z])/gi, '&amp;')
}

23
node_modules/estree-util-to-js/lib/types.d.ts generated vendored Normal file
View file

@ -0,0 +1,23 @@
export type Node = import('estree-jsx').Node
export type Mapping = import('source-map').Mapping
export type State = {
output: string
write: (code: string, node?: Node) => void
writeComments: boolean
indent: string
lineEnd: string
indentLevel: number
line?: number | undefined
column?: number | undefined
lineEndSize?: number | undefined
mapping?: Mapping | undefined
}
export type Generator = Record<Node['type'], Handler>
/**
* Handlers for different nodes.
*/
export type Handlers = Partial<Generator>
/**
* Handle a particular node.
*/
export type Handler = (this: Generator, node: any, state: State) => void

40
node_modules/estree-util-to-js/lib/types.js generated vendored Normal file
View file

@ -0,0 +1,40 @@
/**
* @typedef {import('estree-jsx').Node} Node
* @typedef {import('source-map').Mapping} Mapping
*/
// To do: `astring` types are broken.
// Either `import('astring').State` if everything is fixed, or:
// `Omit<import('astring').State, 'write'> & {write: ((code: string, node?: Node) => void)}`
/**
* @typedef State
* @property {string} output
* @property {(code: string, node?: Node) => void} write
* @property {boolean} writeComments
* @property {string} indent
* @property {string} lineEnd
* @property {number} indentLevel
* @property {number | undefined} [line]
* @property {number | undefined} [column]
* @property {number | undefined} [lineEndSize]
* @property {Mapping | undefined} [mapping]
*/
/**
* @typedef {Record<Node['type'], Handler>} Generator
* @typedef {Partial<Generator>} Handlers
* Handlers for different nodes.
*
* @callback Handler
* Handle a particular node.
* @param {Generator} this
* `astring` generator.
* @param {any} node
* Node to serialize.
* @param {State} state
* Info passed around.
* @returns {void}
* Nothing.
*/
export {}

22
node_modules/estree-util-to-js/license generated vendored Normal file
View file

@ -0,0 +1,22 @@
(The MIT License)
Copyright (c) 2022 Titus Wormer <tituswormer@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -0,0 +1 @@
../../../astring/bin/astring

86
node_modules/estree-util-to-js/package.json generated vendored Normal file
View file

@ -0,0 +1,86 @@
{
"name": "estree-util-to-js",
"version": "1.2.0",
"description": "estree (and esast) utility to serialize to JavaScript",
"license": "MIT",
"keywords": [
"unist",
"estree",
"estree-util",
"esast",
"esast-util",
"util",
"utility",
"js",
"serialize",
"stringify",
"tostring",
"astring"
],
"repository": "syntax-tree/estree-util-to-js",
"bugs": "https://github.com/syntax-tree/estree-util-to-js/issues",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
},
"author": "Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)",
"contributors": [
"Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)"
],
"sideEffects": false,
"type": "module",
"main": "index.js",
"types": "index.d.ts",
"files": [
"lib/",
"index.d.ts",
"index.js"
],
"dependencies": {
"@types/estree-jsx": "^1.0.0",
"astring": "^1.8.0",
"source-map": "^0.7.0"
},
"devDependencies": {
"@types/node": "^18.0.0",
"c8": "^7.0.0",
"prettier": "^2.0.0",
"remark-cli": "^11.0.0",
"remark-preset-wooorm": "^9.0.0",
"type-coverage": "^2.0.0",
"typescript": "^4.0.0",
"xo": "^0.53.0"
},
"scripts": {
"prepack": "npm run build && npm run format",
"build": "tsc --build --clean && tsc --build && type-coverage",
"format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix",
"test-api": "node --conditions development test/index.js",
"test-coverage": "c8 --check-coverage --100 --reporter lcov npm run test-api",
"test": "npm run build && npm run format && npm run test-coverage"
},
"prettier": {
"tabWidth": 2,
"useTabs": false,
"singleQuote": true,
"bracketSpacing": false,
"semi": false,
"trailingComma": "none"
},
"xo": {
"prettier": true
},
"remarkConfig": {
"plugins": [
"preset-wooorm"
]
},
"typeCoverage": {
"atLeast": 100,
"detail": true,
"strict": true,
"ignoreFiles": [
"lib/types.d.ts"
]
}
}

420
node_modules/estree-util-to-js/readme.md generated vendored Normal file
View file

@ -0,0 +1,420 @@
# estree-util-to-js
[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]
[![Sponsors][sponsors-badge]][collective]
[![Backers][backers-badge]][collective]
[![Chat][chat-badge]][chat]
[estree][] (and [esast][]) utility to serialize estrees as JavaScript.
## Contents
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`toJs(tree[, options])`](#tojstree-options)
* [`jsx`](#jsx)
* [`Handler`](#handler)
* [`Handlers`](#handlers)
* [`Map`](#map)
* [`Options`](#options)
* [`Result`](#result)
* [`State`](#state)
* [Examples](#examples)
* [Example: source maps](#example-source-maps)
* [Example: comments](#example-comments)
* [Example: JSX](#example-jsx)
* [Types](#types)
* [Compatibility](#compatibility)
* [Contribute](#contribute)
* [License](#license)
## What is this?
This package is a utility that turns an estree syntax tree into a string of
JavaScript.
## When should I use this?
You can use this utility when you want to get the serialized JavaScript that is
represented by the syntax tree, either because youre done with the syntax tree,
or because youre integrating with another tool that does not support syntax
trees.
This utility is particularly useful when integrating with other unified tools,
such as unist and vfile.
The utility [`esast-util-from-js`][esast-util-from-js] does the inverse of this
utility.
It turns JS into esast.
## Install
This package is [ESM only][esm].
In Node.js (version 14.14+ and 16.0+), install with [npm][]:
```sh
npm install estree-util-to-js
```
In Deno with [`esm.sh`][esmsh]:
```js
import {toJs} from 'https://esm.sh/estree-util-to-js@1'
```
In browsers with [`esm.sh`][esmsh]:
```html
<script type="module">
import {toJs} from 'https://esm.sh/estree-util-to-js@1?bundle'
</script>
```
## Use
```js
import fs from 'node:fs/promises'
import {parse} from 'acorn'
import {toJs} from 'estree-util-to-js'
const file = String(await fs.readFile('index.js'))
const tree = parse(file, {ecmaVersion: 2022, sourceType: 'module', locations: true})
// @ts-expect-error: acorn is funky but it works fine.
console.log(toJs(tree))
```
Yields:
```js
{
value: "export {toJs} from './lib/index.js';\nexport {jsx} from './lib/jsx.js';\n",
map: undefined
}
```
## API
This package exports the identifiers [`jsx`][api-jsx] and [`toJs`][api-to-js].
There is no default export.
### `toJs(tree[, options])`
Serialize an estree as JavaScript.
###### Parameters
* `tree` ([`Program`][program])
— estree
* `options` ([`Options`][api-options])
— configuration
###### Returns
Result, optionally with source map ([`Result`][api-result]).
### `jsx`
Map of handlers to handle the nodes of JSX extensions in JavaScript
([`Handlers`][api-handlers]).
### `Handler`
Handle a particular node (TypeScript type).
###### Parameters
* `this` (`Generator`)
`astring` generator
* `node` ([`Node`][node])
— node to serialize
* `state` ([`State`][api-state])
— info passed around
###### Returns
Nothing (`void`).
### `Handlers`
Handlers of nodes (TypeScript type).
###### Type
```ts
type Handlers = Partial<Record<Node['type'], Handler>>
```
### `Map`
Raw source map from `source-map` (TypeScript type).
### `Options`
Configuration (TypeScript type).
###### Fields
* `SourceMapGenerator` ([`SourceMapGenerator`][source-map])
— generate a source map with this class
* `filePath` (`string`)
— path to original input file
* `handlers` ([`Handlers`][api-handlers])
— extra handlers
### `Result`
Result (TypeScript type).
###### Fields
* `value` (`string`)
— serialized JavaScript
* `map` ([`Map`][api-map] or `undefined`)
— source map as (parsed) JSON
### `State`
State from `astring` (TypeScript type).
## Examples
### Example: source maps
Source maps are supported when passing the `SourceMapGenerator` class from
[`source-map`][source-map].
You should also pass `filePath`.
Modified example from § Use above:
```diff
import fs from 'node:fs/promises'
import {parse} from 'acorn'
+import {SourceMapGenerator} from 'source-map'
import {toJs} from 'estree-util-to-js'
-const file = String(await fs.readFile('index.js'))
+const filePath = 'index.js'
+const file = String(await fs.readFile(filePath))
const tree = parse(file, {
ecmaVersion: 2022,
@@ -11,4 +13,4 @@ const tree = parse(file, {
})
// @ts-expect-error: acorn is funky but it works fine.
-console.log(toJs(tree))
+console.log(toJs(tree, {filePath, SourceMapGenerator}))
```
Yields:
```js
{
value: "export {toJs} from './lib/index.js';\nexport {jsx} from './lib/jsx.js';\n",
map: {
version: 3,
sources: [ 'index.js' ],
names: [],
mappings: 'QAOQ,WAAW;QACX,UAAU',
file: 'index.js'
}
}
```
### Example: comments
To get comments to work, they have to be inside the tree.
This is not done by Acorn.
[`estree-util-attach-comments`][estree-util-attach-comments] can do that.
Modified example from § Use above:
```diff
import fs from 'node:fs/promises'
import {parse} from 'acorn'
+import {attachComments} from 'estree-util-attach-comments'
import {toJs} from 'estree-util-to-js'
const file = String(await fs.readFile('index.js'))
+/** @type {Array<import('estree-jsx').Comment>} */
+const comments = []
const tree = parse(file, {
ecmaVersion: 2022,
sourceType: 'module',
- locations: true
+ locations: true,
+ // @ts-expect-error: acorn is funky these comments are fine.
+ onComment: comments
})
+attachComments(tree, comments)
// @ts-expect-error: acorn is funky but it works fine.
console.log(toJs(tree))
```
Yields:
```js
{
value: '/**\n' +
"* @typedef {import('./lib/index.js').Options} Options\n" +
"* @typedef {import('./lib/types.js').Handler} Handler\n" +
"* @typedef {import('./lib/types.js').Handlers} Handlers\n" +
"* @typedef {import('./lib/types.js').State} State\n" +
'*/\n' +
"export {toJs} from './lib/index.js';\n" +
"export {jsx} from './lib/jsx.js';\n",
map: undefined
}
```
### Example: JSX
To get JSX to work, handlers need to be registered.
This is not done by default, but they are exported as `jsx` and can be passed.
Modified example from § Use above:
```diff
import fs from 'node:fs/promises'
-import {parse} from 'acorn'
-import {toJs} from 'estree-util-to-js'
+import {Parser} from 'acorn'
+import acornJsx from 'acorn-jsx'
+import {toJs, jsx} from 'estree-util-to-js'
-const file = String(await fs.readFile('index.js'))
+const file = '<>{1 + 1}</>'
-const tree = parse(file, {
+const tree = Parser.extend(acornJsx()).parse(file, {
ecmaVersion: 2022,
sourceType: 'module',
locations: true
})
// @ts-expect-error: acorn is funky but it works fine.
-console.log(toJs(tree))
+console.log(toJs(tree, {handlers: jsx}))
```
Yields:
```js
{ value: '<>{1 + 1}</>;\n', map: undefined }
```
## Types
This package is fully typed with [TypeScript][].
It exports the additional types [`Handler`][api-handler],
[`Handlers`][api-handlers],
[`Map`][api-map],
[`Options`][api-options],
[`Result`][api-result], and
[`State`][api-state].
## Compatibility
Projects maintained by the unified collective are compatible with all maintained
versions of Node.js.
As of now, that is Node.js 14.14+, 16.0+, and 18.0+.
Our projects sometimes work with older versions, but this is not guaranteed.
## Contribute
See [`contributing.md`][contributing] in [`syntax-tree/.github`][health] for
ways to get started.
See [`support.md`][support] for ways to get help.
This project has a [code of conduct][coc].
By interacting with this repository, organization, or community you agree to
abide by its terms.
## License
[MIT][license] © [Titus Wormer][author]
<!-- Definitions -->
[build-badge]: https://github.com/syntax-tree/estree-util-to-js/workflows/main/badge.svg
[build]: https://github.com/syntax-tree/estree-util-to-js/actions
[coverage-badge]: https://img.shields.io/codecov/c/github/syntax-tree/estree-util-to-js.svg
[coverage]: https://codecov.io/github/syntax-tree/estree-util-to-js
[downloads-badge]: https://img.shields.io/npm/dm/estree-util-to-js.svg
[downloads]: https://www.npmjs.com/package/estree-util-to-js
[size-badge]: https://img.shields.io/bundlephobia/minzip/estree-util-to-js.svg
[size]: https://bundlephobia.com/result?p=estree-util-to-js
[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[backers-badge]: https://opencollective.com/unified/backers/badge.svg
[collective]: https://opencollective.com/unified
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[chat]: https://github.com/syntax-tree/unist/discussions
[npm]: https://docs.npmjs.com/cli/install
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[esmsh]: https://esm.sh
[typescript]: https://www.typescriptlang.org
[license]: license
[author]: https://wooorm.com
[health]: https://github.com/syntax-tree/.github
[contributing]: https://github.com/syntax-tree/.github/blob/main/contributing.md
[support]: https://github.com/syntax-tree/.github/blob/main/support.md
[coc]: https://github.com/syntax-tree/.github/blob/main/code-of-conduct.md
[esast]: https://github.com/syntax-tree/esast
[esast-util-from-js]: https://github.com/syntax-tree/esast-util-from-js
[estree]: https://github.com/estree/estree
[estree-util-attach-comments]: https://github.com/syntax-tree/estree-util-attach-comments
[program]: https://github.com/estree/estree/blob/master/es2015.md#programs
[node]: https://github.com/estree/estree/blob/master/es5.md#node-objects
[source-map]: https://github.com/mozilla/source-map
[api-jsx]: #jsx
[api-to-js]: #tojstree-options
[api-handler]: #handler
[api-handlers]: #handlers
[api-map]: #map
[api-options]: #options
[api-state]: #state
[api-result]: #result