comment-remover-cli
Version:
A CLI tool to remove comments from Svelte and TypeScript files while preserving JSDoc
43 lines (42 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeTSComments = exports.removeSvelteComments = void 0;
/**
* Remove HTML comments (<!-- ... -->) outside <style> blocks,
* and JS/TS comments except JSDoc from Svelte files.
*/
function removeSvelteComments(code) {
// Remove HTML comments outside <style> blocks
code = code.replace(/<!--[\s\S]*?-->/g, (match, offset) => {
// Check if inside <style>...</style>
const before = code.slice(0, offset);
const openStyle = before.lastIndexOf("<style");
const closeStyle = before.lastIndexOf("</style>");
if (openStyle !== -1 && (closeStyle === -1 || closeStyle < openStyle)) {
// Inside <style>, keep the comment
return match;
}
return "";
});
// Remove JS/TS comments except JSDoc
code = removeJsTsComments(code);
return code;
}
exports.removeSvelteComments = removeSvelteComments;
/**
* Remove JS/TS comments except JSDoc from TypeScript files.
*/
function removeTSComments(code) {
return removeJsTsComments(code);
}
exports.removeTSComments = removeTSComments;
/**
* Remove // and /* ... *\/ comments except JSDoc (/** ... *\/).
*/
function removeJsTsComments(code) {
// Remove single-line comments (//...) not in JSDoc
code = code.replace(/(^|[^:])\/\/.*$/gm, (match, p1) => match.startsWith("/**") ? match : p1);
// Remove block comments except JSDoc
code = code.replace(/\/\*[\s\S]*?\*\//g, (match) => match.startsWith("/**") ? match : "");
return code;
}