53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
const astTransformStream = require("./ast-transform-stream");
|
|
|
|
function removeJSDocImports(comments, replacement) {
|
|
const REGEX = /[ \t]*\*[ \t]*@typedef\s+\{import.+\r?\n?|import\(.*?\)\.([a-zA-Z_]+)/g;
|
|
const JSDOC_COMMENT_OFFSET = 2;
|
|
|
|
comments.forEach(comment => {
|
|
if (comment.type === "Block" && comment.value[0] === "*") {
|
|
// JSDoc comment
|
|
const resultingComment = comment.value.replace(REGEX, (match, importName, matchIndex) => {
|
|
matchIndex += comment.start + JSDOC_COMMENT_OFFSET;
|
|
|
|
if (importName) {
|
|
// { import().xxx }
|
|
replacement.addRange({
|
|
start: matchIndex,
|
|
end: matchIndex + match.length,
|
|
replacement: importName,
|
|
});
|
|
|
|
return importName;
|
|
|
|
} else {
|
|
// @typedef
|
|
replacement.addRange({
|
|
start: matchIndex,
|
|
end: matchIndex + match.length,
|
|
replacement: "",
|
|
});
|
|
|
|
return "";
|
|
}
|
|
});
|
|
|
|
if (!/[^\s\*]/.test(resultingComment)) {
|
|
// Empty comment left
|
|
replacement.addRange({
|
|
start: comment.start,
|
|
end: comment.end,
|
|
replacement: "",
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = astTransformStream(function (replacement, ast, comments, input) {
|
|
removeJSDocImports(comments, replacement);
|
|
});
|
|
|
|
|
|
|