mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-08 19:34:56 +02:00
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
/**
|
|
* @typedef {import('estree-jsx').Program} Program
|
|
* @typedef {import('unified').Processor<undefined, undefined, undefined, Program, string>} Processor
|
|
* @typedef {import('vfile').VFile} VFile
|
|
*
|
|
* @typedef {import('../core.js').ProcessorOptions} ProcessorOptions
|
|
*/
|
|
|
|
import {jsx, toJs} from 'estree-util-to-js'
|
|
|
|
/**
|
|
* Serialize an esast (estree) program to JavaScript.
|
|
*
|
|
* @type {import('unified').Plugin<[Readonly<ProcessorOptions>], Program, string>}
|
|
*/
|
|
export function recmaStringify(options) {
|
|
// @ts-expect-error: TS is wrong about `this`.
|
|
// eslint-disable-next-line unicorn/no-this-assignment
|
|
const self = /** @type {Processor} */ (this)
|
|
const {SourceMapGenerator} = options
|
|
|
|
self.compiler = compiler
|
|
|
|
/**
|
|
* @param {Program} tree
|
|
* Tree.
|
|
* @param {VFile} file
|
|
* File.
|
|
* @returns {string}
|
|
* JavaScript.
|
|
*/
|
|
function compiler(tree, file) {
|
|
const result = SourceMapGenerator
|
|
? toJs(tree, {
|
|
SourceMapGenerator,
|
|
filePath: file.path || 'unknown.mdx',
|
|
handlers: jsx
|
|
})
|
|
: toJs(tree, {handlers: jsx})
|
|
|
|
file.map = result.map
|
|
|
|
return result.value
|
|
}
|
|
}
|