UNPKG

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
"use strict"; 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; }