UNPKG

lwc-linter

Version:

A comprehensive CLI tool for linting Lightning Web Components v8.0.0+ with modern LWC patterns, decorators, lifecycle hooks, and Salesforce platform integration

201 lines 6.87 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.loadConfig = loadConfig; exports.createDefaultConfig = createDefaultConfig; const fs = __importStar(require("fs-extra")); const path = __importStar(require("path")); const DEFAULT_CONFIG = { rules: { // Code Quality Rules 'no-unused-vars': 'warn', 'no-console': 'warn', 'prefer-const': 'warn', 'no-var': 'error', 'camelcase-naming': 'warn', 'max-nesting-depth': 'warn', 'no-magic-numbers': 'info', // Accessibility Rules 'aria-required': 'error', 'alt-text-required': 'error', 'color-contrast': 'warn', 'keyboard-navigation': 'warn', 'focus-management': 'warn', 'semantic-html': 'warn', // Performance Rules 'dom-query-optimization': 'warn', 'reactive-property-usage': 'warn', 'large-dom-check': 'warn', 'bundle-size-check': 'info', 'async-operation-check': 'warn', // Security Rules 'no-innerhtml': 'error', 'input-validation': 'warn', 'xss-prevention': 'error', 'no-eval': 'error', 'secure-communication': 'warn', // ESLint Integration Rules 'eslint-integration': 'warn', 'prettier-formatting': 'warn', 'import-organization': 'info' }, severity: 'info', fix: false, exclude: [ 'node_modules/**', '**/*.test.js', '**/*.spec.js', '**/test/**', '**/__tests__/**', '**/coverage/**' ], include: [ '**/*.js', '**/*.html', '**/*.css' ], accessibility: { enabled: true, level: 'AA' }, performance: { enabled: true, maxBundleSize: 500000, // 500KB maxDomNodes: 1000 }, security: { enabled: true, allowInnerHTML: false }, eslintIntegration: { enabled: true, configPath: '.eslintrc.js', ignorePatterns: ['node_modules/**', 'lib/**'] }, prettierIntegration: { enabled: true, configPath: '.prettierrc.js', printWidth: 100, tabWidth: 2, useTabs: false } }; async function loadConfig(configPath) { let config = { ...DEFAULT_CONFIG }; // Try to find config file const configFiles = [ configPath, '.lwclintrc.json', '.lwclintrc.js', 'lwclint.config.js', 'package.json' ].filter(Boolean); for (const file of configFiles) { if (file && await fs.pathExists(file)) { try { let userConfig; if (file.endsWith('.json') || file === 'package.json') { const content = await fs.readFile(file, 'utf-8'); const parsed = JSON.parse(content); userConfig = file === 'package.json' ? parsed.lwclint || {} : parsed; } else if (file.endsWith('.js')) { // For .js config files, require them const fullPath = path.resolve(file); delete require.cache[fullPath]; const requiredModule = require(fullPath); userConfig = typeof requiredModule === 'function' ? requiredModule() : requiredModule; } else { continue; } // Merge configurations config = mergeConfigs(config, userConfig); break; } catch (error) { console.warn(`Warning: Failed to load config from ${file}: ${error}`); } } } return config; } function mergeConfigs(base, override) { return { ...base, ...override, rules: { ...base.rules, ...(override.rules || {}) }, exclude: override.exclude || base.exclude, include: override.include || base.include, accessibility: { enabled: base.accessibility.enabled, level: base.accessibility.level, ...(override.accessibility || {}) }, performance: { enabled: base.performance.enabled, maxBundleSize: base.performance.maxBundleSize, maxDomNodes: base.performance.maxDomNodes, ...(override.performance || {}) }, security: { enabled: base.security.enabled, allowInnerHTML: base.security.allowInnerHTML, ...(override.security || {}) }, eslintIntegration: { enabled: base.eslintIntegration.enabled, configPath: base.eslintIntegration.configPath, ignorePatterns: base.eslintIntegration.ignorePatterns, ...(override.eslintIntegration || {}) }, prettierIntegration: { enabled: base.prettierIntegration.enabled, configPath: base.prettierIntegration.configPath, printWidth: base.prettierIntegration.printWidth, tabWidth: base.prettierIntegration.tabWidth, useTabs: base.prettierIntegration.useTabs, ...(override.prettierIntegration || {}) } }; } function createDefaultConfig(outputPath = '.lwclintrc.json') { const configContent = JSON.stringify(DEFAULT_CONFIG, null, 2); return fs.writeFile(outputPath, configContent); } //# sourceMappingURL=config-loader.js.map