30 lines
765 B
JavaScript
30 lines
765 B
JavaScript
|
const { isEmpty } = require('lodash');
|
||
|
const visit = require('unist-util-visit');
|
||
|
const acorn = require('acorn');
|
||
|
const { commentToData } = require('../comment-to-data');
|
||
|
|
||
|
const parser = acorn.Parser;
|
||
|
|
||
|
function plugin() {
|
||
|
return transformer;
|
||
|
|
||
|
function transformer(tree, file) {
|
||
|
if (isEmpty(file.data)) file.data = {};
|
||
|
visit(tree, { type: 'element', tagName: 'script' }, scriptVisitor);
|
||
|
|
||
|
function scriptVisitor(node) {
|
||
|
visit(node, 'text', jsVisitor);
|
||
|
}
|
||
|
function jsVisitor(node) {
|
||
|
let comments = [];
|
||
|
parser.parse(node.value, { onComment: comments, ecmaVersion: 2020 });
|
||
|
|
||
|
comments
|
||
|
.map(({ value }) => value.trim())
|
||
|
.forEach(comment => commentToData(file, comment));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = plugin;
|