Files
coopgo/node_modules/rehype-remark/index.js
sgauthier 6e64e138e2
All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s
planning
2024-10-14 09:15:30 +02:00

121 lines
3.5 KiB
JavaScript

'use strict'
/**
* @typedef {import('unified').Processor} Processor
* @typedef {import('unified').RunCallback} RunCallback
* @typedef {import('unified').Transformer} Transformer
* @typedef {import('unist').Node} Node
*/
var hast2mdast = require('hast-util-to-mdast')
/**
* Attacher.
*
* If a destination is given, runs the destination with the new mdast
* tree (bridge-mode). Without destination, returns the mdast tree: further
* plugins run on that tree (mutate-mode).
*
* @param destination Optional unified processor.
* @param options Options passed to `hast-util-to-mdast`.
*/
module.exports =
/**
* @type {import('unified').Plugin<[Options?]|[Processor, Options?]>}
*/
(
/**
* @param {Processor|Options} [destination]
* @param {Options} [options]
*/
function (destination, options) {
/** @type {Options|undefined} */
var settings
/** @type {Processor|undefined} */
var processor
if (typeof destination === 'function') {
processor = destination
settings = options || {}
} else {
settings = destination || {}
}
if (settings.document === undefined || settings.document === null) {
settings = Object.assign({}, settings, {document: true})
}
return processor ? bridge(processor, settings) : mutate(settings)
}
)
/**
* Bridge-mode.
* Runs the destination with the new mdast tree.
* @param {Processor} destination
* @param {Options} [options]
* @returns {Transformer}
*/
function bridge(destination, options) {
return transformer
/** @type {Transformer} */
function transformer(node, file, next) {
destination.run(hast2mdast(node, options), file, done)
/** @type {RunCallback} */
function done(err) {
// @ts-expect-error: `unified` should accept 1 arg for next.
// See: <https://github.com/unifiedjs/unified/pull/141#issuecomment-871239574>
next(err)
}
}
}
/**
* Mutate-mode.
* Further transformers run on the mdast tree.
*
* @param {Options} [options]
* @returns {Transformer}
*/
function mutate(options) {
return transformer
/** @param {Node} node */
function transformer(node) {
return hast2mdast(node, options)
}
}
// Remove the following JSDoc block when upgrading hast-util-to-mdast to version 8.
// Import these types from hast-util-to-mdast when version 8 released.
/**
* @typedef {import('mdast').Content} MdastNode
* @typedef {import('unist').Parent} Parent
* @typedef {import('hast').Element} Element
*
* @typedef Context
* @property {Object.<string, Element>} nodeById
* @property {boolean} baseFound
* @property {string|null} frozenBaseUrl
* @property {boolean} wrapText
* @property {number} qNesting
* @property {Object.<string, Handle>} handlers
* @property {boolean|undefined} document
* @property {string} checked
* @property {string} unchecked
* @property {Array.<string>} quotes
*
* @typedef {(node: Node, type: string, props?: Properties, children?: string|Array.<MdastNode>) => MdastNode} HWithProps
* @typedef {(node: Node, type: string, children?: string|Array.<MdastNode>) => MdastNode} HWithoutProps
* @typedef {Record<string, unknown>} Properties*
* @typedef {HWithProps & HWithoutProps & Context} H
* @typedef {(h: H, node: any, parent?: Parent) => MdastNode|Array.<MdastNode>|void} Handle
*
* @typedef Options
* @property {Object.<string, Handle>} [handlers]
* @property {boolean} [document]
* @property {boolean} [newlines=false]
* @property {string} [checked='[x]']
* @property {string} [unchecked='[ ]']
* @property {Array.<string>} [quotes=['"']]
*/