Socket
Socket
Sign inDemoInstall

micromark-util-events-to-acorn

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

micromark-util-events-to-acorn - npm Package Compare versions

Comparing version 1.0.6 to 1.1.0

8

dev/index.d.ts
/**
* Parse a list of micromark events with acorn.
*
* @param {Event[]} events
* @param {Array<Event>} events
* @param {Options} options

@@ -9,3 +9,3 @@ * @returns {{estree: Program|undefined, error: Error|undefined, swallow: boolean}}

export function eventsToAcorn(
events: import('micromark-util-types').Event[],
events: Array<import('micromark-util-types').Event>,
options: Options

@@ -21,4 +21,6 @@ ): {

export type Comment = import('acorn').Comment
export type Node = import('acorn').Node
export type Token = import('acorn').Token
export type AcornNode = import('acorn').Node
export type Program = import('estree').Program
export type EstreeNode = import('estree-util-visit').Node
export type Acorn = {

@@ -25,0 +27,0 @@ parse: typeof import('acorn').parse

@@ -6,13 +6,10 @@ /**

* @typedef {import('acorn').Comment} Comment
* @typedef {import('acorn').Node} Node
* @typedef {import('acorn').Token} Token
* @typedef {import('acorn').Node} AcornNode
* @typedef {import('estree').Program} Program
*/
/**
* @typedef {import('estree-util-visit').Node} EstreeNode
*
* @typedef {{parse: import('acorn').parse, parseExpressionAt: import('acorn').parseExpressionAt}} Acorn
* @typedef {Error & {raisedAt: number, pos: number, loc: {line: number, column: number}}} AcornError
*
* @typedef {Error & {raisedAt: number, pos: number, loc: {line: number, column: number}}} AcornError
*/
/**
* @typedef Options

@@ -36,15 +33,22 @@ * @property {Acorn} acorn

*
* @param {Event[]} events
* @param {Array<Event>} events
* @param {Options} options
* @returns {{estree: Program|undefined, error: Error|undefined, swallow: boolean}}
*/
// eslint-disable-next-line complexity
export function eventsToAcorn(events, options) {
const {prefix = '', suffix = ''} = options
/** @type {Array.<Comment>} */
const acornOptions = Object.assign({}, options.acornOptions)
/** @type {Array<Comment>} */
const comments = []
const acornConfig = Object.assign({}, options.acornOptions, {
/** @type {Array<Token>} */
const tokens = []
const onComment = acornOptions.onComment
const onToken = acornOptions.onToken
const acornConfig = Object.assign({}, acornOptions, {
onComment: comments,
onToken: onToken ? tokens : undefined,
preserveParens: true
})
/** @type {Array.<string>} */
/** @type {Array<string>} */
const chunks = []

@@ -55,3 +59,3 @@ /** @type {Record<string, Point>} */

let swallow = false
/** @type {Node|undefined} */
/** @type {AcornNode|undefined} */
let estree

@@ -146,3 +150,5 @@ /** @type {Error|undefined} */

visit(estree, (esnode, field, index, parents) => {
let context = /** @type {Node|Node[]} */ (parents[parents.length - 1])
let context = /** @type {AcornNode|Array<AcornNode>} */ (
parents[parents.length - 1]
)
/** @type {string|number|null} */

@@ -164,20 +170,34 @@ let prop = field

assert('start' in esnode, 'expected `start` in node from acorn')
assert('end' in esnode, 'expected `end` in node from acorn')
// @ts-expect-error: acorn has positions.
const pointStart = parseOffsetToUnistPoint(esnode.start)
// @ts-expect-error: acorn has positions.
const pointEnd = parseOffsetToUnistPoint(esnode.end)
// @ts-expect-error: acorn has positions.
esnode.start = pointStart.offset
// @ts-expect-error: acorn has positions.
esnode.end = pointEnd.offset
// @ts-expect-error: acorn has positions.
esnode.loc = {
start: {line: pointStart.line, column: pointStart.column - 1},
end: {line: pointEnd.line, column: pointEnd.column - 1}
fixPosition(esnode)
})
// Comment positions are fixed by `visit` because they’re in the tree.
if (Array.isArray(onComment)) {
onComment.push(...comments)
} else if (typeof onComment === 'function') {
for (const comment of comments) {
assert(comment.loc, 'expected `loc` on comment')
onComment(
comment.type === 'Block',
comment.value,
comment.start,
comment.end,
comment.loc.start,
comment.loc.end
)
}
// @ts-expect-error: acorn has positions.
esnode.range = [esnode.start, esnode.end]
})
}
for (const token of tokens) {
fixPosition(token)
if (Array.isArray(onToken)) {
onToken.push(token)
} else {
// `tokens` are not added if `onToken` is not defined, so it must be a
// function.
assert(typeof onToken === 'function', 'expected function')
onToken(token)
}
}
}

@@ -189,4 +209,38 @@

/**
* Update the position of a node.
*
* @param {AcornNode|EstreeNode|Token} nodeOrToken
* @returns {void}
*/
function fixPosition(nodeOrToken) {
assert(
'start' in nodeOrToken,
'expected `start` in node or token from acorn'
)
assert('end' in nodeOrToken, 'expected `end` in node or token from acorn')
const pointStart = parseOffsetToUnistPoint(nodeOrToken.start)
const pointEnd = parseOffsetToUnistPoint(nodeOrToken.end)
nodeOrToken.start = pointStart.offset
nodeOrToken.end = pointEnd.offset
nodeOrToken.loc = {
start: {
line: pointStart.line,
column: pointStart.column - 1,
offset: pointStart.offset
},
end: {
line: pointEnd.line,
column: pointEnd.column - 1,
offset: pointEnd.offset
}
}
nodeOrToken.range = [nodeOrToken.start, nodeOrToken.end]
}
/**
* Turn an arbitrary offset into the parsed value, into a point in the source
* value.
*
* @param {number} acornOffset
* @returs {Point}
* @returns {Point}
*/

@@ -211,3 +265,3 @@ function parseOffsetToUnistPoint(acornOffset) {

const offset = lines[line].offset + (pointInSource.column - 1)
return {line, column, offset}
return /** @type {Point} */ ({line, column, offset})
}

@@ -214,0 +268,0 @@

/**
* Parse a list of micromark events with acorn.
*
* @param {Event[]} events
* @param {Array<Event>} events
* @param {Options} options

@@ -9,3 +9,3 @@ * @returns {{estree: Program|undefined, error: Error|undefined, swallow: boolean}}

export function eventsToAcorn(
events: import('micromark-util-types').Event[],
events: Array<import('micromark-util-types').Event>,
options: Options

@@ -21,4 +21,6 @@ ): {

export type Comment = import('acorn').Comment
export type Node = import('acorn').Node
export type Token = import('acorn').Token
export type AcornNode = import('acorn').Node
export type Program = import('estree').Program
export type EstreeNode = import('estree-util-visit').Node
export type Acorn = {

@@ -25,0 +27,0 @@ parse: typeof import('acorn').parse

@@ -6,13 +6,10 @@ /**

* @typedef {import('acorn').Comment} Comment
* @typedef {import('acorn').Node} Node
* @typedef {import('acorn').Token} Token
* @typedef {import('acorn').Node} AcornNode
* @typedef {import('estree').Program} Program
*/
/**
* @typedef {import('estree-util-visit').Node} EstreeNode
*
* @typedef {{parse: import('acorn').parse, parseExpressionAt: import('acorn').parseExpressionAt}} Acorn
* @typedef {Error & {raisedAt: number, pos: number, loc: {line: number, column: number}}} AcornError
*
* @typedef {Error & {raisedAt: number, pos: number, loc: {line: number, column: number}}} AcornError
*/
/**
* @typedef Options

@@ -33,17 +30,25 @@ * @property {Acorn} acorn

*
* @param {Event[]} events
* @param {Array<Event>} events
* @param {Options} options
* @returns {{estree: Program|undefined, error: Error|undefined, swallow: boolean}}
*/
// eslint-disable-next-line complexity
export function eventsToAcorn(events, options) {
const {prefix = '', suffix = ''} = options
/** @type {Array.<Comment>} */
const acornOptions = Object.assign({}, options.acornOptions)
/** @type {Array<Comment>} */
const comments = []
const acornConfig = Object.assign({}, options.acornOptions, {
/** @type {Array<Token>} */
const tokens = []
const onComment = acornOptions.onComment
const onToken = acornOptions.onToken
const acornConfig = Object.assign({}, acornOptions, {
onComment: comments,
onToken: onToken ? tokens : undefined,
preserveParens: true
})
/** @type {Array.<string>} */
/** @type {Array<string>} */

@@ -56,3 +61,3 @@ const chunks = []

let swallow = false
/** @type {Node|undefined} */
/** @type {AcornNode|undefined} */

@@ -155,3 +160,3 @@ let estree

let context =
/** @type {Node|Node[]} */
/** @type {AcornNode|Array<AcornNode>} */
parents[parents.length - 1]

@@ -173,24 +178,31 @@ /** @type {string|number|null} */

// @ts-expect-error: acorn has positions.
const pointStart = parseOffsetToUnistPoint(esnode.start) // @ts-expect-error: acorn has positions.
fixPosition(esnode)
}) // Comment positions are fixed by `visit` because they’re in the tree.
const pointEnd = parseOffsetToUnistPoint(esnode.end) // @ts-expect-error: acorn has positions.
if (Array.isArray(onComment)) {
onComment.push(...comments)
} else if (typeof onComment === 'function') {
for (const comment of comments) {
onComment(
comment.type === 'Block',
comment.value,
comment.start,
comment.end,
comment.loc.start,
comment.loc.end
)
}
}
esnode.start = pointStart.offset // @ts-expect-error: acorn has positions.
for (const token of tokens) {
fixPosition(token)
esnode.end = pointEnd.offset // @ts-expect-error: acorn has positions.
esnode.loc = {
start: {
line: pointStart.line,
column: pointStart.column - 1
},
end: {
line: pointEnd.line,
column: pointEnd.column - 1
}
} // @ts-expect-error: acorn has positions.
esnode.range = [esnode.start, esnode.end]
})
if (Array.isArray(onToken)) {
onToken.push(token)
} else {
// `tokens` are not added if `onToken` is not defined, so it must be a
// function.
onToken(token)
}
}
} // @ts-expect-error: It’s a program now.

