
Research
/Security News
Mini Shai-Hulud Campaign Hits Red Hat Cloud Services npm Packages
A mini Shai-Hulud campaign compromised Red Hat Cloud Services npm packages to steal developer and CI/CD secrets during installation.
@benrbray/mdast-util-cite
Advanced tools
Converts a `micromark` token stream into an `mdast` syntax tree.
mdast-util-citeExtension for mdast-util-from-markdown and
mdast-util-to-markdown to support pandoc-style citations. Converts the token stream produced by micromark-extension-cite into an abstract syntax tree.
Note that this extension only parses the input -- it is up to you to assign meaning to these citations by looking up each key in a .bibtex file or other tagged citation database.
Using remark? You probably shouldn’t use this package directly, but instead use remark-cite. See micromark-extension-cite for a full description of the supported syntax.
Install @benrbray/mdast-util-cite on npm.
npm install @benrbray/mdast-util-cite
import fromMarkdown from 'mdast-util-from-markdown'
import { citeSyntax } from 'micromark-extension-cite'
import { citeFromMarkdown } from 'mdast-util-cite'
let ast = fromMarkdown('[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]', {
extensions: [citeSyntax()],
mdastExtensions: [citeFromMarkdown]
})
The corresponding node in the abstract syntax tree has the form below, where:
value contains the original markdown sourcedata.altSyntax will be true if the citation uses the alternate syntaxdata.citeItems is a list of items cited by the node
key and optionally prefix and suffix strings-, item.suppressAuthor will be true{
"type": "cite",
"value": "[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]",
"data": {
"citeItems": [
{
"prefix": "see ",
"key": "wadler1989",
"suffix": ", sec. 1.3"
},{
"prefix": " and ",
"suppressAuthor": true,
"key": "hughes1990",
"suffix": ", pp.4"
}
]
}
}
Taking the ast from the previous example,
import fromMarkdown from 'mdast-util-from-markdown'
import { citeToMarkdown } from 'mdast-util-cite'
const defaultOptions = {
standardizeAltSyntax: false,
enableAuthorSuppression: true,
useNodeValue: false,
};
let markdownString = toMarkdown(ast, {
extensions: [citeToMarkdown(defaultOptions)]
}).trim();
The result will be:
[see @wadler1989, sec. 1.3; and -@hughes1990, pp.4]
The citeToMarkdown extension has the following options:
options.standardizeAltSyntax (default false): When true, nodes with data.altSyntax = true will be rendered in standard pandoc syntax [@cite] rather than the alternative syntax @[cite].
options.enableAuthorSuppression (default true): When false, will not produce author suppression hyphens - in the output markdown, even if they are present in the AST.
options.useNodeValue (default false): When true, every citation node serializes to its node.value, rather than being reconstructed from its data.citeItems list. When active, this setting overrides all other options.
FAQs
Converts a `micromark` token stream into an `mdast` syntax tree.
The npm package @benrbray/mdast-util-cite receives a total of 46 weekly downloads. As such, @benrbray/mdast-util-cite popularity was classified as not popular.
We found that @benrbray/mdast-util-cite demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
A mini Shai-Hulud campaign compromised Red Hat Cloud Services npm packages to steal developer and CI/CD secrets during installation.

Research
/Security News
The North Korean malware loader hides in a Packagist-listed package and its GitHub branch to fetch and execute remote code in a likely Contagious Interview-style lure.

Security News
The Rust project is moving toward formal rules on LLM use in contributions after months of internal debate over maintainer burden, code quality, and contributor experience.