UNPKG

crapifyme

Version:

Ultra-fast developer productivity CLI tools - remove comments, logs, and more

161 lines 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PreservationRuleManager = void 0; const preservation_rules_1 = require("./preservation-rules"); const types_1 = require("./types"); class PreservationRuleManager { constructor() { this.rules = []; this.initializeDefaultRules(); } addRule(rule) { this.rules.push(rule); this.sortRulesByPriority(); } removeRule(name) { const initialLength = this.rules.length; this.rules = this.rules.filter(rule => rule.name !== name); return this.rules.length < initialLength; } getRules() { return [...this.rules]; } getRulesByCategory(category) { return this.rules.filter(rule => rule.category === category); } classifyComment(comment) { for (const rule of this.rules) { if (rule.matches(comment)) { return { category: rule.category, rule, shouldPreserve: true, metadata: rule.extractMetadata(comment) }; } } return { category: types_1.CommentCategory.REGULAR, rule: null, shouldPreserve: false, metadata: {} }; } shouldPreserveComment(comment) { return this.classifyComment(comment).shouldPreserve; } addCustomPattern(name, pattern, priority = 100) { try { const regex = new RegExp(pattern, 'i'); const rule = new preservation_rules_1.CustomPreservationRule(name, regex, priority, `Custom pattern: ${pattern}`, pattern); this.addRule(rule); } catch (error) { throw new Error(`Invalid regex pattern: ${pattern}`); } } clearRules() { this.rules = []; } resetToDefaults() { this.clearRules(); this.initializeDefaultRules(); } sortRulesByPriority() { this.rules.sort((a, b) => b.priority - a.priority); } initializeDefaultRules() { this.addFrameworkRules(); this.addDevelopmentRules(); this.addToolingRules(); this.addDocumentationRules(); } addFrameworkRules() { this.addRule(new preservation_rules_1.FrameworkPreservationRule('svelte-ignore', /svelte-ignore\s+[\w_-]+/i, 900, 'Svelte ignore directives', 'Svelte')); this.addRule(new preservation_rules_1.FrameworkPreservationRule('vue-eslint-disable', /<!--\s*eslint-disable/i, 900, 'Vue.js ESLint disable comments', 'Vue')); this.addRule(new preservation_rules_1.FrameworkPreservationRule('jsx-pragma', /@jsx\s+\w+/, 900, 'React/JSX pragma comments', 'React')); this.addRule(new preservation_rules_1.FrameworkPreservationRule('typescript-reference', /\/\/\/\s*<reference\s+(path|types|lib|no-default-lib)=/, 900, 'TypeScript reference directives', 'TypeScript')); this.addRule(new preservation_rules_1.FrameworkPreservationRule('webpack-magic', /webpack(ChunkName|Mode|Prefetch|Preload|Ignore|Include|Exclude|Exports):/i, 900, 'Webpack magic comments', 'Webpack')); } addDevelopmentRules() { const keywords = ['TODO', 'FIXME', 'HACK', 'NOTE', 'XXX', 'BUG', 'WARN', 'WARNING']; this.addRule(new preservation_rules_1.DevelopmentPreservationRule('development-keywords', new RegExp(`\\b(${keywords.join('|')})\\b`, 'i'), 700, 'Development keywords (TODO, FIXME, etc.)', keywords)); } addToolingRules() { this.addRule(new preservation_rules_1.ToolingPreservationRule('eslint-directives', /eslint-(disable|enable)(-next-line)?/i, 800, 'ESLint directives', 'ESLint')); this.addRule(new preservation_rules_1.ToolingPreservationRule('prettier-ignore', /prettier-ignore/i, 800, 'Prettier ignore comments', 'Prettier')); this.addRule(new preservation_rules_1.ToolingPreservationRule('typescript-ignore', /@ts-(ignore|expect-error|nocheck)\b/i, 800, 'TypeScript ignore comments', 'TypeScript')); this.addRule(new preservation_rules_1.ToolingPreservationRule('coverage-ignore', /(istanbul|c8)\s+ignore/i, 800, 'Code coverage ignore comments', 'Coverage')); } addDocumentationRules() { const jsdocTags = [ 'param', 'returns?', 'return', 'throws?', 'throw', 'example', 'since', 'author', 'see', 'todo', 'override', 'readonly', 'static', 'private', 'public', 'protected', 'abstract', 'final', 'namespace', 'module', 'class', 'interface', 'typedef', 'callback', 'enum', 'memberof', 'inner', 'instance', 'global', 'ignore', 'fileoverview', 'deprecated', 'description', 'summary', 'version', 'license', 'copyright', 'constructor', 'extends', 'implements', 'mixes', 'augments', 'borrows', 'lends', 'requires', 'external', 'event', 'fires', 'listens', 'mixin', 'variation', 'kind', 'constant', 'default', 'defaultvalue', 'type', 'this', 'async', 'generator', 'hideconstructor', 'inheritdoc', 'inner', 'jsx', 'react' ]; this.addRule(new preservation_rules_1.DocumentationPreservationRule('jsdoc', new RegExp(`@(${jsdocTags.join('|')})\\b`, 'i'), 750, 'JSDoc comments with @ annotations')); } } exports.PreservationRuleManager = PreservationRuleManager; //# sourceMappingURL=rule-manager.js.map