@@ -204,4 +216,33 @@

/**
* Update the position of a node.
*
* @param {AcornNode|EstreeNode|Token} nodeOrToken
* @returns {void}
*/
function fixPosition(nodeOrToken) {
const pointStart = parseOffsetToUnistPoint(nodeOrToken.start)
const pointEnd = parseOffsetToUnistPoint(nodeOrToken.end)
nodeOrToken.start = pointStart.offset
nodeOrToken.end = pointEnd.offset
nodeOrToken.loc = {
start: {
line: pointStart.line,
column: pointStart.column - 1,
offset: pointStart.offset
},
end: {
line: pointEnd.line,
column: pointEnd.column - 1,
offset: pointEnd.offset
}
}
nodeOrToken.range = [nodeOrToken.start, nodeOrToken.end]
}
/**
* Turn an arbitrary offset into the parsed value, into a point in the source
* value.
*
* @param {number} acornOffset
* @returs {Point}
* @returns {Point}
*/

@@ -222,7 +263,10 @@

const offset = lines[line].offset + (pointInSource.column - 1)
return {
line,
column,
offset
}
return (
/** @type {Point} */
{
line,
column,
offset
}
)
}

@@ -229,0 +273,0 @@ /** @param {Point} point */

{
"name": "micromark-util-events-to-acorn",
"version": "1.0.6",
"version": "1.1.0",
"description": "micromark utility to try and parse events w/ acorn",

@@ -5,0 +5,0 @@ "license": "MIT",

@@ -82,3 +82,3 @@ # micromark-util-events-to-acorn

* `events` (`Array.<Event>`) — Events
* `events` (`Array<Event>`) — Events
* `options.acorn` (`Acorn`, required) — Object with `acorn.parse` and

@@ -85,0 +85,0 @@ `acorn.parseExpressionAt`

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc