@ngcompass/config 0.1.1-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ngcompass
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.cjs ADDED
@@ -0,0 +1,32 @@
1
+ 'use strict';var zod=require('zod'),Ae=require('os'),lilconfig=require('lilconfig'),jiti=require('jiti'),D=require('fs'),be=require('crypto'),C=require('path'),url=require('url'),common=require('@ngcompass/common'),defu=require('defu'),Ue=require('process'),module$1=require('module'),minimatch=require('minimatch'),ot=require('fs/promises');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Ae__default=/*#__PURE__*/_interopDefault(Ae);var D__namespace=/*#__PURE__*/_interopNamespace(D);var be__default=/*#__PURE__*/_interopDefault(be);var C__namespace=/*#__PURE__*/_interopNamespace(C);var Ue__default=/*#__PURE__*/_interopDefault(Ue);var ot__default=/*#__PURE__*/_interopDefault(ot);var z=()=>Math.max(1,Ae__default.default.cpus().length-1),P={enabled:true,location:"node_modules/.cache/ngcompass",strategy:"local",ttl:864e5},S={outputFormat:"text",failOnSeverity:"error",maxWarnings:10,include:["src/**/*.ts"],exclude:["node_modules/**","dist/**","**/*.spec.ts","**/*.test.ts"]};var M=zod.z.enum(["warn","error"]),Se=zod.z.enum(["json","text","sarif","html"]),K=zod.z.union([M,zod.z.literal("off"),zod.z.object({severity:zod.z.union([M,zod.z.literal("off")]),options:zod.z.record(zod.z.string(),zod.z.unknown()).optional()})]),Ce=zod.z.object({enabled:zod.z.boolean().optional(),location:zod.z.string().optional(),strategy:zod.z.enum(["memory","local"]).optional(),ttl:zod.z.number().optional()}),Oe=zod.z.object({project:zod.z.string().optional(),tsconfigRootDir:zod.z.string().optional(),sourceType:zod.z.enum(["module","commonjs"]).optional(),ecmaVersion:zod.z.number().optional()}),J=zod.z.object({extends:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]).optional(),include:zod.z.array(zod.z.string()).default([...S.include]),exclude:zod.z.array(zod.z.string()).default([...S.exclude]),maxWorkers:zod.z.number().optional(),concurrency:zod.z.number().optional(),cache:zod.z.union([zod.z.boolean(),Ce]).optional(),cacheLocation:zod.z.string().optional(),outputFormat:Se.default(S.outputFormat),outputPath:zod.z.string().optional(),failOnSeverity:M.default(S.failOnSeverity),maxWarnings:zod.z.number().default(S.maxWarnings),ignorePatterns:zod.z.array(zod.z.string()).optional(),rules:zod.z.record(zod.z.string(),K).optional(),overrides:zod.z.array(zod.z.object({files:zod.z.union([zod.z.string(),zod.z.array(zod.z.string())]),rules:zod.z.record(zod.z.string(),K).optional()})).optional(),parserOptions:Oe.optional()}),Ne=zod.z.lazy(()=>J.partial()),Z=J.extend({profiles:zod.z.record(zod.z.string(),Ne).optional()}).transform(e=>{let t,r=e.maxWorkers??e.concurrency??z();if(e.cache===false)t={...P,enabled:false};else if(e.cache===true||e.cache===void 0){let s=e.cacheLocation??P.location;t={...P,location:s};}else t={...P,...e.cache};return {...e,maxWorkers:r,cache:t,rules:e.rules??{},overrides:e.overrides??[],ignorePatterns:e.ignorePatterns??[]}});var T="ngcompass",$e=[`${T}.config.ts`,`${T}.config.js`,`${T}.config.mjs`,`${T}.config.cjs`,`${T}.config.json`,`.${T}rc`,`.${T}rc.json`,"package.json"],w=e=>{let t=url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));return jiti.createJiti(e,{alias:{"@ngcompass/config":C__namespace.default.basename(t).startsWith("index.")?t:url.fileURLToPath(new URL("../index.ts",(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))))}}).import(e).then(r=>r&&typeof r=="object"&&"default"in r?r.default??r:r)},te=(e,t)=>JSON.parse(t.replace(/^\uFEFF/,"")),U=async(e=process.cwd())=>{common.time("config-discovery"),common.debug("discovery",`Searching for config in: ${e}`);let t=lilconfig.lilconfig(T,{searchPlaces:$e,loaders:{".ts":w,".js":w,".mjs":w,".cjs":w,".json":te,noExt:te}}),r=await t.search(e);if(!r)return common.debug("discovery","No config file found"),common.timeEnd("config-discovery"),null;common.debug("discovery",`Found config: ${r.filepath}`);let s="",i="";common.time("content-hash");try{s=D__namespace.default.readFileSync(r.filepath,"utf-8"),i=be__default.default.createHash("sha1").update(s).digest("hex");let n=common.timeEnd("content-hash");common.debug("discovery",`Content hash: ${i.substring(0,8)}... (${n.toFixed(1)}ms)`);}catch{}let o=common.timeEnd("config-discovery");return common.debug("discovery",`Discovery complete: ${o.toFixed(1)}ms`),{config:r.config,filepath:r.filepath,content:s,contentHash:i,isEmpty:r.isEmpty}};function k(e){return {cwd:Ue__default.default.cwd(),fs:{existsSync:D__namespace.existsSync,accessSync:(t,r)=>D__namespace.accessSync(t,r)},os:{cpus:Ae.cpus},path:{dirname:C__namespace.dirname,resolve:C__namespace.resolve,isAbsolute:C__namespace.isAbsolute},...e}}var u={NEGATIVE_MAX_WARNINGS:e=>({code:"negative-max-warnings",message:`Value for 'maxWarnings' must be non-negative. Received: ${e}.`,suggestion:"Set 'maxWarnings' to 0 or higher, or remove it to use default (10).",severity:"error"}),WORKERS_BELOW_MINIMUM:()=>({code:"workers-below-minimum",message:"Value for 'maxWorkers' must be at least 1.",suggestion:"Set to 1 or higher, or remove to use default (CPU count - 1).",severity:"error"}),NEGATIVE_CACHE_TTL:e=>({code:"negative-cache-ttl",message:`Cache TTL must be non-negative. Received: ${e}ms.`,suggestion:"Set to 0 (default TTL) or higher. Example: 86400000 for 24 hours.",severity:"error"}),WORKERS_EXCESSIVE:(e,t)=>({code:"warn-workers-excessive",message:`Worker count (${e}) exceeds CPU count (${t}). May cause context switching overhead.`,suggestion:`Reduce to ${t} or lower for optimal performance.`,severity:"warning"}),CACHE_TTL_ZERO:()=>({code:"warn-cache-ttl-zero",message:"Cache TTL is set to 0. Using driver default TTL (typically 24 hours).",suggestion:"Set explicit TTL if you need different cache expiration behavior.",severity:"warning"}),INVALID_GLOB_PATTERN:(e,t)=>({code:"invalid-glob-pattern",message:`Glob pattern "${e}" is invalid. Error: ${t}.`,suggestion:"Check pattern syntax. Valid examples: 'src/**/*.ts', '**/*.{ts,html}'.",severity:"error"}),EMPTY_INCLUDE:()=>({code:"empty-include",message:"No include patterns defined. Analysis will skip all files.",suggestion:"Add patterns like ['src/**/*.ts', 'src/**/*.html'] to enable analysis.",severity:"error"}),EMPTY_EXCLUDE:()=>({code:"warn-empty-exclude",message:"No exclude patterns defined. Performance may degrade.",suggestion:"Add common exclusions: ['node_modules/**', 'dist/**', '**/*.spec.ts'].",severity:"warning"}),DUPLICATE_PATTERNS:(e,t)=>({code:"warn-duplicate-patterns",message:`Duplicate patterns found in "${e}": ${t.map(r=>`"${r}"`).join(", ")}.`,suggestion:"Remove duplicate entries to simplify configuration.",severity:"warning"}),EMPTY_GLOB_PATTERN:e=>({code:"empty-glob-pattern",message:`Empty string detected in "${e}" patterns.`,suggestion:"Remove empty strings from the pattern array.",severity:"error"}),TSCONFIG_ROOT_NOT_FOUND:e=>({code:"tsconfig-root-not-found",message:`TSConfig root directory not found: "${e}".`,suggestion:"Verify the directory exists and the path is correct relative to the config file.",severity:"error"}),TSCONFIG_PROJECT_NOT_FOUND:e=>({code:"tsconfig-project-not-found",message:`TSConfig file not found: "${e}".`,suggestion:"Verify the file exists and the path is relative to 'tsconfigRootDir' or config location.",severity:"error"}),OUTPUT_PATH_TRAVERSAL:e=>({code:"output-path-traversal",message:`Output path contains unsafe traversal (..): "${e}".`,suggestion:"Use absolute paths or paths without '..' to prevent security issues.",severity:"error"}),OUTPUT_PATH_SYSTEM_DIR:e=>({code:"output-path-system-dir",message:`Output path points to a system directory: "${e}".`,suggestion:"Choose a safe output location within your project directory.",severity:"error"}),OUTPUT_PATH_NOT_FOUND:e=>({code:"output-path-not-found",message:`Output directory does not exist: "${e}".`,suggestion:"Create the directory or update 'outputPath' to an existing location.",severity:"error"}),OUTPUT_PATH_NOT_WRITABLE:e=>({code:"output-path-not-writable",message:`Output directory is not writable: "${e}".`,suggestion:"Check directory permissions or choose a different output location.",severity:"error"}),CACHE_IN_NODE_MODULES:e=>({code:"cache-in-node-modules",message:`Cache location inside 'node_modules' is unsafe: "${e}". node_modules can be deleted, causing cache loss.`,suggestion:"Use a different directory like '.cache' or 'node_modules/.cache/ngcompass'.",severity:"error"}),CACHE_PARENT_NOT_FOUND:e=>({code:"warn-cache-parent-not-found",message:`Cache parent directory missing: "${e}". It will be created automatically.`,suggestion:"No action needed. Directory will be created on first cache write.",severity:"warning"}),INVALID_RULE_SEVERITY:(e,t)=>({code:"invalid-rule-severity",message:`Rule "${e}" has invalid severity: "${t}".`,suggestion:"Use valid severities: 'off', 'info', 'low', 'moderate', 'high', or 'critical'.",severity:"error"}),NO_RULES_CONFIGURED:()=>({code:"warn-no-rules-configured",message:"No rules configured. Analysis effectively skips checks.",suggestion:"Add rules to enable analysis, or extend from a preset like 'recommended'.",severity:"warning"}),EMPTY_RULE_NAME:()=>({code:"empty-rule-name",message:"Empty rule name detected. Rule keys must be non-empty strings.",suggestion:"Remove empty keys from 'rules' configuration.",severity:"error"}),PROFILE_CIRCULAR_INHERITANCE:e=>({code:"profile-circular-inheritance",message:`Circular profile inheritance detected: ${e.join(" \u2192 ")}.`,suggestion:"Break the circular dependency by removing one 'extends' reference.",severity:"error"}),PROFILE_EMPTY:()=>({code:"warn-profile-empty",message:"Profiles section is defined but empty. Consider removing it.",suggestion:"Remove 'profiles: {}' or add at least one profile like 'dev' or 'ci'.",severity:"warning"}),EXTENDS_NOT_FOUND:e=>({code:"extends-not-found",message:`Cannot resolve preset "${e}". Make sure the package is installed.`,suggestion:`Run: npm install --save-dev ${e}`,severity:"error"}),DEPRECATED_CACHE_LOCATION:()=>({code:"warn-deprecated-cache-location",message:"'cacheLocation' is deprecated. Use 'cache.location' instead.",suggestion:`Replace 'cacheLocation: "..."' with 'cache: { location: "..." }'.`,severity:"warning"}),DEPRECATED_CONCURRENCY:()=>({code:"warn-deprecated-concurrency",message:"'concurrency' is deprecated. Use 'maxWorkers' instead.",suggestion:"Replace 'concurrency: N' with 'maxWorkers: N'.",severity:"warning"})};function W(e,t,r=[]){let s=[];if(e.maxWorkers!==void 0){let i=2*t.os.cpus().length;e.maxWorkers<1?s.push({...u.WORKERS_BELOW_MINIMUM(),path:[...r,"maxWorkers"]}):e.maxWorkers>i&&s.push({...u.WORKERS_EXCESSIVE(e.maxWorkers,i),path:[...r,"maxWorkers"]});}if(e.cache&&typeof e.cache=="object"&&e.cache.ttl!==void 0){let{ttl:i}=e.cache,o=[...r,"cache","ttl"];i<0&&s.push({...u.NEGATIVE_CACHE_TTL(i),path:o});}return {issues:s}}function re(e,t,r=[]){let s=[];if(e.maxWarnings!==void 0){let{maxWarnings:o}=e;o<0&&s.push({...u.NEGATIVE_MAX_WARNINGS(o),path:[...r,"maxWarnings"]});}let{issues:i}=W(e,t,r);return s.push(...i),{issues:s}}function se(e,t=[],r=Ue__default.default.cwd()){let s=[];if(!e.extends)return {issues:s};let i=Array.isArray(e.extends)?e.extends:[e.extends],o=Array.isArray(e.extends);for(let n=0;n<i.length;n++){let c=i[n];if(!(typeof c!="string"||c.trim()===""||(function(l){let d=l.startsWith("."),y=C__namespace.default.isAbsolute(l),E=l.includes(":");return d||y||E})(c))&&(function(l,d){try{let y=C__namespace.default.join(d,"__resolve_anchor__.cjs");return module$1.createRequire(y).resolve(l)}catch{return null}})(c,r)===null){let l=[...t,"extends"];o&&l.push(n),s.push({...u.EXTENDS_NOT_FOUND(c),path:l});}}return {issues:s}}var je=/\/\/\//,Me=/\{/g,Ve=/\}/g;function ne(e,t=[]){let r=[];for(let s of ["include","exclude","ignorePatterns"]){let i=e[s];if(!Array.isArray(i))continue;i.forEach((n,c)=>{r.push(...(function(l,d,y,E){let f=[],p=[...E,l,y];if(!d||d.trim()==="")return f.push({...u.EMPTY_GLOB_PATTERN(l),path:p}),f;if(d.includes("[")&&!d.includes("]"))return f.push({...u.INVALID_GLOB_PATTERN(d,"unclosed bracket"),path:p}),f;if(je.test(d)||d.startsWith("///"))return f.push({...u.INVALID_GLOB_PATTERN(d,"invalid path pattern with multiple slashes"),path:p}),f;(d.endsWith("\\")||d.endsWith("/"))&&f.push({...u.INVALID_GLOB_PATTERN(d,"trailing slash not allowed"),path:p}),(d.match(Me)||[]).length!==(d.match(Ve)||[]).length&&f.push({...u.INVALID_GLOB_PATTERN(d,"unmatched braces"),path:p});try{minimatch.minimatch("sample.ts",d);}catch(g){f.push({...u.INVALID_GLOB_PATTERN(d,g.message),path:p});}return f})(s,n,c,t));});let o=i.filter((n,c)=>i.indexOf(n)!==c);o.length>0&&r.push({...u.DUPLICATE_PATTERNS(s,[...new Set(o)]),path:[...t,s]});}return e.include&&e.include.length!==0||r.push({...u.EMPTY_INCLUDE(),path:[...t,"include"]}),e.exclude&&e.exclude.length!==0||r.push({...u.EMPTY_EXCLUDE(),path:[...t,"exclude"]}),{issues:r}}var We=["/etc/","\\etc\\","/var/","\\var\\"],ie="node_modules";function ce(e,t,r=[]){let s=[],i=o=>t.path.isAbsolute(o)?o:t.path.resolve(t.cwd??process.cwd(),o);if(e.outputPath){let{outputPath:o}=e,n=[...r,"outputPath"];o.includes("..")&&s.push({...u.OUTPUT_PATH_TRAVERSAL(o),path:n}),We.some(l=>o.includes(l))&&s.push({...u.OUTPUT_PATH_SYSTEM_DIR(o),path:n});let c=t.path.dirname(i(o));if(t.fs.existsSync(c))try{t.fs.accessSync(c,D__namespace.constants.W_OK);}catch{s.push({...u.OUTPUT_PATH_NOT_WRITABLE(c),path:n});}else s.push({...u.OUTPUT_PATH_NOT_FOUND(c),path:n});}if(e.cache&&typeof e.cache=="object"&&e.cache.enabled){let{location:o}=e.cache;if(o){let n=[...r,"cache","location"],c=o.includes(ie),l=o.includes(`${ie}/.cache`);c&&!l&&s.push({...u.CACHE_IN_NODE_MODULES(o),path:n});let d=t.path.dirname(i(o));t.fs.existsSync(d)||s.push({...u.CACHE_PARENT_NOT_FOUND(d),path:n});}}if(e.parserOptions){let{project:o,tsconfigRootDir:n}=e.parserOptions,c=o?i(o):void 0,l=n?i(n):void 0;c&&!t.fs.existsSync(c)&&s.push({...u.TSCONFIG_PROJECT_NOT_FOUND(o),path:[...r,"parserOptions","project"]}),l&&!t.fs.existsSync(l)&&s.push({...u.TSCONFIG_ROOT_NOT_FOUND(n),path:[...r,"parserOptions","tsconfigRootDir"]});}return {issues:s}}var Ge={info:0,low:1,warning:2,warn:2,moderate:2,high:3,error:4,critical:4},He=Object.keys(Ge),le=[...He,"off"];function ue(e,t=[]){let r=[],s=(Array.isArray(e.extends)||!!e.extends)&&e.extends.length>0,i=Object.entries(e.rules||{});for(let[o,n]of(i.length>0||s||r.push({...u.NO_RULES_CONFIGURED(),path:[...t,"rules"]}),i)){if(!o||o.trim()===""){r.push({...u.EMPTY_RULE_NAME(),path:[...t,"rules"]});continue}if(typeof n=="object"&&n!==null){let{severity:c}=n;c&&!le.includes(c)&&r.push({...u.INVALID_RULE_SEVERITY(o,c),path:[...t,"rules",o,"severity"]});}}return {issues:r}}function de(e,t=[]){let r=[];return e&&typeof e=="object"&&("cacheLocation"in e&&e.cacheLocation!==void 0&&r.push({...u.DEPRECATED_CACHE_LOCATION(),path:[...t,"cacheLocation"]}),"concurrency"in e&&e.concurrency!==void 0&&r.push({...u.DEPRECATED_CONCURRENCY(),path:[...t,"concurrency"]})),{issues:r}}function fe(e,t){let r=common.ASTUtils.parse(e,t);return common.ASTUtils.generateLocationMap(r)}async function qe(e,t,r,s){if(!r)return fe(e,t);let i=`v${common.CACHE_VERSION}:${s}`,o=await r.get(i);if(o)return o.ast;let n=fe(e,t);return await r.set(i,{filePath:t,ast:n}),n}async function me(e,t,r,s,i){if(e.length===0)return;let o=i??be__default.default.createHash("sha1").update(t).digest("hex"),n=await qe(t,r,s,o);for(let c of e){if(c.file||(c.file=r),!((!c.line||c.line===1)&&c.path))continue;let l=n[c.path.join(".")];l&&(c.line=l.line,c.column=l.column);}}var ze=new Set(["recommended","strict","performance","reactivity","all"]);async function Ke(e,t,r,s,i){if(r)return void await me(e,r,t,s,i);for(let o of e)o.file||(o.file=t);}function ge(e,t){let r,s=[...(r=new Set,e.filter(o=>{let n=`${o.code}:${o.message}:${JSON.stringify(o.path)}`;return !r.has(n)&&(r.add(n),true)}))].sort((o,n)=>o.severity===n.severity?0:o.severity==="error"?-1:1),i=!s.some(o=>o.severity==="error");return {config:i?t:void 0,report:{valid:i,issues:s}}}async function he(e){let t,{config:r,context:s,basePath:i=[],filePath:o,fileContent:n,astCache:c,contentHash:l}=e,{issues:d,validated:y,success:E}=(t=Z.safeParse(r)).success?{issues:[],validated:t.data,success:true}:{issues:t.error.issues.map(p=>({code:p.code.replace(/_/g,"-"),message:p.message,path:[...i,...p.path],severity:"error",file:o})),validated:r,success:false},f=[...d,...(function(p,g,m,h,b){let v=[];for(let O of [{name:"cross-fields",run:()=>re(p,m,h).issues},{name:"glob-patterns",run:()=>ne(p,h).issues},{name:"paths",run:()=>ce(p,m,h).issues},{name:"rules",run:()=>ue(p,h).issues},{name:"extends-chain",run:()=>se(p,h,m.cwd).issues},{name:"deprecated",run:()=>de(g,h).issues}])try{v.push(...O.run());}catch(j){v.push({code:"check-failed",message:`Check "${O.name}" encountered an unexpected error: ${j.message}`,path:h,severity:"error",file:b});}return v})(y,r,s,i,o)];return o&&await Ke(f,o,n,c,l),{issues:f,validated:E?y:void 0}}async function ye(e,t=k(),r,s,i,o){var n;let c={context:t,filePath:r,fileContent:s,astCache:i,contentHash:o},l=e===null||typeof e!="object"?{}:e.profiles??{};if(t.profile){let E=l[t.profile];if(!E){let m,h;return n=t.profile,m=Object.keys(l).join(", "),h=ze.has(n.replace(/^ngcompass:/,""))?` "${n}" is a built-in preset, not a config profile. Use 'extends: "ngcompass:${n.replace(/^ngcompass:/,"")}"' in your config instead.`:"",{config:void 0,report:{valid:false,issues:[{code:"error-profile-not-found",message:`Profile "${n}" not found. Available: [${m}]${h}`,path:["profiles",n],severity:"error",file:r}]}}}let f=defu.defu(E,e),{issues:p,validated:g}=await he({...c,config:f,basePath:["profiles",t.profile]});return ge(p,g)}let{issues:d,validated:y}=await he({...c,config:e});return ge(d,y)}var ve=async e=>{common.time("config-resolution");let{cwd:t=Ue__default.default.cwd(),profile:r,cache:s}=e;common.debug("loader",`Starting config resolution (cwd: ${t}, profile: ${r||"none"})`);let i=await U(t),{hash:o,cachedResult:n}=await tt(i,r,s);if(n){let d=common.timeEnd("config-resolution");return common.debug("loader",`Cache HIT - returning cached result (${d.toFixed(1)}ms)`),n}common.debug("loader","Cache MISS - running validation");let c=await rt(i,r,s);common.debug("loader",`Validation complete: ${c.report.valid?"valid":`invalid (${c.report.issues.length} issues)`}`),s&&o&&(await s.configs.set(o,c),common.debug("loader",`Cached validation result: key=${o.substring(0,8)}...`));let l=common.timeEnd("config-resolution");return common.debug("loader",`Config resolution complete: ${l.toFixed(1)}ms`),c};async function tt(e,t,r){if(!r)return {};let s=[e?.contentHash??"",t??"",common.PACKAGE_VERSION,common.CACHE_VERSION].join("::"),i=r.computeHash(s);common.debug("loader",`Cache lookup: key=${i.substring(0,8)}...`);let o=await r.configs.get(i);return {hash:i,cachedResult:o}}async function rt(e,t,r){return ye(e?.config??{},k({profile:t}),e?.filepath,e?.content,r?.asts,e?.contentHash)}var Te=class extends Error{constructor(t){super(`Configuration file already exists at: ${t}`),this.name="ConfigExistsError";}},nt=`import { defineConfig } from '@ngcompass/config';
2
+
3
+ export default defineConfig({
4
+ extends: 'ngcompass:recommended',
5
+
6
+ include: [
7
+ 'src/**/*.ts',
8
+ 'src/**/*.html',
9
+ ],
10
+
11
+ exclude: [
12
+ 'node_modules/**',
13
+ 'dist/**',
14
+ 'build/**',
15
+ 'coverage/**',
16
+ '**/*.d.ts',
17
+ '**/*.spec.ts',
18
+ '**/*.test.ts',
19
+ ],
20
+
21
+ profiles: {
22
+ ci: {
23
+ outputFormat: 'json',
24
+ maxWarnings: 0,
25
+ },
26
+ },
27
+ });
28
+ `;async function vr(e={}){let t=e.cwd??process.cwd(),r=C__namespace.default.join(t,"ngcompass.config.ts"),s=await U(t);if(s&&!e.force)return {success:false,filePath:s.filepath,alreadyExists:true};try{return await ot__default.default.writeFile(r,nt,"utf-8"),{success:!0,filePath:r}}catch{return {success:false,filePath:r}}}async function xr(e={}){try{return await ve(e)}catch(t){return {config:void 0,report:{valid:false,issues:[{code:"error-conf-semantic",message:t instanceof Error?t.message:String(t),path:[],severity:"error"}]}}}}function Sr(e){return e}var ct={typeCheckingEnabled:false,templateASTEnabled:true,cssASTEnabled:true},lt=async(e,t,r,s=ct)=>{if(e.length===0)return;common.debug("plugin-loader",`Initializing loader for ${e.length} plugin(s) at ${t}`);let i=module$1.createRequire(t+"/package.json"),o=[];for(let n of e)try{let c;try{c=i.resolve(n);}catch{c=n;}let l=await import(c),d=l.default??l,y=Array.isArray(d)?d:[d],E=0;for(let f of y){if(!(function(g){if(!g||typeof g!="object")return !1;let m=g.handler;return typeof g.name=="string"&&g.name.length>0&&m?.handle instanceof Function})(f)){common.warn("plugin-loader",`Plugin "${n}" exported an invalid structure. Skipping.`);continue}let{manifest:p}=f;if(p){let g=(function(m,h){let b=(function(v,O,j,xe){let N=O.trim();if(!N||N==="*")return null;let H=G(v);if(!H)return null;let B=N.startsWith("^")?(function(I){let x=G(I);return x?`>=${I} <${x[0]+1}.0.0`:null})(N.slice(1)):N;if(!B)return null;for(let I of B.split(/\s+/).filter(Boolean)){let x=I.match(/^(>=|<=|>|<|=|==)(\d+\.\d+\.\d+.*)$/);if(!x)continue;let $=x[1],Y=G(x[2]);if(!Y)continue;let R=(function(q,X){for(let A=0;A<3;A++)if(q[A]!==X[A])return q[A]>X[A]?1:-1;return 0})(H,Y);if(!($===">="?R>=0:$==="<="?R<=0:$===">"?R>0:$==="<"?R<0:R===0))return `Plugin "${j}@${xe}" requires engine "${O}", found "${v}".`}return null})(common.PACKAGE_VERSION.replace(/^v/,""),m.engineVersionRange,m.name,m.version);if(b)return b;for(let v of [{key:"requiresTypeInfo",current:h.typeCheckingEnabled,label:"Type Information"},{key:"requiresTemplateAST",current:h.templateASTEnabled,label:"Template AST"},{key:"requiresCssAST",current:h.cssASTEnabled,label:"CSS AST"}])if(m.capabilities?.[v.key]&&!v.current)return `Plugin "${m.name}@${m.version}" requires ${v.label} support, which is currently disabled.`;return null})(p,s);if(g)throw Error(g);common.debug("plugin-loader",`\u276F Validated: ${p.name}@${p.version}`);}else common.warn("plugin-loader",`Plugin "${n}" is missing a manifest. Please update for future compatibility.`);r.register(f),E++,common.debug("plugin-loader",`\u276F Registered Rule: ${f.name}`);}common.debug("plugin-loader",`Plugin "${n}" processed: ${E} rules active.`);}catch(c){let l=c instanceof Error?c.message:String(c);o.push(`- "${n}": ${l}`);}if(o.length>0)throw Error(`[ngcompass] Plugin Load Failure:
29
+ ${o.join(`
30
+ `)}
31
+ Ensure plugins are installed and satisfy version requirements.`)};function G(e){let t=e.trim().match(/^v?\.?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}exports.AnalyzerConfigSchema=Z;exports.ConfigExistsError=Te;exports.DEFAULT_CACHE_OPTIONS=P;exports.DEFAULT_CONFIG=S;exports.MESSAGES=u;exports.ProfileConfigSchema=Ne;exports.SEVERITY_LEVELS=Ge;exports.VALID_RULE_SEVERITIES=le;exports.VALID_SEVERITIES=He;exports.createDefaultContext=k;exports.defineConfig=Sr;exports.findAndLoadConfig=U;exports.getDefaultMaxWorkers=z;exports.initConfig=vr;exports.loadPlugins=lt;exports.resolveConfig=ve;exports.validateConfig=xr;exports.validateConfigBlock=W;exports.validateConfiguration=ye;//# sourceMappingURL=index.cjs.map
32
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/defaults.ts","../src/schemas/schema.ts","../src/loaders/discovery.ts","../src/health/context.ts","../src/health/messages.ts","../src/health/checks/base.ts","../src/health/checks/cross-fields.ts","../src/health/checks/extends.ts","../src/health/checks/globs.ts","../src/health/checks/paths.ts","../src/health/constants.ts","../src/health/checks/rules.ts","../src/health/checks/deprecated.ts","../src/health/enricher.ts","../src/health/validator.ts","../src/loaders/loader.ts","../src/actions/init.ts","../src/actions/healthcheck.ts","../src/define-config.ts","../src/plugin-loader.ts"],"names":["getDefaultMaxWorkers","Math","max","os","cpus","length","DEFAULT_CACHE_OPTIONS","enabled","location","strategy","ttl","DEFAULT_CONFIG","outputFormat","failOnSeverity","maxWarnings","include","exclude","SeveritySchema","z","enum","OutputFormatSchema","RuleDefinitionSchema","union","literal","object","severity","options","record","string","unknown","optional","CacheOptionsSchema","boolean","number","ParserOptionsSchema","project","tsconfigRootDir","sourceType","ecmaVersion","BaseAnalyzerConfigSchema","extends","array","default","maxWorkers","concurrency","cache","cacheLocation","outputPath","ignorePatterns","rules","overrides","files","parserOptions","ProfileConfigSchema","lazy","partial","AnalyzerConfigSchema","extend","profiles","transform","data","undefined","MODULE_NAME","SEARCH_PLACES","jitiLoader","filepath","currentFile","fileURLToPath","createJiti","alias","path","basename","startsWith","URL","import","then","mod","jsonLoader","_filepath","content","JSON","parse","replace","findAndLoadConfig","cwd","process","time","debug","explorer","lilconfig","searchPlaces","loaders","noExt","result","search","timeEnd","contentHash","fs","readFileSync","crypto","createHash","update","digest","hashTime","substring","toFixed","discoveryTime","config","isEmpty","createDefaultContext","existsSync","accessSync","p","mode","dirname","resolve","isAbsolute","MESSAGES","NEGATIVE_MAX_WARNINGS","val","code","message","suggestion","WORKERS_BELOW_MINIMUM","NEGATIVE_CACHE_TTL","WORKERS_EXCESSIVE","workers","limit","CACHE_TTL_ZERO","INVALID_GLOB_PATTERN","pattern","error","EMPTY_INCLUDE","EMPTY_EXCLUDE","DUPLICATE_PATTERNS","field","patterns","map","join","EMPTY_GLOB_PATTERN","TSCONFIG_ROOT_NOT_FOUND","TSCONFIG_PROJECT_NOT_FOUND","OUTPUT_PATH_TRAVERSAL","OUTPUT_PATH_SYSTEM_DIR","OUTPUT_PATH_NOT_FOUND","dir","OUTPUT_PATH_NOT_WRITABLE","CACHE_IN_NODE_MODULES","CACHE_PARENT_NOT_FOUND","INVALID_RULE_SEVERITY","ruleName","NO_RULES_CONFIGURED","EMPTY_RULE_NAME","PROFILE_CIRCULAR_INHERITANCE","chain","PROFILE_EMPTY","EXTENDS_NOT_FOUND","preset","DEPRECATED_CACHE_LOCATION","DEPRECATED_CONCURRENCY","validateConfigBlock","block","context","basePath","issues","workerLimit","push","validateCrossFields","blockIssues","validateExtendsChain","extendsList","Array","isArray","i","trim","isLocal","nodePath","isPluginSpecifier","includes","anchorFile","createRequire","issuePath","n","s","l","validateGlobPatterns","forEach","index","GLOB_RULES","test","endsWith","match","minimatch","err","duplicates","filter","item","indexOf","Set","t","c","validatePaths","resolveFromCwd","targetPath","PATH_RULES","some","constants","W_OK","isInNodeModules","isStandardCache","cacheDir","resolvedProject","resolvedTsconfigRootDir","SEVERITY_LEVELS","info","low","warning","warn","moderate","high","critical","VALID_SEVERITIES","Object","keys","VALID_RULE_SEVERITIES","validateRules","hasExtends","ruleEntries","entries","ruleConfig","validateDeprecatedFields","rawConfig","buildLocationMap","fileContent","filePath","sourceFile","ASTUtils","generateLocationMap","resolveLocationMap","astCache","versionedKey","CACHE_VERSION","cachedEntry","get","ast","locationMap","set","enrichIssueLocations","hash","issue","file","line","column","BUILTIN_PRESETS","attachFileLocations","buildValidationResult","finalConfig","seen","unique","key","stringify","has","add","sort","a","b","valid","report","validateBlock","schemaIssues","validated","success","safeParse","allIssues","check","name","run","validateConfiguration","profile","baseOptions","availableProfiles","profileConfig","available","presetHint","merged","defu","resolveConfig","loaded","cachedResult","tryLoadFromCache","resolutionTime","runValidation","configs","hashInput","PACKAGE_VERSION","computeHash","asts","ConfigExistsError","Error","TEMPLATE","initConfig","existing","force","alreadyExists","writeFile","validateConfig","String","defineConfig","DEFAULT_CAPABILITIES","typeCheckingEnabled","templateASTEnabled","cssASTEnabled","loadPlugins","plugins","configDir","registry","capabilities","_require","pluginErrors","pluginRef","resolvedPath","module","rawExport","pluginList","registeredCount","plugin","value","handler","handle","Function","manifest","rangeError","currentVersion","range","pluginName","pluginVersion","trimmed","current","parseVersion","expanded","base","parsed","slice","constraint","split","Boolean","op","required","diff","engineVersionRange","version","req","label","register","e","v","Number"],"mappings":"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","file":"index.cjs","sourcesContent":["import t from 'node:os';\nexport const getDefaultMaxWorkers = ()=>Math.max(1, t.cpus().length - 1);\nexport const DEFAULT_CACHE_OPTIONS = {\n enabled: !0,\n location: 'node_modules/.cache/ngcompass',\n strategy: 'local',\n ttl: 86400000\n};\nexport const DEFAULT_CONFIG = {\n outputFormat: 'text',\n failOnSeverity: 'error',\n maxWarnings: 10,\n include: [\n 'src/**/*.ts'\n ],\n exclude: [\n 'node_modules/**',\n 'dist/**',\n '**/*.spec.ts',\n '**/*.test.ts'\n ]\n};\n","import { z as e } from 'zod';\nimport { DEFAULT_CONFIG as o, DEFAULT_CACHE_OPTIONS as n, getDefaultMaxWorkers as r } from './defaults.js';\nlet SeveritySchema = e.enum([\n 'warn',\n 'error'\n]), OutputFormatSchema = e.enum([\n 'json',\n 'text',\n 'sarif',\n 'html'\n]), RuleDefinitionSchema = e.union([\n SeveritySchema,\n e.literal('off'),\n e.object({\n severity: e.union([\n SeveritySchema,\n e.literal('off')\n ]),\n options: e.record(e.string(), e.unknown()).optional()\n })\n]), CacheOptionsSchema = e.object({\n enabled: e.boolean().optional(),\n location: e.string().optional(),\n strategy: e.enum([\n 'memory',\n 'local'\n ]).optional(),\n ttl: e.number().optional()\n}), ParserOptionsSchema = e.object({\n project: e.string().optional(),\n tsconfigRootDir: e.string().optional(),\n sourceType: e.enum([\n 'module',\n 'commonjs'\n ]).optional(),\n ecmaVersion: e.number().optional()\n}), BaseAnalyzerConfigSchema = e.object({\n extends: e.union([\n e.string(),\n e.array(e.string())\n ]).optional(),\n include: e.array(e.string()).default([\n ...o.include\n ]),\n exclude: e.array(e.string()).default([\n ...o.exclude\n ]),\n maxWorkers: e.number().optional(),\n concurrency: e.number().optional(),\n cache: e.union([\n e.boolean(),\n CacheOptionsSchema\n ]).optional(),\n cacheLocation: e.string().optional(),\n outputFormat: OutputFormatSchema.default(o.outputFormat),\n outputPath: e.string().optional(),\n failOnSeverity: SeveritySchema.default(o.failOnSeverity),\n maxWarnings: e.number().default(o.maxWarnings),\n ignorePatterns: e.array(e.string()).optional(),\n rules: e.record(e.string(), RuleDefinitionSchema).optional(),\n overrides: e.array(e.object({\n files: e.union([\n e.string(),\n e.array(e.string())\n ]),\n rules: e.record(e.string(), RuleDefinitionSchema).optional()\n })).optional(),\n parserOptions: ParserOptionsSchema.optional()\n});\nexport const ProfileConfigSchema = e.lazy(()=>BaseAnalyzerConfigSchema.partial());\nexport const AnalyzerConfigSchema = BaseAnalyzerConfigSchema.extend({\n profiles: e.record(e.string(), ProfileConfigSchema).optional()\n}).transform((e)=>{\n let o, t = e.maxWorkers ?? e.concurrency ?? r();\n if (!1 === e.cache) o = {\n ...n,\n enabled: !1\n };\n else if (!0 === e.cache || void 0 === e.cache) {\n let r = e.cacheLocation ?? n.location;\n o = {\n ...n,\n location: r\n };\n } else o = {\n ...n,\n ...e.cache\n };\n return {\n ...e,\n maxWorkers: t,\n cache: o,\n rules: e.rules ?? {},\n overrides: e.overrides ?? [],\n ignorePatterns: e.ignorePatterns ?? []\n };\n});\n","import { lilconfig as o } from 'lilconfig';\nimport { createJiti as e } from 'jiti';\nimport i from 'node:fs';\nimport t from 'node:crypto';\nimport r from 'node:path';\nimport { fileURLToPath as n } from 'node:url';\nimport { debug as s, time as c, timeEnd as a } from '@ngcompass/common';\nlet MODULE_NAME = 'ngcompass', SEARCH_PLACES = [\n `${MODULE_NAME}.config.ts`,\n `${MODULE_NAME}.config.js`,\n `${MODULE_NAME}.config.mjs`,\n `${MODULE_NAME}.config.cjs`,\n `${MODULE_NAME}.config.json`,\n `.${MODULE_NAME}rc`,\n `.${MODULE_NAME}rc.json`,\n 'package.json'\n], jitiLoader = (o)=>{\n let i = n(import.meta.url);\n return e(o, {\n alias: {\n '@ngcompass/config': r.basename(i).startsWith('index.') ? i : n(new URL('../index.ts', import.meta.url))\n }\n }).import(o).then((o)=>o && 'object' == typeof o && 'default' in o ? o.default ?? o : o);\n}, jsonLoader = (o, e)=>JSON.parse(e.replace(/^\\uFEFF/, ''));\nexport const findAndLoadConfig = async (e = process.cwd())=>{\n c('config-discovery'), s('discovery', `Searching for config in: ${e}`);\n let r = o(MODULE_NAME, {\n searchPlaces: SEARCH_PLACES,\n loaders: {\n '.ts': jitiLoader,\n '.js': jitiLoader,\n '.mjs': jitiLoader,\n '.cjs': jitiLoader,\n '.json': jsonLoader,\n noExt: jsonLoader\n }\n }), n = await r.search(e);\n if (!n) return s('discovery', 'No config file found'), a('config-discovery'), null;\n s('discovery', `Found config: ${n.filepath}`);\n let f = '', d = '';\n c('content-hash');\n try {\n f = i.readFileSync(n.filepath, 'utf-8'), d = t.createHash('sha1').update(f).digest('hex');\n let o = a('content-hash');\n s('discovery', `Content hash: ${d.substring(0, 8)}... (${o.toFixed(1)}ms)`);\n } catch {}\n let m = a('config-discovery');\n return s('discovery', `Discovery complete: ${m.toFixed(1)}ms`), {\n config: n.config,\n filepath: n.filepath,\n content: f,\n contentHash: d,\n isEmpty: n.isEmpty\n };\n};\n","import * as e from \"node:fs\";\nimport * as o from \"node:path\";\nimport { cpus as s } from \"node:os\";\nimport r from \"node:process\";\nexport function createDefaultContext(t) {\n return {\n cwd: r.cwd(),\n fs: {\n existsSync: e.existsSync,\n accessSync: (o, s)=>e.accessSync(o, s)\n },\n os: {\n cpus: s\n },\n path: {\n dirname: o.dirname,\n resolve: o.resolve,\n isAbsolute: o.isAbsolute\n },\n ...t\n };\n}\n","export const MESSAGES = {\n NEGATIVE_MAX_WARNINGS: (e)=>({\n code: \"negative-max-warnings\",\n message: `Value for 'maxWarnings' must be non-negative. Received: ${e}.`,\n suggestion: \"Set 'maxWarnings' to 0 or higher, or remove it to use default (10).\",\n severity: \"error\"\n }),\n WORKERS_BELOW_MINIMUM: ()=>({\n code: \"workers-below-minimum\",\n message: \"Value for 'maxWorkers' must be at least 1.\",\n suggestion: \"Set to 1 or higher, or remove to use default (CPU count - 1).\",\n severity: \"error\"\n }),\n NEGATIVE_CACHE_TTL: (e)=>({\n code: \"negative-cache-ttl\",\n message: `Cache TTL must be non-negative. Received: ${e}ms.`,\n suggestion: \"Set to 0 (default TTL) or higher. Example: 86400000 for 24 hours.\",\n severity: \"error\"\n }),\n WORKERS_EXCESSIVE: (e, t)=>({\n code: \"warn-workers-excessive\",\n message: `Worker count (${e}) exceeds CPU count (${t}). May cause context switching overhead.`,\n suggestion: `Reduce to ${t} or lower for optimal performance.`,\n severity: \"warning\"\n }),\n CACHE_TTL_ZERO: ()=>({\n code: \"warn-cache-ttl-zero\",\n message: \"Cache TTL is set to 0. Using driver default TTL (typically 24 hours).\",\n suggestion: \"Set explicit TTL if you need different cache expiration behavior.\",\n severity: \"warning\"\n }),\n INVALID_GLOB_PATTERN: (e, t)=>({\n code: \"invalid-glob-pattern\",\n message: `Glob pattern \"${e}\" is invalid. Error: ${t}.`,\n suggestion: \"Check pattern syntax. Valid examples: 'src/**/*.ts', '**/*.{ts,html}'.\",\n severity: \"error\"\n }),\n EMPTY_INCLUDE: ()=>({\n code: \"empty-include\",\n message: \"No include patterns defined. Analysis will skip all files.\",\n suggestion: \"Add patterns like ['src/**/*.ts', 'src/**/*.html'] to enable analysis.\",\n severity: \"error\"\n }),\n EMPTY_EXCLUDE: ()=>({\n code: \"warn-empty-exclude\",\n message: \"No exclude patterns defined. Performance may degrade.\",\n suggestion: \"Add common exclusions: ['node_modules/**', 'dist/**', '**/*.spec.ts'].\",\n severity: \"warning\"\n }),\n DUPLICATE_PATTERNS: (e, t)=>({\n code: \"warn-duplicate-patterns\",\n message: `Duplicate patterns found in \"${e}\": ${t.map((e)=>`\"${e}\"`).join(\", \")}.`,\n suggestion: \"Remove duplicate entries to simplify configuration.\",\n severity: \"warning\"\n }),\n EMPTY_GLOB_PATTERN: (e)=>({\n code: \"empty-glob-pattern\",\n message: `Empty string detected in \"${e}\" patterns.`,\n suggestion: \"Remove empty strings from the pattern array.\",\n severity: \"error\"\n }),\n TSCONFIG_ROOT_NOT_FOUND: (e)=>({\n code: \"tsconfig-root-not-found\",\n message: `TSConfig root directory not found: \"${e}\".`,\n suggestion: \"Verify the directory exists and the path is correct relative to the config file.\",\n severity: \"error\"\n }),\n TSCONFIG_PROJECT_NOT_FOUND: (e)=>({\n code: \"tsconfig-project-not-found\",\n message: `TSConfig file not found: \"${e}\".`,\n suggestion: \"Verify the file exists and the path is relative to 'tsconfigRootDir' or config location.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_TRAVERSAL: (e)=>({\n code: \"output-path-traversal\",\n message: `Output path contains unsafe traversal (..): \"${e}\".`,\n suggestion: \"Use absolute paths or paths without '..' to prevent security issues.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_SYSTEM_DIR: (e)=>({\n code: \"output-path-system-dir\",\n message: `Output path points to a system directory: \"${e}\".`,\n suggestion: \"Choose a safe output location within your project directory.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_NOT_FOUND: (e)=>({\n code: \"output-path-not-found\",\n message: `Output directory does not exist: \"${e}\".`,\n suggestion: \"Create the directory or update 'outputPath' to an existing location.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_NOT_WRITABLE: (e)=>({\n code: \"output-path-not-writable\",\n message: `Output directory is not writable: \"${e}\".`,\n suggestion: \"Check directory permissions or choose a different output location.\",\n severity: \"error\"\n }),\n CACHE_IN_NODE_MODULES: (e)=>({\n code: \"cache-in-node-modules\",\n message: `Cache location inside 'node_modules' is unsafe: \"${e}\". node_modules can be deleted, causing cache loss.`,\n suggestion: \"Use a different directory like '.cache' or 'node_modules/.cache/ngcompass'.\",\n severity: \"error\"\n }),\n CACHE_PARENT_NOT_FOUND: (e)=>({\n code: \"warn-cache-parent-not-found\",\n message: `Cache parent directory missing: \"${e}\". It will be created automatically.`,\n suggestion: \"No action needed. Directory will be created on first cache write.\",\n severity: \"warning\"\n }),\n INVALID_RULE_SEVERITY: (e, t)=>({\n code: \"invalid-rule-severity\",\n message: `Rule \"${e}\" has invalid severity: \"${t}\".`,\n suggestion: \"Use valid severities: 'off', 'info', 'low', 'moderate', 'high', or 'critical'.\",\n severity: \"error\"\n }),\n NO_RULES_CONFIGURED: ()=>({\n code: \"warn-no-rules-configured\",\n message: \"No rules configured. Analysis effectively skips checks.\",\n suggestion: \"Add rules to enable analysis, or extend from a preset like 'recommended'.\",\n severity: \"warning\"\n }),\n EMPTY_RULE_NAME: ()=>({\n code: \"empty-rule-name\",\n message: \"Empty rule name detected. Rule keys must be non-empty strings.\",\n suggestion: \"Remove empty keys from 'rules' configuration.\",\n severity: \"error\"\n }),\n PROFILE_CIRCULAR_INHERITANCE: (e)=>({\n code: \"profile-circular-inheritance\",\n message: `Circular profile inheritance detected: ${e.join(\" → \")}.`,\n suggestion: \"Break the circular dependency by removing one 'extends' reference.\",\n severity: \"error\"\n }),\n PROFILE_EMPTY: ()=>({\n code: \"warn-profile-empty\",\n message: \"Profiles section is defined but empty. Consider removing it.\",\n suggestion: \"Remove 'profiles: {}' or add at least one profile like 'dev' or 'ci'.\",\n severity: \"warning\"\n }),\n EXTENDS_NOT_FOUND: (e)=>({\n code: \"extends-not-found\",\n message: `Cannot resolve preset \"${e}\". Make sure the package is installed.`,\n suggestion: `Run: npm install --save-dev ${e}`,\n severity: \"error\"\n }),\n DEPRECATED_CACHE_LOCATION: ()=>({\n code: \"warn-deprecated-cache-location\",\n message: \"'cacheLocation' is deprecated. Use 'cache.location' instead.\",\n suggestion: \"Replace 'cacheLocation: \\\"...\\\"' with 'cache: { location: \\\"...\\\" }'.\",\n severity: \"warning\"\n }),\n DEPRECATED_CONCURRENCY: ()=>({\n code: \"warn-deprecated-concurrency\",\n message: \"'concurrency' is deprecated. Use 'maxWorkers' instead.\",\n suggestion: \"Replace 'concurrency: N' with 'maxWorkers: N'.\",\n severity: \"warning\"\n })\n};\n","import { MESSAGES as e } from \"../messages.js\";\nexport function validateConfigBlock(o, r, t = []) {\n let a = [];\n if (void 0 !== o.maxWorkers) {\n let s = 2 * r.os.cpus().length;\n o.maxWorkers < 1 ? a.push({\n ...e.WORKERS_BELOW_MINIMUM(),\n path: [\n ...t,\n \"maxWorkers\"\n ]\n }) : o.maxWorkers > s && a.push({\n ...e.WORKERS_EXCESSIVE(o.maxWorkers, s),\n path: [\n ...t,\n \"maxWorkers\"\n ]\n });\n }\n if (o.cache && \"object\" == typeof o.cache && void 0 !== o.cache.ttl) {\n let { ttl: r } = o.cache, s = [\n ...t,\n \"cache\",\n \"ttl\"\n ];\n r < 0 && a.push({\n ...e.NEGATIVE_CACHE_TTL(r),\n path: s\n });\n }\n return {\n issues: a\n };\n}\n","import { MESSAGES as s } from \"../messages.js\";\nimport { validateConfigBlock as e } from \"./base.js\";\nexport function validateCrossFields(i, r, t = []) {\n let a = [];\n if (void 0 !== i.maxWarnings) {\n let { maxWarnings: e } = i;\n e < 0 && a.push({\n ...s.NEGATIVE_MAX_WARNINGS(e),\n path: [\n ...t,\n \"maxWarnings\"\n ]\n });\n }\n let { issues: o } = e(i, r, t);\n return a.push(...o), {\n issues: a\n };\n}\n","import { createRequire as e } from \"node:module\";\nimport t from \"node:path\";\nimport r from \"node:process\";\nimport { MESSAGES as n } from \"../messages.js\";\nexport function validateExtendsChain(s, o = [], i = r.cwd()) {\n let l = [];\n if (!s.extends) return {\n issues: l\n };\n let u = Array.isArray(s.extends) ? s.extends : [\n s.extends\n ], d = Array.isArray(s.extends);\n for(let r = 0; r < u.length; r++){\n let s = u[r];\n if (!(\"string\" != typeof s || \"\" === s.trim() || function(e) {\n let r = e.startsWith(\".\"), n = t.isAbsolute(e), s = e.includes(\":\");\n return r || n || s;\n }(s)) && null === function(r, n) {\n try {\n let s = t.join(n, \"__resolve_anchor__.cjs\");\n return e(s).resolve(r);\n } catch {\n return null;\n }\n }(s, i)) {\n let e = [\n ...o,\n \"extends\"\n ];\n d && e.push(r), l.push({\n ...n.EXTENDS_NOT_FOUND(s),\n path: e\n });\n }\n }\n return {\n issues: l\n };\n}\n","import { minimatch as e } from \"minimatch\";\nimport { MESSAGES as t } from \"../messages.js\";\nlet n = /\\/\\/\\//, s = /\\{/g, l = /\\}/g;\nexport function validateGlobPatterns(r, i = []) {\n let h = [];\n for (let u of [\n \"include\",\n \"exclude\",\n \"ignorePatterns\"\n ]){\n let a = r[u];\n if (!Array.isArray(a)) continue;\n a.forEach((r, a)=>{\n h.push(...function(r, i, h, u) {\n let a = [], c = [\n ...u,\n r,\n h\n ];\n if (!i || \"\" === i.trim()) return a.push({\n ...t.EMPTY_GLOB_PATTERN(r),\n path: c\n }), a;\n if (i.includes(\"[\") && !i.includes(\"]\")) return a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"unclosed bracket\"),\n path: c\n }), a;\n if (n.test(i) || i.startsWith(\"///\")) return a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"invalid path pattern with multiple slashes\"),\n path: c\n }), a;\n (i.endsWith(\"\\\\\") || i.endsWith(\"/\")) && a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"trailing slash not allowed\"),\n path: c\n }), (i.match(s) || []).length !== (i.match(l) || []).length && a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"unmatched braces\"),\n path: c\n });\n try {\n e(\"sample.ts\", i);\n } catch (e) {\n a.push({\n ...t.INVALID_GLOB_PATTERN(i, e.message),\n path: c\n });\n }\n return a;\n }(u, r, a, i));\n });\n let c = a.filter((e, t)=>a.indexOf(e) !== t);\n c.length > 0 && h.push({\n ...t.DUPLICATE_PATTERNS(u, [\n ...new Set(c)\n ]),\n path: [\n ...i,\n u\n ]\n });\n }\n return r.include && 0 !== r.include.length || h.push({\n ...t.EMPTY_INCLUDE(),\n path: [\n ...i,\n \"include\"\n ]\n }), r.exclude && 0 !== r.exclude.length || h.push({\n ...t.EMPTY_EXCLUDE(),\n path: [\n ...i,\n \"exclude\"\n ]\n }), {\n issues: h\n };\n}\n","import * as s from \"node:fs\";\nimport { MESSAGES as e } from \"../messages.js\";\nlet t = [\n \"/etc/\",\n \"\\\\etc\\\\\",\n \"/var/\",\n \"\\\\var\\\\\"\n], c = \"node_modules\";\nexport function validatePaths(a, o, p = []) {\n let i = [], n = (s)=>o.path.isAbsolute(s) ? s : o.path.resolve(o.cwd ?? process.cwd(), s);\n if (a.outputPath) {\n let { outputPath: c } = a, h = [\n ...p,\n \"outputPath\"\n ];\n c.includes(\"..\") && i.push({\n ...e.OUTPUT_PATH_TRAVERSAL(c),\n path: h\n }), t.some((s)=>c.includes(s)) && i.push({\n ...e.OUTPUT_PATH_SYSTEM_DIR(c),\n path: h\n });\n let r = o.path.dirname(n(c));\n if (o.fs.existsSync(r)) try {\n o.fs.accessSync(r, s.constants.W_OK);\n } catch {\n i.push({\n ...e.OUTPUT_PATH_NOT_WRITABLE(r),\n path: h\n });\n }\n else i.push({\n ...e.OUTPUT_PATH_NOT_FOUND(r),\n path: h\n });\n }\n if (a.cache && \"object\" == typeof a.cache && a.cache.enabled) {\n let { location: s } = a.cache;\n if (s) {\n let t = [\n ...p,\n \"cache\",\n \"location\"\n ], a = s.includes(c), h = s.includes(`${c}/.cache`);\n a && !h && i.push({\n ...e.CACHE_IN_NODE_MODULES(s),\n path: t\n });\n let r = o.path.dirname(n(s));\n o.fs.existsSync(r) || i.push({\n ...e.CACHE_PARENT_NOT_FOUND(r),\n path: t\n });\n }\n }\n if (a.parserOptions) {\n let { project: s, tsconfigRootDir: t } = a.parserOptions, c = s ? n(s) : void 0, h = t ? n(t) : void 0;\n c && !o.fs.existsSync(c) && i.push({\n ...e.TSCONFIG_PROJECT_NOT_FOUND(s),\n path: [\n ...p,\n \"parserOptions\",\n \"project\"\n ]\n }), h && !o.fs.existsSync(h) && i.push({\n ...e.TSCONFIG_ROOT_NOT_FOUND(t),\n path: [\n ...p,\n \"parserOptions\",\n \"tsconfigRootDir\"\n ]\n });\n }\n return {\n issues: i\n };\n}\n","export const SEVERITY_LEVELS = {\n info: 0,\n low: 1,\n warning: 2,\n warn: 2,\n moderate: 2,\n high: 3,\n error: 4,\n critical: 4\n};\nexport const VALID_SEVERITIES = Object.keys(SEVERITY_LEVELS);\nexport const VALID_RULE_SEVERITIES = [\n ...VALID_SEVERITIES,\n \"off\"\n];\n","import { VALID_RULE_SEVERITIES as e } from \"../constants.js\";\nimport { MESSAGES as t } from \"../messages.js\";\nexport function validateRules(s, r = []) {\n let n = [], l = Array.isArray(s.extends) ? s.extends.length > 0 : !!s.extends && s.extends.length > 0, u = Object.entries(s.rules || {});\n for (let [s, i] of (u.length > 0 || l || n.push({\n ...t.NO_RULES_CONFIGURED(),\n path: [\n ...r,\n \"rules\"\n ]\n }), u)){\n if (!s || \"\" === s.trim()) {\n n.push({\n ...t.EMPTY_RULE_NAME(),\n path: [\n ...r,\n \"rules\"\n ]\n });\n continue;\n }\n if (\"object\" == typeof i && null !== i) {\n let { severity: l } = i;\n l && !e.includes(l) && n.push({\n ...t.INVALID_RULE_SEVERITY(s, l),\n path: [\n ...r,\n \"rules\",\n s,\n \"severity\"\n ]\n });\n }\n }\n return {\n issues: n\n };\n}\n","import { MESSAGES as c } from \"../messages.js\";\nexport function validateDeprecatedFields(e, o = []) {\n let n = [];\n return e && \"object\" == typeof e && (\"cacheLocation\" in e && void 0 !== e.cacheLocation && n.push({\n ...c.DEPRECATED_CACHE_LOCATION(),\n path: [\n ...o,\n \"cacheLocation\"\n ]\n }), \"concurrency\" in e && void 0 !== e.concurrency && n.push({\n ...c.DEPRECATED_CONCURRENCY(),\n path: [\n ...o,\n \"concurrency\"\n ]\n })), {\n issues: n\n };\n}\n","import { ASTUtils as t, CACHE_VERSION as e } from \"@ngcompass/common\";\nimport n from \"node:crypto\";\nfunction buildLocationMap(e, n) {\n let o = t.parse(e, n);\n return t.generateLocationMap(o);\n}\nasync function resolveLocationMap(t, n, o, a) {\n if (!o) return buildLocationMap(t, n);\n let i = `v${e}:${a}`, r = await o.get(i);\n if (r) return r.ast;\n let c = buildLocationMap(t, n);\n return await o.set(i, {\n filePath: n,\n ast: c\n }), c;\n}\nexport async function enrichIssueLocations(t, e, o, a, i) {\n if (0 === t.length) return;\n let r = i ?? n.createHash(\"sha1\").update(e).digest(\"hex\"), c = await resolveLocationMap(e, o, a, r);\n for (let e of t){\n if (e.file || (e.file = o), !((!e.line || 1 === e.line) && e.path)) continue;\n let t = c[e.path.join(\".\")];\n t && (e.line = t.line, e.column = t.column);\n }\n}\n","import { defu as e } from \"defu\";\nimport { AnalyzerConfigSchema as s } from \"../schemas/schema.js\";\nimport { createDefaultContext as r } from \"./context.js\";\nimport { validateCrossFields as i, validateExtendsChain as t, validateGlobPatterns as a, validatePaths as o, validateRules as n, validateDeprecatedFields as l } from \"./checks/index.js\";\nimport { enrichIssueLocations as c } from \"./enricher.js\";\nlet BUILTIN_PRESETS = new Set([\n \"recommended\",\n \"strict\",\n \"performance\",\n \"reactivity\",\n \"all\"\n]);\nasync function attachFileLocations(e, s, r, i, t) {\n if (r) return void await c(e, r, s, i, t);\n for (let r of e)r.file || (r.file = s);\n}\nfunction buildValidationResult(e, s) {\n let r, i = [\n ...(r = new Set(), e.filter((e)=>{\n let s = `${e.code}:${e.message}:${JSON.stringify(e.path)}`;\n return !r.has(s) && (r.add(s), !0);\n }))\n ].sort((e, s)=>e.severity === s.severity ? 0 : \"error\" === e.severity ? -1 : 1), t = !i.some((e)=>\"error\" === e.severity);\n return {\n config: t ? s : void 0,\n report: {\n valid: t,\n issues: i\n }\n };\n}\nasync function validateBlock(e) {\n let r, { config: c, context: u, basePath: f = [], filePath: d, fileContent: p, astCache: m, contentHash: v } = e, { issues: h, validated: g, success: y } = (r = s.safeParse(c)).success ? {\n issues: [],\n validated: r.data,\n success: !0\n } : {\n issues: r.error.issues.map((e)=>({\n code: e.code.replace(/_/g, \"-\"),\n message: e.message,\n path: [\n ...f,\n ...e.path\n ],\n severity: \"error\",\n file: d\n })),\n validated: c,\n success: !1\n }, $ = [\n ...h,\n ...function(e, s, r, c, u) {\n let f = [];\n for (let d of [\n {\n name: \"cross-fields\",\n run: ()=>i(e, r, c).issues\n },\n {\n name: \"glob-patterns\",\n run: ()=>a(e, c).issues\n },\n {\n name: \"paths\",\n run: ()=>o(e, r, c).issues\n },\n {\n name: \"rules\",\n run: ()=>n(e, c).issues\n },\n {\n name: \"extends-chain\",\n run: ()=>t(e, c, r.cwd).issues\n },\n {\n name: \"deprecated\",\n run: ()=>l(s, c).issues\n }\n ])try {\n f.push(...d.run());\n } catch (e) {\n f.push({\n code: \"check-failed\",\n message: `Check \"${d.name}\" encountered an unexpected error: ${e.message}`,\n path: c,\n severity: \"error\",\n file: u\n });\n }\n return f;\n }(g, c, u, f, d)\n ];\n return d && await attachFileLocations($, d, p, m, v), {\n issues: $,\n validated: y ? g : void 0\n };\n}\nexport async function validateConfiguration(s, i = r(), t, a, o, n) {\n var l;\n let c = {\n context: i,\n filePath: t,\n fileContent: a,\n astCache: o,\n contentHash: n\n }, u = null === s || \"object\" != typeof s ? {} : s.profiles ?? {};\n if (i.profile) {\n let r = u[i.profile];\n if (!r) {\n let e, s;\n return l = i.profile, e = Object.keys(u).join(\", \"), s = BUILTIN_PRESETS.has(l.replace(/^ngcompass:/, \"\")) ? ` \"${l}\" is a built-in preset, not a config profile. Use 'extends: \"ngcompass:${l.replace(/^ngcompass:/, \"\")}\"' in your config instead.` : \"\", {\n config: void 0,\n report: {\n valid: !1,\n issues: [\n {\n code: \"error-profile-not-found\",\n message: `Profile \"${l}\" not found. Available: [${e}]${s}`,\n path: [\n \"profiles\",\n l\n ],\n severity: \"error\",\n file: t\n }\n ]\n }\n };\n }\n let a = e(r, s), { issues: o, validated: n } = await validateBlock({\n ...c,\n config: a,\n basePath: [\n \"profiles\",\n i.profile\n ]\n });\n return buildValidationResult(o, n);\n }\n let { issues: f, validated: d } = await validateBlock({\n ...c,\n config: s\n });\n return buildValidationResult(f, d);\n}\n","import { findAndLoadConfig as o } from './discovery.js';\nimport { validateConfiguration as t } from '../health/index.js';\nimport { createDefaultContext as e } from '../health/context.js';\nimport { PACKAGE_VERSION as n, CACHE_VERSION as i, debug as r, time as a, timeEnd as s } from '@ngcompass/common';\nimport l from 'node:process';\nexport const resolveConfig = async (t)=>{\n a('config-resolution');\n let { cwd: e = l.cwd(), profile: n, cache: i } = t;\n r('loader', `Starting config resolution (cwd: ${e}, profile: ${n || 'none'})`);\n let c = await o(e), { hash: d, cachedResult: u } = await tryLoadFromCache(c, n, i);\n if (u) {\n let o = s('config-resolution');\n return r('loader', `Cache HIT - returning cached result (${o.toFixed(1)}ms)`), u;\n }\n r('loader', 'Cache MISS - running validation');\n let f = await runValidation(c, n, i);\n r('loader', `Validation complete: ${f.report.valid ? 'valid' : `invalid (${f.report.issues.length} issues)`}`), i && d && (await i.configs.set(d, f), r('loader', `Cached validation result: key=${d.substring(0, 8)}...`));\n let m = s('config-resolution');\n return r('loader', `Config resolution complete: ${m.toFixed(1)}ms`), f;\n};\nasync function tryLoadFromCache(o, t, e) {\n if (!e) return {};\n let a = [\n o?.contentHash ?? '',\n t ?? '',\n n,\n i\n ].join('::'), s = e.computeHash(a);\n r('loader', `Cache lookup: key=${s.substring(0, 8)}...`);\n let l = await e.configs.get(s);\n return {\n hash: s,\n cachedResult: l\n };\n}\nasync function runValidation(o, n, i) {\n return t(o?.config ?? {}, e({\n profile: n\n }), o?.filepath, o?.content, i?.asts, o?.contentHash);\n}\n","import e from 'node:fs/promises';\nimport s from 'node:path';\nimport { findAndLoadConfig as r } from '../loaders/discovery.js';\nexport class ConfigExistsError extends Error {\n constructor(e){\n super(`Configuration file already exists at: ${e}`), this.name = 'ConfigExistsError';\n }\n}\nlet TEMPLATE = `import { defineConfig } from '@ngcompass/config';\n\nexport default defineConfig({\n extends: 'ngcompass:recommended',\n\n include: [\n 'src/**/*.ts',\n 'src/**/*.html',\n ],\n\n exclude: [\n 'node_modules/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n '**/*.d.ts',\n '**/*.spec.ts',\n '**/*.test.ts',\n ],\n\n profiles: {\n ci: {\n outputFormat: 'json',\n maxWarnings: 0,\n },\n },\n});\n`;\nexport async function initConfig(t = {}) {\n let o = t.cwd ?? process.cwd(), i = s.join(o, 'ngcompass.config.ts'), n = await r(o);\n if (n && !t.force) return {\n success: !1,\n filePath: n.filepath,\n alreadyExists: !0\n };\n try {\n return await e.writeFile(i, TEMPLATE, 'utf-8'), {\n success: !0,\n filePath: i\n };\n } catch (e) {\n return {\n success: !1,\n filePath: i\n };\n }\n}\n","import { resolveConfig as r } from '../loaders/loader.js';\nexport async function validateConfig(e = {}) {\n try {\n return await r(e);\n } catch (r) {\n return {\n config: void 0,\n report: {\n valid: !1,\n issues: [\n {\n code: \"error-conf-semantic\",\n message: r instanceof Error ? r.message : String(r),\n path: [],\n severity: \"error\"\n }\n ]\n }\n };\n }\n}\n","export function defineConfig(n) {\n return n;\n}\n","import { createRequire as e } from 'node:module';\nimport { warn as r, debug as n, PACKAGE_VERSION as t } from '@ngcompass/common';\nlet DEFAULT_CAPABILITIES = {\n typeCheckingEnabled: !1,\n templateASTEnabled: !0,\n cssASTEnabled: !0\n};\nexport const loadPlugins = async (l, i, a, o = DEFAULT_CAPABILITIES)=>{\n if (0 === l.length) return;\n n('plugin-loader', `Initializing loader for ${l.length} plugin(s) at ${i}`);\n let u = e(i + '/package.json'), s = [];\n for (let e of l)try {\n let l;\n try {\n l = u.resolve(e);\n } catch {\n l = e;\n }\n let i = await import(l), s = i.default ?? i, f = Array.isArray(s) ? s : [\n s\n ], c = 0;\n for (let l of f){\n if (!function(e) {\n if (!e || 'object' != typeof e) return !1;\n let r = e.handler;\n return 'string' == typeof e.name && e.name.length > 0 && r?.handle instanceof Function;\n }(l)) {\n r('plugin-loader', `Plugin \"${e}\" exported an invalid structure. Skipping.`);\n continue;\n }\n let { manifest: i } = l;\n if (i) {\n let e = function(e, r) {\n let n = function(e, r, n, t) {\n let l = r.trim();\n if (!l || '*' === l) return null;\n let i = parseVersion(e);\n if (!i) return null;\n let a = l.startsWith('^') ? function(e) {\n let r = parseVersion(e);\n return r ? `>=${e} <${r[0] + 1}.0.0` : null;\n }(l.slice(1)) : l;\n if (!a) return null;\n for (let l of a.split(/\\s+/).filter(Boolean)){\n let a = l.match(/^(>=|<=|>|<|=|==)(\\d+\\.\\d+\\.\\d+.*)$/);\n if (!a) continue;\n let o = a[1], u = parseVersion(a[2]);\n if (!u) continue;\n let s = function(e, r) {\n for(let n = 0; n < 3; n++)if (e[n] !== r[n]) return e[n] > r[n] ? 1 : -1;\n return 0;\n }(i, u);\n if (!('>=' === o ? s >= 0 : '<=' === o ? s <= 0 : '>' === o ? s > 0 : '<' === o ? s < 0 : 0 === s)) return `Plugin \"${n}@${t}\" requires engine \"${r}\", found \"${e}\".`;\n }\n return null;\n }(t.replace(/^v/, ''), e.engineVersionRange, e.name, e.version);\n if (n) return n;\n for (let n of [\n {\n key: 'requiresTypeInfo',\n current: r.typeCheckingEnabled,\n label: 'Type Information'\n },\n {\n key: 'requiresTemplateAST',\n current: r.templateASTEnabled,\n label: 'Template AST'\n },\n {\n key: 'requiresCssAST',\n current: r.cssASTEnabled,\n label: 'CSS AST'\n }\n ])if (e.capabilities?.[n.key] && !n.current) return `Plugin \"${e.name}@${e.version}\" requires ${n.label} support, which is currently disabled.`;\n return null;\n }(i, o);\n if (e) throw Error(e);\n n('plugin-loader', `❯ Validated: ${i.name}@${i.version}`);\n } else r('plugin-loader', `Plugin \"${e}\" is missing a manifest. Please update for future compatibility.`);\n a.register(l), c++, n('plugin-loader', `❯ Registered Rule: ${l.name}`);\n }\n n('plugin-loader', `Plugin \"${e}\" processed: ${c} rules active.`);\n } catch (n) {\n let r = n instanceof Error ? n.message : String(n);\n s.push(`- \"${e}\": ${r}`);\n }\n if (s.length > 0) throw Error(`[ngcompass] Plugin Load Failure:\\n${s.join('\\n')}\\nEnsure plugins are installed and satisfy version requirements.`);\n};\nfunction parseVersion(e) {\n let r = e.trim().match(/^v?\\.?(\\d+)\\.(\\d+)\\.(\\d+)(?:[-+].*)?$/);\n return r ? [\n Number(r[1]),\n Number(r[2]),\n Number(r[3])\n ] : null;\n}\n"]}
@@ -0,0 +1,275 @@
1
+ import { z } from 'zod';
2
+ import { ConfigValidationResult, ConfigIssue, CacheOptions, OutputFormat, FailSeverity, InitResult, AnalyzerConfig as AnalyzerConfig$1, RuleRegistry } from '@ngcompass/common';
3
+ import { CacheContext, AstCache } from '@ngcompass/cache';
4
+
5
+ /**
6
+ * Base Analyzer Configuration Schema
7
+ * Defines the core fields available in both the root configuration and profiles.
8
+ */
9
+ declare const BaseAnalyzerConfigSchema: z.ZodObject<{
10
+ extends: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
11
+ include: z.ZodDefault<z.ZodArray<z.ZodString>>;
12
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString>>;
13
+ maxWorkers: z.ZodOptional<z.ZodNumber>;
14
+ concurrency: z.ZodOptional<z.ZodNumber>;
15
+ cache: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
16
+ enabled: z.ZodOptional<z.ZodBoolean>;
17
+ location: z.ZodOptional<z.ZodString>;
18
+ strategy: z.ZodOptional<z.ZodEnum<{
19
+ local: "local";
20
+ memory: "memory";
21
+ }>>;
22
+ ttl: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>]>>;
24
+ cacheLocation: z.ZodOptional<z.ZodString>;
25
+ outputFormat: z.ZodDefault<z.ZodEnum<{
26
+ text: "text";
27
+ json: "json";
28
+ sarif: "sarif";
29
+ html: "html";
30
+ }>>;
31
+ outputPath: z.ZodOptional<z.ZodString>;
32
+ failOnSeverity: z.ZodDefault<z.ZodEnum<{
33
+ error: "error";
34
+ warn: "warn";
35
+ }>>;
36
+ maxWarnings: z.ZodDefault<z.ZodNumber>;
37
+ ignorePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
38
+ rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
39
+ error: "error";
40
+ warn: "warn";
41
+ }>, z.ZodLiteral<"off">, z.ZodObject<{
42
+ severity: z.ZodUnion<readonly [z.ZodEnum<{
43
+ error: "error";
44
+ warn: "warn";
45
+ }>, z.ZodLiteral<"off">]>;
46
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
47
+ }, z.core.$strip>]>>>;
48
+ overrides: z.ZodOptional<z.ZodArray<z.ZodObject<{
49
+ files: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
50
+ rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
51
+ error: "error";
52
+ warn: "warn";
53
+ }>, z.ZodLiteral<"off">, z.ZodObject<{
54
+ severity: z.ZodUnion<readonly [z.ZodEnum<{
55
+ error: "error";
56
+ warn: "warn";
57
+ }>, z.ZodLiteral<"off">]>;
58
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
59
+ }, z.core.$strip>]>>>;
60
+ }, z.core.$strip>>>;
61
+ parserOptions: z.ZodOptional<z.ZodObject<{
62
+ project: z.ZodOptional<z.ZodString>;
63
+ tsconfigRootDir: z.ZodOptional<z.ZodString>;
64
+ sourceType: z.ZodOptional<z.ZodEnum<{
65
+ module: "module";
66
+ commonjs: "commonjs";
67
+ }>>;
68
+ ecmaVersion: z.ZodOptional<z.ZodNumber>;
69
+ }, z.core.$strip>>;
70
+ }, z.core.$strip>;
71
+ /**
72
+ * Exported Types
73
+ * Derived from the Zod schemas to ensure type sync.
74
+ */
75
+ type AnalyzerConfig = z.infer<typeof BaseAnalyzerConfigSchema> & {
76
+ profiles?: Record<string, unknown>;
77
+ };
78
+ /**
79
+ * Profile Schema
80
+ * Profiles allow partial overrides of the base configuration.
81
+ */
82
+ declare const ProfileConfigSchema: z.ZodType<Partial<z.infer<typeof BaseAnalyzerConfigSchema>>>;
83
+ /**
84
+ * Main Analyzer Config Schema
85
+ * This schema handles the 'normalization' phase. It resolves aliases,
86
+ * merges defaults with cache settings, and ensures non-nullable arrays.
87
+ */
88
+ declare const AnalyzerConfigSchema: z.ZodType<AnalyzerConfig>;
89
+
90
+ interface ValidateConfigOptions {
91
+ cwd?: string;
92
+ profile?: string;
93
+ cache?: CacheContext;
94
+ }
95
+ declare function validateConfig(options?: ValidateConfigOptions): Promise<ConfigValidationResult>;
96
+
97
+ /**
98
+ * Resolves the configuration by searching, merging profiles, and performing full validation.
99
+ *
100
+ * Cache key formula (RFC §7.1):
101
+ * key = computeHash(
102
+ * contentHash // SHA-1 of raw config file bytes — catches any content change
103
+ * + "::" + (profile ?? "") // profile name (empty string for default)
104
+ * + "::" + toolVersion // package version — invalidates on tool upgrade
105
+ * + "::" + schemaVersion // CACHE_VERSION — invalidates on schema change
106
+ * )
107
+ */
108
+ declare const resolveConfig: (options: ValidateConfigOptions) => Promise<ConfigValidationResult>;
109
+
110
+ type ValidatedConfig = ReturnType<typeof AnalyzerConfigSchema.parse>;
111
+ type CacheConfig = ValidatedConfig["cache"];
112
+ interface ValidationContext {
113
+ profile?: string;
114
+ /** Working directory used for module resolution (e.g. extends chain). Defaults to process.cwd(). */
115
+ cwd?: string;
116
+ fs: {
117
+ existsSync: (path: string) => boolean;
118
+ accessSync: (path: string, mode: number) => void;
119
+ };
120
+ os: {
121
+ cpus: () => Array<{
122
+ model: string;
123
+ }>;
124
+ };
125
+ path: {
126
+ dirname: (p: string) => string;
127
+ resolve: (...paths: string[]) => string;
128
+ isAbsolute: (p: string) => boolean;
129
+ };
130
+ }
131
+ interface ConfigBlock {
132
+ maxWorkers?: number;
133
+ cache?: CacheConfig;
134
+ }
135
+ interface ConfigBlockValidation {
136
+ issues: ConfigIssue[];
137
+ }
138
+
139
+ /**
140
+ * Validates a raw configuration object against the full schema and semantic rule set.
141
+ *
142
+ * When a `context.profile` is specified the matching profile is deep-merged over
143
+ * the base config before validation, so profile-level overrides are respected.
144
+ *
145
+ * @param rawConfig - The raw, unparsed configuration (from file or programmatic source).
146
+ * @param context - Runtime validation context supplying fs/os/path abstractions.
147
+ * @param filePath - Source file path; used for issue attribution and location enrichment.
148
+ * @param fileContent - Raw file text; required for accurate line/column enrichment.
149
+ * @param astCache - Optional AST cache to avoid redundant parses during enrichment.
150
+ * @param contentHash - Optional content hash to key the AST cache lookup.
151
+ * @returns A `ConfigValidationResult` with the resolved config (if valid) and the issue report.
152
+ */
153
+ declare function validateConfiguration(rawConfig: unknown, context?: ValidationContext, filePath?: string, fileContent?: string, astCache?: AstCache, contentHash?: string): Promise<ConfigValidationResult>;
154
+
155
+ declare function createDefaultContext(overrides?: Partial<ValidationContext>): ValidationContext;
156
+
157
+ type IssueTemplate = Omit<ConfigIssue, 'path'>;
158
+ declare const MESSAGES: {
159
+ NEGATIVE_MAX_WARNINGS: (val: number) => IssueTemplate;
160
+ WORKERS_BELOW_MINIMUM: () => IssueTemplate;
161
+ NEGATIVE_CACHE_TTL: (val: number) => IssueTemplate;
162
+ WORKERS_EXCESSIVE: (workers: number, limit: number) => IssueTemplate;
163
+ CACHE_TTL_ZERO: () => IssueTemplate;
164
+ INVALID_GLOB_PATTERN: (pattern: string, error: string) => IssueTemplate;
165
+ EMPTY_INCLUDE: () => IssueTemplate;
166
+ EMPTY_EXCLUDE: () => IssueTemplate;
167
+ DUPLICATE_PATTERNS: (field: string, patterns: string[]) => IssueTemplate;
168
+ EMPTY_GLOB_PATTERN: (field: string) => IssueTemplate;
169
+ TSCONFIG_ROOT_NOT_FOUND: (p: string) => IssueTemplate;
170
+ TSCONFIG_PROJECT_NOT_FOUND: (p: string) => IssueTemplate;
171
+ OUTPUT_PATH_TRAVERSAL: (p: string) => IssueTemplate;
172
+ OUTPUT_PATH_SYSTEM_DIR: (p: string) => IssueTemplate;
173
+ OUTPUT_PATH_NOT_FOUND: (dir: string) => IssueTemplate;
174
+ OUTPUT_PATH_NOT_WRITABLE: (dir: string) => IssueTemplate;
175
+ CACHE_IN_NODE_MODULES: (location: string) => IssueTemplate;
176
+ CACHE_PARENT_NOT_FOUND: (dir: string) => IssueTemplate;
177
+ INVALID_RULE_SEVERITY: (ruleName: string, severity: string) => IssueTemplate;
178
+ NO_RULES_CONFIGURED: () => IssueTemplate;
179
+ EMPTY_RULE_NAME: () => IssueTemplate;
180
+ PROFILE_CIRCULAR_INHERITANCE: (chain: string[]) => IssueTemplate;
181
+ PROFILE_EMPTY: () => IssueTemplate;
182
+ EXTENDS_NOT_FOUND: (preset: string) => IssueTemplate;
183
+ DEPRECATED_CACHE_LOCATION: () => IssueTemplate;
184
+ DEPRECATED_CONCURRENCY: () => IssueTemplate;
185
+ };
186
+
187
+ declare const SEVERITY_LEVELS: Record<string, number>;
188
+ declare const VALID_SEVERITIES: string[];
189
+ declare const VALID_RULE_SEVERITIES: string[];
190
+
191
+ /**
192
+ * Performs a comprehensive validation of a configuration block, which can represent
193
+ * either the root configuration or a specific profile.
194
+ *
195
+ * @param block - The configuration object to validate.
196
+ * @param context - The validation context providing access to environmental data like CPU count.
197
+ * @param basePath - The breadcrumb path used for accurate error reporting in nested structures.
198
+ * @returns A validation result object containing any discovered issues.
199
+ */
200
+ declare function validateConfigBlock(block: ConfigBlock, context: ValidationContext, basePath?: (string | number)[]): ConfigBlockValidation;
201
+
202
+ /**
203
+ * Calculates the recommended default number of worker threads based on
204
+ * the host's hardware. It reserves at least one core for the main
205
+ * process to ensure system responsiveness during heavy analysis.
206
+ *
207
+ * @returns {number} The suggested number of CPU cores to utilize.
208
+ */
209
+ declare const getDefaultMaxWorkers: () => number;
210
+ /**
211
+ * Standard configuration for the persistent caching layer.
212
+ * These settings determine where analysis results are stored and
213
+ * how long they remain valid before expiration.
214
+ */
215
+ declare const DEFAULT_CACHE_OPTIONS: Required<CacheOptions>;
216
+ /**
217
+ * Default global configuration values for the ngcompass engine.
218
+ * These values are used as the baseline when a user-provided
219
+ * configuration is missing specific keys.
220
+ */
221
+ declare const DEFAULT_CONFIG: {
222
+ readonly outputFormat: OutputFormat;
223
+ readonly failOnSeverity: FailSeverity;
224
+ readonly maxWarnings: 10;
225
+ readonly include: readonly ["src/**/*.ts"];
226
+ readonly exclude: readonly ["node_modules/**", "dist/**", "**/*.spec.ts", "**/*.test.ts"];
227
+ };
228
+
229
+ declare class ConfigExistsError extends Error {
230
+ constructor(path: string);
231
+ }
232
+ interface InitOptions {
233
+ cwd?: string;
234
+ force?: boolean;
235
+ }
236
+ declare function initConfig(options?: InitOptions): Promise<InitResult>;
237
+
238
+ /**
239
+ * Discovery result interface.
240
+ */
241
+ interface ConfigDiscoveryResult {
242
+ config: unknown;
243
+ filepath: string;
244
+ content: string;
245
+ contentHash: string;
246
+ isEmpty?: boolean;
247
+ }
248
+ /**
249
+ * Finds and loads the configuration file.
250
+ */
251
+ declare const findAndLoadConfig: (cwd?: string) => Promise<ConfigDiscoveryResult | null>;
252
+
253
+ declare function defineConfig<TConfig extends AnalyzerConfig$1>(config: TConfig): TConfig;
254
+
255
+ /**
256
+ * Engine capabilities available at load time.
257
+ * These are used to ensure a plugin doesn't request a feature (like Type Checking)
258
+ * that isn't currently active in the engine.
259
+ */
260
+ interface EngineCapabilities {
261
+ readonly typeCheckingEnabled: boolean;
262
+ readonly templateASTEnabled: boolean;
263
+ readonly cssASTEnabled: boolean;
264
+ }
265
+ /**
266
+ * Orchestrates the resolution, importing, and registration of external rule plugins.
267
+ * * @param plugins - Specifiers for plugins (npm packages or relative paths).
268
+ * @param configDir - The directory of the configuration file, used as the resolution root.
269
+ * @param registry - The registry where validated rules will be stored.
270
+ * @param capabilities - The current engine feature set for compatibility checks.
271
+ * * @throws {Error} Aggregate error if one or more plugins fail to load or validate.
272
+ */
273
+ declare const loadPlugins: (plugins: string[], configDir: string, registry: RuleRegistry, capabilities?: EngineCapabilities) => Promise<void>;
274
+
275
+ export { type AnalyzerConfig, AnalyzerConfigSchema, type CacheConfig, type ConfigBlock, type ConfigBlockValidation, type ConfigDiscoveryResult, ConfigExistsError, DEFAULT_CACHE_OPTIONS, DEFAULT_CONFIG, type InitOptions, MESSAGES, ProfileConfigSchema, SEVERITY_LEVELS, VALID_RULE_SEVERITIES, VALID_SEVERITIES, type ValidateConfigOptions, type ValidatedConfig, type ValidationContext, createDefaultContext, defineConfig, findAndLoadConfig, getDefaultMaxWorkers, initConfig, loadPlugins, resolveConfig, validateConfig, validateConfigBlock, validateConfiguration };
@@ -0,0 +1,275 @@
1
+ import { z } from 'zod';
2
+ import { ConfigValidationResult, ConfigIssue, CacheOptions, OutputFormat, FailSeverity, InitResult, AnalyzerConfig as AnalyzerConfig$1, RuleRegistry } from '@ngcompass/common';
3
+ import { CacheContext, AstCache } from '@ngcompass/cache';
4
+
5
+ /**
6
+ * Base Analyzer Configuration Schema
7
+ * Defines the core fields available in both the root configuration and profiles.
8
+ */
9
+ declare const BaseAnalyzerConfigSchema: z.ZodObject<{
10
+ extends: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
11
+ include: z.ZodDefault<z.ZodArray<z.ZodString>>;
12
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString>>;
13
+ maxWorkers: z.ZodOptional<z.ZodNumber>;
14
+ concurrency: z.ZodOptional<z.ZodNumber>;
15
+ cache: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
16
+ enabled: z.ZodOptional<z.ZodBoolean>;
17
+ location: z.ZodOptional<z.ZodString>;
18
+ strategy: z.ZodOptional<z.ZodEnum<{
19
+ local: "local";
20
+ memory: "memory";
21
+ }>>;
22
+ ttl: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>]>>;
24
+ cacheLocation: z.ZodOptional<z.ZodString>;
25
+ outputFormat: z.ZodDefault<z.ZodEnum<{
26
+ text: "text";
27
+ json: "json";
28
+ sarif: "sarif";
29
+ html: "html";
30
+ }>>;
31
+ outputPath: z.ZodOptional<z.ZodString>;
32
+ failOnSeverity: z.ZodDefault<z.ZodEnum<{
33
+ error: "error";
34
+ warn: "warn";
35
+ }>>;
36
+ maxWarnings: z.ZodDefault<z.ZodNumber>;
37
+ ignorePatterns: z.ZodOptional<z.ZodArray<z.ZodString>>;
38
+ rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
39
+ error: "error";
40
+ warn: "warn";
41
+ }>, z.ZodLiteral<"off">, z.ZodObject<{
42
+ severity: z.ZodUnion<readonly [z.ZodEnum<{
43
+ error: "error";
44
+ warn: "warn";
45
+ }>, z.ZodLiteral<"off">]>;
46
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
47
+ }, z.core.$strip>]>>>;
48
+ overrides: z.ZodOptional<z.ZodArray<z.ZodObject<{
49
+ files: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
50
+ rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodEnum<{
51
+ error: "error";
52
+ warn: "warn";
53
+ }>, z.ZodLiteral<"off">, z.ZodObject<{
54
+ severity: z.ZodUnion<readonly [z.ZodEnum<{
55
+ error: "error";
56
+ warn: "warn";
57
+ }>, z.ZodLiteral<"off">]>;
58
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
59
+ }, z.core.$strip>]>>>;
60
+ }, z.core.$strip>>>;
61
+ parserOptions: z.ZodOptional<z.ZodObject<{
62
+ project: z.ZodOptional<z.ZodString>;
63
+ tsconfigRootDir: z.ZodOptional<z.ZodString>;
64
+ sourceType: z.ZodOptional<z.ZodEnum<{
65
+ module: "module";
66
+ commonjs: "commonjs";
67
+ }>>;
68
+ ecmaVersion: z.ZodOptional<z.ZodNumber>;
69
+ }, z.core.$strip>>;
70
+ }, z.core.$strip>;
71
+ /**
72
+ * Exported Types
73
+ * Derived from the Zod schemas to ensure type sync.
74
+ */
75
+ type AnalyzerConfig = z.infer<typeof BaseAnalyzerConfigSchema> & {
76
+ profiles?: Record<string, unknown>;
77
+ };
78
+ /**
79
+ * Profile Schema
80
+ * Profiles allow partial overrides of the base configuration.
81
+ */
82
+ declare const ProfileConfigSchema: z.ZodType<Partial<z.infer<typeof BaseAnalyzerConfigSchema>>>;
83
+ /**
84
+ * Main Analyzer Config Schema
85
+ * This schema handles the 'normalization' phase. It resolves aliases,
86
+ * merges defaults with cache settings, and ensures non-nullable arrays.
87
+ */
88
+ declare const AnalyzerConfigSchema: z.ZodType<AnalyzerConfig>;
89
+
90
+ interface ValidateConfigOptions {
91
+ cwd?: string;
92
+ profile?: string;
93
+ cache?: CacheContext;
94
+ }
95
+ declare function validateConfig(options?: ValidateConfigOptions): Promise<ConfigValidationResult>;
96
+
97
+ /**
98
+ * Resolves the configuration by searching, merging profiles, and performing full validation.
99
+ *
100
+ * Cache key formula (RFC §7.1):
101
+ * key = computeHash(
102
+ * contentHash // SHA-1 of raw config file bytes — catches any content change
103
+ * + "::" + (profile ?? "") // profile name (empty string for default)
104
+ * + "::" + toolVersion // package version — invalidates on tool upgrade
105
+ * + "::" + schemaVersion // CACHE_VERSION — invalidates on schema change
106
+ * )
107
+ */
108
+ declare const resolveConfig: (options: ValidateConfigOptions) => Promise<ConfigValidationResult>;
109
+
110
+ type ValidatedConfig = ReturnType<typeof AnalyzerConfigSchema.parse>;
111
+ type CacheConfig = ValidatedConfig["cache"];
112
+ interface ValidationContext {
113
+ profile?: string;
114
+ /** Working directory used for module resolution (e.g. extends chain). Defaults to process.cwd(). */
115
+ cwd?: string;
116
+ fs: {
117
+ existsSync: (path: string) => boolean;
118
+ accessSync: (path: string, mode: number) => void;
119
+ };
120
+ os: {
121
+ cpus: () => Array<{
122
+ model: string;
123
+ }>;
124
+ };
125
+ path: {
126
+ dirname: (p: string) => string;
127
+ resolve: (...paths: string[]) => string;
128
+ isAbsolute: (p: string) => boolean;
129
+ };
130
+ }
131
+ interface ConfigBlock {
132
+ maxWorkers?: number;
133
+ cache?: CacheConfig;
134
+ }
135
+ interface ConfigBlockValidation {
136
+ issues: ConfigIssue[];
137
+ }
138
+
139
+ /**
140
+ * Validates a raw configuration object against the full schema and semantic rule set.
141
+ *
142
+ * When a `context.profile` is specified the matching profile is deep-merged over
143
+ * the base config before validation, so profile-level overrides are respected.
144
+ *
145
+ * @param rawConfig - The raw, unparsed configuration (from file or programmatic source).
146
+ * @param context - Runtime validation context supplying fs/os/path abstractions.
147
+ * @param filePath - Source file path; used for issue attribution and location enrichment.
148
+ * @param fileContent - Raw file text; required for accurate line/column enrichment.
149
+ * @param astCache - Optional AST cache to avoid redundant parses during enrichment.
150
+ * @param contentHash - Optional content hash to key the AST cache lookup.
151
+ * @returns A `ConfigValidationResult` with the resolved config (if valid) and the issue report.
152
+ */
153
+ declare function validateConfiguration(rawConfig: unknown, context?: ValidationContext, filePath?: string, fileContent?: string, astCache?: AstCache, contentHash?: string): Promise<ConfigValidationResult>;
154
+
155
+ declare function createDefaultContext(overrides?: Partial<ValidationContext>): ValidationContext;
156
+
157
+ type IssueTemplate = Omit<ConfigIssue, 'path'>;
158
+ declare const MESSAGES: {
159
+ NEGATIVE_MAX_WARNINGS: (val: number) => IssueTemplate;
160
+ WORKERS_BELOW_MINIMUM: () => IssueTemplate;
161
+ NEGATIVE_CACHE_TTL: (val: number) => IssueTemplate;
162
+ WORKERS_EXCESSIVE: (workers: number, limit: number) => IssueTemplate;
163
+ CACHE_TTL_ZERO: () => IssueTemplate;
164
+ INVALID_GLOB_PATTERN: (pattern: string, error: string) => IssueTemplate;
165
+ EMPTY_INCLUDE: () => IssueTemplate;
166
+ EMPTY_EXCLUDE: () => IssueTemplate;
167
+ DUPLICATE_PATTERNS: (field: string, patterns: string[]) => IssueTemplate;
168
+ EMPTY_GLOB_PATTERN: (field: string) => IssueTemplate;
169
+ TSCONFIG_ROOT_NOT_FOUND: (p: string) => IssueTemplate;
170
+ TSCONFIG_PROJECT_NOT_FOUND: (p: string) => IssueTemplate;
171
+ OUTPUT_PATH_TRAVERSAL: (p: string) => IssueTemplate;
172
+ OUTPUT_PATH_SYSTEM_DIR: (p: string) => IssueTemplate;
173
+ OUTPUT_PATH_NOT_FOUND: (dir: string) => IssueTemplate;
174
+ OUTPUT_PATH_NOT_WRITABLE: (dir: string) => IssueTemplate;
175
+ CACHE_IN_NODE_MODULES: (location: string) => IssueTemplate;
176
+ CACHE_PARENT_NOT_FOUND: (dir: string) => IssueTemplate;
177
+ INVALID_RULE_SEVERITY: (ruleName: string, severity: string) => IssueTemplate;
178
+ NO_RULES_CONFIGURED: () => IssueTemplate;
179
+ EMPTY_RULE_NAME: () => IssueTemplate;
180
+ PROFILE_CIRCULAR_INHERITANCE: (chain: string[]) => IssueTemplate;
181
+ PROFILE_EMPTY: () => IssueTemplate;
182
+ EXTENDS_NOT_FOUND: (preset: string) => IssueTemplate;
183
+ DEPRECATED_CACHE_LOCATION: () => IssueTemplate;
184
+ DEPRECATED_CONCURRENCY: () => IssueTemplate;
185
+ };
186
+
187
+ declare const SEVERITY_LEVELS: Record<string, number>;
188
+ declare const VALID_SEVERITIES: string[];
189
+ declare const VALID_RULE_SEVERITIES: string[];
190
+
191
+ /**
192
+ * Performs a comprehensive validation of a configuration block, which can represent
193
+ * either the root configuration or a specific profile.
194
+ *
195
+ * @param block - The configuration object to validate.
196
+ * @param context - The validation context providing access to environmental data like CPU count.
197
+ * @param basePath - The breadcrumb path used for accurate error reporting in nested structures.
198
+ * @returns A validation result object containing any discovered issues.
199
+ */
200
+ declare function validateConfigBlock(block: ConfigBlock, context: ValidationContext, basePath?: (string | number)[]): ConfigBlockValidation;
201
+
202
+ /**
203
+ * Calculates the recommended default number of worker threads based on
204
+ * the host's hardware. It reserves at least one core for the main
205
+ * process to ensure system responsiveness during heavy analysis.
206
+ *
207
+ * @returns {number} The suggested number of CPU cores to utilize.
208
+ */
209
+ declare const getDefaultMaxWorkers: () => number;
210
+ /**
211
+ * Standard configuration for the persistent caching layer.
212
+ * These settings determine where analysis results are stored and
213
+ * how long they remain valid before expiration.
214
+ */
215
+ declare const DEFAULT_CACHE_OPTIONS: Required<CacheOptions>;
216
+ /**
217
+ * Default global configuration values for the ngcompass engine.
218
+ * These values are used as the baseline when a user-provided
219
+ * configuration is missing specific keys.
220
+ */
221
+ declare const DEFAULT_CONFIG: {
222
+ readonly outputFormat: OutputFormat;
223
+ readonly failOnSeverity: FailSeverity;
224
+ readonly maxWarnings: 10;
225
+ readonly include: readonly ["src/**/*.ts"];
226
+ readonly exclude: readonly ["node_modules/**", "dist/**", "**/*.spec.ts", "**/*.test.ts"];
227
+ };
228
+
229
+ declare class ConfigExistsError extends Error {
230
+ constructor(path: string);
231
+ }
232
+ interface InitOptions {
233
+ cwd?: string;
234
+ force?: boolean;
235
+ }
236
+ declare function initConfig(options?: InitOptions): Promise<InitResult>;
237
+
238
+ /**
239
+ * Discovery result interface.
240
+ */
241
+ interface ConfigDiscoveryResult {
242
+ config: unknown;
243
+ filepath: string;
244
+ content: string;
245
+ contentHash: string;
246
+ isEmpty?: boolean;
247
+ }
248
+ /**
249
+ * Finds and loads the configuration file.
250
+ */
251
+ declare const findAndLoadConfig: (cwd?: string) => Promise<ConfigDiscoveryResult | null>;
252
+
253
+ declare function defineConfig<TConfig extends AnalyzerConfig$1>(config: TConfig): TConfig;
254
+
255
+ /**
256
+ * Engine capabilities available at load time.
257
+ * These are used to ensure a plugin doesn't request a feature (like Type Checking)
258
+ * that isn't currently active in the engine.
259
+ */
260
+ interface EngineCapabilities {
261
+ readonly typeCheckingEnabled: boolean;
262
+ readonly templateASTEnabled: boolean;
263
+ readonly cssASTEnabled: boolean;
264
+ }
265
+ /**
266
+ * Orchestrates the resolution, importing, and registration of external rule plugins.
267
+ * * @param plugins - Specifiers for plugins (npm packages or relative paths).
268
+ * @param configDir - The directory of the configuration file, used as the resolution root.
269
+ * @param registry - The registry where validated rules will be stored.
270
+ * @param capabilities - The current engine feature set for compatibility checks.
271
+ * * @throws {Error} Aggregate error if one or more plugins fail to load or validate.
272
+ */
273
+ declare const loadPlugins: (plugins: string[], configDir: string, registry: RuleRegistry, capabilities?: EngineCapabilities) => Promise<void>;
274
+
275
+ export { type AnalyzerConfig, AnalyzerConfigSchema, type CacheConfig, type ConfigBlock, type ConfigBlockValidation, type ConfigDiscoveryResult, ConfigExistsError, DEFAULT_CACHE_OPTIONS, DEFAULT_CONFIG, type InitOptions, MESSAGES, ProfileConfigSchema, SEVERITY_LEVELS, VALID_RULE_SEVERITIES, VALID_SEVERITIES, type ValidateConfigOptions, type ValidatedConfig, type ValidationContext, createDefaultContext, defineConfig, findAndLoadConfig, getDefaultMaxWorkers, initConfig, loadPlugins, resolveConfig, validateConfig, validateConfigBlock, validateConfiguration };
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ import {z as z$1}from'zod';import Ae,{cpus}from'os';import {lilconfig}from'lilconfig';import {createJiti}from'jiti';import*as D from'fs';import D__default from'fs';import be from'crypto';import*as C from'path';import C__default from'path';import {fileURLToPath}from'url';import {time,debug,timeEnd,PACKAGE_VERSION,CACHE_VERSION,warn,ASTUtils}from'@ngcompass/common';import {defu}from'defu';import Ue from'process';import {createRequire}from'module';import {minimatch}from'minimatch';import ot from'fs/promises';var z=()=>Math.max(1,Ae.cpus().length-1),P={enabled:true,location:"node_modules/.cache/ngcompass",strategy:"local",ttl:864e5},S={outputFormat:"text",failOnSeverity:"error",maxWarnings:10,include:["src/**/*.ts"],exclude:["node_modules/**","dist/**","**/*.spec.ts","**/*.test.ts"]};var M=z$1.enum(["warn","error"]),Se=z$1.enum(["json","text","sarif","html"]),K=z$1.union([M,z$1.literal("off"),z$1.object({severity:z$1.union([M,z$1.literal("off")]),options:z$1.record(z$1.string(),z$1.unknown()).optional()})]),Ce=z$1.object({enabled:z$1.boolean().optional(),location:z$1.string().optional(),strategy:z$1.enum(["memory","local"]).optional(),ttl:z$1.number().optional()}),Oe=z$1.object({project:z$1.string().optional(),tsconfigRootDir:z$1.string().optional(),sourceType:z$1.enum(["module","commonjs"]).optional(),ecmaVersion:z$1.number().optional()}),J=z$1.object({extends:z$1.union([z$1.string(),z$1.array(z$1.string())]).optional(),include:z$1.array(z$1.string()).default([...S.include]),exclude:z$1.array(z$1.string()).default([...S.exclude]),maxWorkers:z$1.number().optional(),concurrency:z$1.number().optional(),cache:z$1.union([z$1.boolean(),Ce]).optional(),cacheLocation:z$1.string().optional(),outputFormat:Se.default(S.outputFormat),outputPath:z$1.string().optional(),failOnSeverity:M.default(S.failOnSeverity),maxWarnings:z$1.number().default(S.maxWarnings),ignorePatterns:z$1.array(z$1.string()).optional(),rules:z$1.record(z$1.string(),K).optional(),overrides:z$1.array(z$1.object({files:z$1.union([z$1.string(),z$1.array(z$1.string())]),rules:z$1.record(z$1.string(),K).optional()})).optional(),parserOptions:Oe.optional()}),Ne=z$1.lazy(()=>J.partial()),Z=J.extend({profiles:z$1.record(z$1.string(),Ne).optional()}).transform(e=>{let t,r=e.maxWorkers??e.concurrency??z();if(e.cache===false)t={...P,enabled:false};else if(e.cache===true||e.cache===void 0){let s=e.cacheLocation??P.location;t={...P,location:s};}else t={...P,...e.cache};return {...e,maxWorkers:r,cache:t,rules:e.rules??{},overrides:e.overrides??[],ignorePatterns:e.ignorePatterns??[]}});var T="ngcompass",$e=[`${T}.config.ts`,`${T}.config.js`,`${T}.config.mjs`,`${T}.config.cjs`,`${T}.config.json`,`.${T}rc`,`.${T}rc.json`,"package.json"],w=e=>{let t=fileURLToPath(import.meta.url);return createJiti(e,{alias:{"@ngcompass/config":C__default.basename(t).startsWith("index.")?t:fileURLToPath(new URL("../index.ts",import.meta.url))}}).import(e).then(r=>r&&typeof r=="object"&&"default"in r?r.default??r:r)},te=(e,t)=>JSON.parse(t.replace(/^\uFEFF/,"")),U=async(e=process.cwd())=>{time("config-discovery"),debug("discovery",`Searching for config in: ${e}`);let t=lilconfig(T,{searchPlaces:$e,loaders:{".ts":w,".js":w,".mjs":w,".cjs":w,".json":te,noExt:te}}),r=await t.search(e);if(!r)return debug("discovery","No config file found"),timeEnd("config-discovery"),null;debug("discovery",`Found config: ${r.filepath}`);let s="",i="";time("content-hash");try{s=D__default.readFileSync(r.filepath,"utf-8"),i=be.createHash("sha1").update(s).digest("hex");let n=timeEnd("content-hash");debug("discovery",`Content hash: ${i.substring(0,8)}... (${n.toFixed(1)}ms)`);}catch{}let o=timeEnd("config-discovery");return debug("discovery",`Discovery complete: ${o.toFixed(1)}ms`),{config:r.config,filepath:r.filepath,content:s,contentHash:i,isEmpty:r.isEmpty}};function k(e){return {cwd:Ue.cwd(),fs:{existsSync:D.existsSync,accessSync:(t,r)=>D.accessSync(t,r)},os:{cpus:cpus},path:{dirname:C.dirname,resolve:C.resolve,isAbsolute:C.isAbsolute},...e}}var u={NEGATIVE_MAX_WARNINGS:e=>({code:"negative-max-warnings",message:`Value for 'maxWarnings' must be non-negative. Received: ${e}.`,suggestion:"Set 'maxWarnings' to 0 or higher, or remove it to use default (10).",severity:"error"}),WORKERS_BELOW_MINIMUM:()=>({code:"workers-below-minimum",message:"Value for 'maxWorkers' must be at least 1.",suggestion:"Set to 1 or higher, or remove to use default (CPU count - 1).",severity:"error"}),NEGATIVE_CACHE_TTL:e=>({code:"negative-cache-ttl",message:`Cache TTL must be non-negative. Received: ${e}ms.`,suggestion:"Set to 0 (default TTL) or higher. Example: 86400000 for 24 hours.",severity:"error"}),WORKERS_EXCESSIVE:(e,t)=>({code:"warn-workers-excessive",message:`Worker count (${e}) exceeds CPU count (${t}). May cause context switching overhead.`,suggestion:`Reduce to ${t} or lower for optimal performance.`,severity:"warning"}),CACHE_TTL_ZERO:()=>({code:"warn-cache-ttl-zero",message:"Cache TTL is set to 0. Using driver default TTL (typically 24 hours).",suggestion:"Set explicit TTL if you need different cache expiration behavior.",severity:"warning"}),INVALID_GLOB_PATTERN:(e,t)=>({code:"invalid-glob-pattern",message:`Glob pattern "${e}" is invalid. Error: ${t}.`,suggestion:"Check pattern syntax. Valid examples: 'src/**/*.ts', '**/*.{ts,html}'.",severity:"error"}),EMPTY_INCLUDE:()=>({code:"empty-include",message:"No include patterns defined. Analysis will skip all files.",suggestion:"Add patterns like ['src/**/*.ts', 'src/**/*.html'] to enable analysis.",severity:"error"}),EMPTY_EXCLUDE:()=>({code:"warn-empty-exclude",message:"No exclude patterns defined. Performance may degrade.",suggestion:"Add common exclusions: ['node_modules/**', 'dist/**', '**/*.spec.ts'].",severity:"warning"}),DUPLICATE_PATTERNS:(e,t)=>({code:"warn-duplicate-patterns",message:`Duplicate patterns found in "${e}": ${t.map(r=>`"${r}"`).join(", ")}.`,suggestion:"Remove duplicate entries to simplify configuration.",severity:"warning"}),EMPTY_GLOB_PATTERN:e=>({code:"empty-glob-pattern",message:`Empty string detected in "${e}" patterns.`,suggestion:"Remove empty strings from the pattern array.",severity:"error"}),TSCONFIG_ROOT_NOT_FOUND:e=>({code:"tsconfig-root-not-found",message:`TSConfig root directory not found: "${e}".`,suggestion:"Verify the directory exists and the path is correct relative to the config file.",severity:"error"}),TSCONFIG_PROJECT_NOT_FOUND:e=>({code:"tsconfig-project-not-found",message:`TSConfig file not found: "${e}".`,suggestion:"Verify the file exists and the path is relative to 'tsconfigRootDir' or config location.",severity:"error"}),OUTPUT_PATH_TRAVERSAL:e=>({code:"output-path-traversal",message:`Output path contains unsafe traversal (..): "${e}".`,suggestion:"Use absolute paths or paths without '..' to prevent security issues.",severity:"error"}),OUTPUT_PATH_SYSTEM_DIR:e=>({code:"output-path-system-dir",message:`Output path points to a system directory: "${e}".`,suggestion:"Choose a safe output location within your project directory.",severity:"error"}),OUTPUT_PATH_NOT_FOUND:e=>({code:"output-path-not-found",message:`Output directory does not exist: "${e}".`,suggestion:"Create the directory or update 'outputPath' to an existing location.",severity:"error"}),OUTPUT_PATH_NOT_WRITABLE:e=>({code:"output-path-not-writable",message:`Output directory is not writable: "${e}".`,suggestion:"Check directory permissions or choose a different output location.",severity:"error"}),CACHE_IN_NODE_MODULES:e=>({code:"cache-in-node-modules",message:`Cache location inside 'node_modules' is unsafe: "${e}". node_modules can be deleted, causing cache loss.`,suggestion:"Use a different directory like '.cache' or 'node_modules/.cache/ngcompass'.",severity:"error"}),CACHE_PARENT_NOT_FOUND:e=>({code:"warn-cache-parent-not-found",message:`Cache parent directory missing: "${e}". It will be created automatically.`,suggestion:"No action needed. Directory will be created on first cache write.",severity:"warning"}),INVALID_RULE_SEVERITY:(e,t)=>({code:"invalid-rule-severity",message:`Rule "${e}" has invalid severity: "${t}".`,suggestion:"Use valid severities: 'off', 'info', 'low', 'moderate', 'high', or 'critical'.",severity:"error"}),NO_RULES_CONFIGURED:()=>({code:"warn-no-rules-configured",message:"No rules configured. Analysis effectively skips checks.",suggestion:"Add rules to enable analysis, or extend from a preset like 'recommended'.",severity:"warning"}),EMPTY_RULE_NAME:()=>({code:"empty-rule-name",message:"Empty rule name detected. Rule keys must be non-empty strings.",suggestion:"Remove empty keys from 'rules' configuration.",severity:"error"}),PROFILE_CIRCULAR_INHERITANCE:e=>({code:"profile-circular-inheritance",message:`Circular profile inheritance detected: ${e.join(" \u2192 ")}.`,suggestion:"Break the circular dependency by removing one 'extends' reference.",severity:"error"}),PROFILE_EMPTY:()=>({code:"warn-profile-empty",message:"Profiles section is defined but empty. Consider removing it.",suggestion:"Remove 'profiles: {}' or add at least one profile like 'dev' or 'ci'.",severity:"warning"}),EXTENDS_NOT_FOUND:e=>({code:"extends-not-found",message:`Cannot resolve preset "${e}". Make sure the package is installed.`,suggestion:`Run: npm install --save-dev ${e}`,severity:"error"}),DEPRECATED_CACHE_LOCATION:()=>({code:"warn-deprecated-cache-location",message:"'cacheLocation' is deprecated. Use 'cache.location' instead.",suggestion:`Replace 'cacheLocation: "..."' with 'cache: { location: "..." }'.`,severity:"warning"}),DEPRECATED_CONCURRENCY:()=>({code:"warn-deprecated-concurrency",message:"'concurrency' is deprecated. Use 'maxWorkers' instead.",suggestion:"Replace 'concurrency: N' with 'maxWorkers: N'.",severity:"warning"})};function W(e,t,r=[]){let s=[];if(e.maxWorkers!==void 0){let i=2*t.os.cpus().length;e.maxWorkers<1?s.push({...u.WORKERS_BELOW_MINIMUM(),path:[...r,"maxWorkers"]}):e.maxWorkers>i&&s.push({...u.WORKERS_EXCESSIVE(e.maxWorkers,i),path:[...r,"maxWorkers"]});}if(e.cache&&typeof e.cache=="object"&&e.cache.ttl!==void 0){let{ttl:i}=e.cache,o=[...r,"cache","ttl"];i<0&&s.push({...u.NEGATIVE_CACHE_TTL(i),path:o});}return {issues:s}}function re(e,t,r=[]){let s=[];if(e.maxWarnings!==void 0){let{maxWarnings:o}=e;o<0&&s.push({...u.NEGATIVE_MAX_WARNINGS(o),path:[...r,"maxWarnings"]});}let{issues:i}=W(e,t,r);return s.push(...i),{issues:s}}function se(e,t=[],r=Ue.cwd()){let s=[];if(!e.extends)return {issues:s};let i=Array.isArray(e.extends)?e.extends:[e.extends],o=Array.isArray(e.extends);for(let n=0;n<i.length;n++){let c=i[n];if(!(typeof c!="string"||c.trim()===""||(function(l){let d=l.startsWith("."),y=C__default.isAbsolute(l),E=l.includes(":");return d||y||E})(c))&&(function(l,d){try{let y=C__default.join(d,"__resolve_anchor__.cjs");return createRequire(y).resolve(l)}catch{return null}})(c,r)===null){let l=[...t,"extends"];o&&l.push(n),s.push({...u.EXTENDS_NOT_FOUND(c),path:l});}}return {issues:s}}var je=/\/\/\//,Me=/\{/g,Ve=/\}/g;function ne(e,t=[]){let r=[];for(let s of ["include","exclude","ignorePatterns"]){let i=e[s];if(!Array.isArray(i))continue;i.forEach((n,c)=>{r.push(...(function(l,d,y,E){let f=[],p=[...E,l,y];if(!d||d.trim()==="")return f.push({...u.EMPTY_GLOB_PATTERN(l),path:p}),f;if(d.includes("[")&&!d.includes("]"))return f.push({...u.INVALID_GLOB_PATTERN(d,"unclosed bracket"),path:p}),f;if(je.test(d)||d.startsWith("///"))return f.push({...u.INVALID_GLOB_PATTERN(d,"invalid path pattern with multiple slashes"),path:p}),f;(d.endsWith("\\")||d.endsWith("/"))&&f.push({...u.INVALID_GLOB_PATTERN(d,"trailing slash not allowed"),path:p}),(d.match(Me)||[]).length!==(d.match(Ve)||[]).length&&f.push({...u.INVALID_GLOB_PATTERN(d,"unmatched braces"),path:p});try{minimatch("sample.ts",d);}catch(g){f.push({...u.INVALID_GLOB_PATTERN(d,g.message),path:p});}return f})(s,n,c,t));});let o=i.filter((n,c)=>i.indexOf(n)!==c);o.length>0&&r.push({...u.DUPLICATE_PATTERNS(s,[...new Set(o)]),path:[...t,s]});}return e.include&&e.include.length!==0||r.push({...u.EMPTY_INCLUDE(),path:[...t,"include"]}),e.exclude&&e.exclude.length!==0||r.push({...u.EMPTY_EXCLUDE(),path:[...t,"exclude"]}),{issues:r}}var We=["/etc/","\\etc\\","/var/","\\var\\"],ie="node_modules";function ce(e,t,r=[]){let s=[],i=o=>t.path.isAbsolute(o)?o:t.path.resolve(t.cwd??process.cwd(),o);if(e.outputPath){let{outputPath:o}=e,n=[...r,"outputPath"];o.includes("..")&&s.push({...u.OUTPUT_PATH_TRAVERSAL(o),path:n}),We.some(l=>o.includes(l))&&s.push({...u.OUTPUT_PATH_SYSTEM_DIR(o),path:n});let c=t.path.dirname(i(o));if(t.fs.existsSync(c))try{t.fs.accessSync(c,D.constants.W_OK);}catch{s.push({...u.OUTPUT_PATH_NOT_WRITABLE(c),path:n});}else s.push({...u.OUTPUT_PATH_NOT_FOUND(c),path:n});}if(e.cache&&typeof e.cache=="object"&&e.cache.enabled){let{location:o}=e.cache;if(o){let n=[...r,"cache","location"],c=o.includes(ie),l=o.includes(`${ie}/.cache`);c&&!l&&s.push({...u.CACHE_IN_NODE_MODULES(o),path:n});let d=t.path.dirname(i(o));t.fs.existsSync(d)||s.push({...u.CACHE_PARENT_NOT_FOUND(d),path:n});}}if(e.parserOptions){let{project:o,tsconfigRootDir:n}=e.parserOptions,c=o?i(o):void 0,l=n?i(n):void 0;c&&!t.fs.existsSync(c)&&s.push({...u.TSCONFIG_PROJECT_NOT_FOUND(o),path:[...r,"parserOptions","project"]}),l&&!t.fs.existsSync(l)&&s.push({...u.TSCONFIG_ROOT_NOT_FOUND(n),path:[...r,"parserOptions","tsconfigRootDir"]});}return {issues:s}}var Ge={info:0,low:1,warning:2,warn:2,moderate:2,high:3,error:4,critical:4},He=Object.keys(Ge),le=[...He,"off"];function ue(e,t=[]){let r=[],s=(Array.isArray(e.extends)||!!e.extends)&&e.extends.length>0,i=Object.entries(e.rules||{});for(let[o,n]of(i.length>0||s||r.push({...u.NO_RULES_CONFIGURED(),path:[...t,"rules"]}),i)){if(!o||o.trim()===""){r.push({...u.EMPTY_RULE_NAME(),path:[...t,"rules"]});continue}if(typeof n=="object"&&n!==null){let{severity:c}=n;c&&!le.includes(c)&&r.push({...u.INVALID_RULE_SEVERITY(o,c),path:[...t,"rules",o,"severity"]});}}return {issues:r}}function de(e,t=[]){let r=[];return e&&typeof e=="object"&&("cacheLocation"in e&&e.cacheLocation!==void 0&&r.push({...u.DEPRECATED_CACHE_LOCATION(),path:[...t,"cacheLocation"]}),"concurrency"in e&&e.concurrency!==void 0&&r.push({...u.DEPRECATED_CONCURRENCY(),path:[...t,"concurrency"]})),{issues:r}}function fe(e,t){let r=ASTUtils.parse(e,t);return ASTUtils.generateLocationMap(r)}async function qe(e,t,r,s){if(!r)return fe(e,t);let i=`v${CACHE_VERSION}:${s}`,o=await r.get(i);if(o)return o.ast;let n=fe(e,t);return await r.set(i,{filePath:t,ast:n}),n}async function me(e,t,r,s,i){if(e.length===0)return;let o=i??be.createHash("sha1").update(t).digest("hex"),n=await qe(t,r,s,o);for(let c of e){if(c.file||(c.file=r),!((!c.line||c.line===1)&&c.path))continue;let l=n[c.path.join(".")];l&&(c.line=l.line,c.column=l.column);}}var ze=new Set(["recommended","strict","performance","reactivity","all"]);async function Ke(e,t,r,s,i){if(r)return void await me(e,r,t,s,i);for(let o of e)o.file||(o.file=t);}function ge(e,t){let r,s=[...(r=new Set,e.filter(o=>{let n=`${o.code}:${o.message}:${JSON.stringify(o.path)}`;return !r.has(n)&&(r.add(n),true)}))].sort((o,n)=>o.severity===n.severity?0:o.severity==="error"?-1:1),i=!s.some(o=>o.severity==="error");return {config:i?t:void 0,report:{valid:i,issues:s}}}async function he(e){let t,{config:r,context:s,basePath:i=[],filePath:o,fileContent:n,astCache:c,contentHash:l}=e,{issues:d,validated:y,success:E}=(t=Z.safeParse(r)).success?{issues:[],validated:t.data,success:true}:{issues:t.error.issues.map(p=>({code:p.code.replace(/_/g,"-"),message:p.message,path:[...i,...p.path],severity:"error",file:o})),validated:r,success:false},f=[...d,...(function(p,g,m,h,b){let v=[];for(let O of [{name:"cross-fields",run:()=>re(p,m,h).issues},{name:"glob-patterns",run:()=>ne(p,h).issues},{name:"paths",run:()=>ce(p,m,h).issues},{name:"rules",run:()=>ue(p,h).issues},{name:"extends-chain",run:()=>se(p,h,m.cwd).issues},{name:"deprecated",run:()=>de(g,h).issues}])try{v.push(...O.run());}catch(j){v.push({code:"check-failed",message:`Check "${O.name}" encountered an unexpected error: ${j.message}`,path:h,severity:"error",file:b});}return v})(y,r,s,i,o)];return o&&await Ke(f,o,n,c,l),{issues:f,validated:E?y:void 0}}async function ye(e,t=k(),r,s,i,o){var n;let c={context:t,filePath:r,fileContent:s,astCache:i,contentHash:o},l=e===null||typeof e!="object"?{}:e.profiles??{};if(t.profile){let E=l[t.profile];if(!E){let m,h;return n=t.profile,m=Object.keys(l).join(", "),h=ze.has(n.replace(/^ngcompass:/,""))?` "${n}" is a built-in preset, not a config profile. Use 'extends: "ngcompass:${n.replace(/^ngcompass:/,"")}"' in your config instead.`:"",{config:void 0,report:{valid:false,issues:[{code:"error-profile-not-found",message:`Profile "${n}" not found. Available: [${m}]${h}`,path:["profiles",n],severity:"error",file:r}]}}}let f=defu(E,e),{issues:p,validated:g}=await he({...c,config:f,basePath:["profiles",t.profile]});return ge(p,g)}let{issues:d,validated:y}=await he({...c,config:e});return ge(d,y)}var ve=async e=>{time("config-resolution");let{cwd:t=Ue.cwd(),profile:r,cache:s}=e;debug("loader",`Starting config resolution (cwd: ${t}, profile: ${r||"none"})`);let i=await U(t),{hash:o,cachedResult:n}=await tt(i,r,s);if(n){let d=timeEnd("config-resolution");return debug("loader",`Cache HIT - returning cached result (${d.toFixed(1)}ms)`),n}debug("loader","Cache MISS - running validation");let c=await rt(i,r,s);debug("loader",`Validation complete: ${c.report.valid?"valid":`invalid (${c.report.issues.length} issues)`}`),s&&o&&(await s.configs.set(o,c),debug("loader",`Cached validation result: key=${o.substring(0,8)}...`));let l=timeEnd("config-resolution");return debug("loader",`Config resolution complete: ${l.toFixed(1)}ms`),c};async function tt(e,t,r){if(!r)return {};let s=[e?.contentHash??"",t??"",PACKAGE_VERSION,CACHE_VERSION].join("::"),i=r.computeHash(s);debug("loader",`Cache lookup: key=${i.substring(0,8)}...`);let o=await r.configs.get(i);return {hash:i,cachedResult:o}}async function rt(e,t,r){return ye(e?.config??{},k({profile:t}),e?.filepath,e?.content,r?.asts,e?.contentHash)}var Te=class extends Error{constructor(t){super(`Configuration file already exists at: ${t}`),this.name="ConfigExistsError";}},nt=`import { defineConfig } from '@ngcompass/config';
2
+
3
+ export default defineConfig({
4
+ extends: 'ngcompass:recommended',
5
+
6
+ include: [
7
+ 'src/**/*.ts',
8
+ 'src/**/*.html',
9
+ ],
10
+
11
+ exclude: [
12
+ 'node_modules/**',
13
+ 'dist/**',
14
+ 'build/**',
15
+ 'coverage/**',
16
+ '**/*.d.ts',
17
+ '**/*.spec.ts',
18
+ '**/*.test.ts',
19
+ ],
20
+
21
+ profiles: {
22
+ ci: {
23
+ outputFormat: 'json',
24
+ maxWarnings: 0,
25
+ },
26
+ },
27
+ });
28
+ `;async function vr(e={}){let t=e.cwd??process.cwd(),r=C__default.join(t,"ngcompass.config.ts"),s=await U(t);if(s&&!e.force)return {success:false,filePath:s.filepath,alreadyExists:true};try{return await ot.writeFile(r,nt,"utf-8"),{success:!0,filePath:r}}catch{return {success:false,filePath:r}}}async function xr(e={}){try{return await ve(e)}catch(t){return {config:void 0,report:{valid:false,issues:[{code:"error-conf-semantic",message:t instanceof Error?t.message:String(t),path:[],severity:"error"}]}}}}function Sr(e){return e}var ct={typeCheckingEnabled:false,templateASTEnabled:true,cssASTEnabled:true},lt=async(e,t,r,s=ct)=>{if(e.length===0)return;debug("plugin-loader",`Initializing loader for ${e.length} plugin(s) at ${t}`);let i=createRequire(t+"/package.json"),o=[];for(let n of e)try{let c;try{c=i.resolve(n);}catch{c=n;}let l=await import(c),d=l.default??l,y=Array.isArray(d)?d:[d],E=0;for(let f of y){if(!(function(g){if(!g||typeof g!="object")return !1;let m=g.handler;return typeof g.name=="string"&&g.name.length>0&&m?.handle instanceof Function})(f)){warn("plugin-loader",`Plugin "${n}" exported an invalid structure. Skipping.`);continue}let{manifest:p}=f;if(p){let g=(function(m,h){let b=(function(v,O,j,xe){let N=O.trim();if(!N||N==="*")return null;let H=G(v);if(!H)return null;let B=N.startsWith("^")?(function(I){let x=G(I);return x?`>=${I} <${x[0]+1}.0.0`:null})(N.slice(1)):N;if(!B)return null;for(let I of B.split(/\s+/).filter(Boolean)){let x=I.match(/^(>=|<=|>|<|=|==)(\d+\.\d+\.\d+.*)$/);if(!x)continue;let $=x[1],Y=G(x[2]);if(!Y)continue;let R=(function(q,X){for(let A=0;A<3;A++)if(q[A]!==X[A])return q[A]>X[A]?1:-1;return 0})(H,Y);if(!($===">="?R>=0:$==="<="?R<=0:$===">"?R>0:$==="<"?R<0:R===0))return `Plugin "${j}@${xe}" requires engine "${O}", found "${v}".`}return null})(PACKAGE_VERSION.replace(/^v/,""),m.engineVersionRange,m.name,m.version);if(b)return b;for(let v of [{key:"requiresTypeInfo",current:h.typeCheckingEnabled,label:"Type Information"},{key:"requiresTemplateAST",current:h.templateASTEnabled,label:"Template AST"},{key:"requiresCssAST",current:h.cssASTEnabled,label:"CSS AST"}])if(m.capabilities?.[v.key]&&!v.current)return `Plugin "${m.name}@${m.version}" requires ${v.label} support, which is currently disabled.`;return null})(p,s);if(g)throw Error(g);debug("plugin-loader",`\u276F Validated: ${p.name}@${p.version}`);}else warn("plugin-loader",`Plugin "${n}" is missing a manifest. Please update for future compatibility.`);r.register(f),E++,debug("plugin-loader",`\u276F Registered Rule: ${f.name}`);}debug("plugin-loader",`Plugin "${n}" processed: ${E} rules active.`);}catch(c){let l=c instanceof Error?c.message:String(c);o.push(`- "${n}": ${l}`);}if(o.length>0)throw Error(`[ngcompass] Plugin Load Failure:
29
+ ${o.join(`
30
+ `)}
31
+ Ensure plugins are installed and satisfy version requirements.`)};function G(e){let t=e.trim().match(/^v?\.?(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}export{Z as AnalyzerConfigSchema,Te as ConfigExistsError,P as DEFAULT_CACHE_OPTIONS,S as DEFAULT_CONFIG,u as MESSAGES,Ne as ProfileConfigSchema,Ge as SEVERITY_LEVELS,le as VALID_RULE_SEVERITIES,He as VALID_SEVERITIES,k as createDefaultContext,Sr as defineConfig,U as findAndLoadConfig,z as getDefaultMaxWorkers,vr as initConfig,lt as loadPlugins,ve as resolveConfig,xr as validateConfig,W as validateConfigBlock,ye as validateConfiguration};//# sourceMappingURL=index.js.map
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/defaults.ts","../src/schemas/schema.ts","../src/loaders/discovery.ts","../src/health/context.ts","../src/health/messages.ts","../src/health/checks/base.ts","../src/health/checks/cross-fields.ts","../src/health/checks/extends.ts","../src/health/checks/globs.ts","../src/health/checks/paths.ts","../src/health/constants.ts","../src/health/checks/rules.ts","../src/health/checks/deprecated.ts","../src/health/enricher.ts","../src/health/validator.ts","../src/loaders/loader.ts","../src/actions/init.ts","../src/actions/healthcheck.ts","../src/define-config.ts","../src/plugin-loader.ts"],"names":["getDefaultMaxWorkers","Math","max","os","cpus","length","DEFAULT_CACHE_OPTIONS","enabled","location","strategy","ttl","DEFAULT_CONFIG","outputFormat","failOnSeverity","maxWarnings","include","exclude","SeveritySchema","z","enum","OutputFormatSchema","RuleDefinitionSchema","union","literal","object","severity","options","record","string","unknown","optional","CacheOptionsSchema","boolean","number","ParserOptionsSchema","project","tsconfigRootDir","sourceType","ecmaVersion","BaseAnalyzerConfigSchema","extends","array","default","maxWorkers","concurrency","cache","cacheLocation","outputPath","ignorePatterns","rules","overrides","files","parserOptions","ProfileConfigSchema","lazy","partial","AnalyzerConfigSchema","extend","profiles","transform","data","undefined","MODULE_NAME","SEARCH_PLACES","jitiLoader","filepath","currentFile","fileURLToPath","url","createJiti","alias","path","basename","startsWith","URL","import","then","mod","jsonLoader","_filepath","content","JSON","parse","replace","findAndLoadConfig","cwd","process","time","debug","explorer","lilconfig","searchPlaces","loaders","noExt","result","search","timeEnd","contentHash","fs","readFileSync","crypto","createHash","update","digest","hashTime","substring","toFixed","discoveryTime","config","isEmpty","createDefaultContext","existsSync","accessSync","p","mode","dirname","resolve","isAbsolute","MESSAGES","NEGATIVE_MAX_WARNINGS","val","code","message","suggestion","WORKERS_BELOW_MINIMUM","NEGATIVE_CACHE_TTL","WORKERS_EXCESSIVE","workers","limit","CACHE_TTL_ZERO","INVALID_GLOB_PATTERN","pattern","error","EMPTY_INCLUDE","EMPTY_EXCLUDE","DUPLICATE_PATTERNS","field","patterns","map","join","EMPTY_GLOB_PATTERN","TSCONFIG_ROOT_NOT_FOUND","TSCONFIG_PROJECT_NOT_FOUND","OUTPUT_PATH_TRAVERSAL","OUTPUT_PATH_SYSTEM_DIR","OUTPUT_PATH_NOT_FOUND","dir","OUTPUT_PATH_NOT_WRITABLE","CACHE_IN_NODE_MODULES","CACHE_PARENT_NOT_FOUND","INVALID_RULE_SEVERITY","ruleName","NO_RULES_CONFIGURED","EMPTY_RULE_NAME","PROFILE_CIRCULAR_INHERITANCE","chain","PROFILE_EMPTY","EXTENDS_NOT_FOUND","preset","DEPRECATED_CACHE_LOCATION","DEPRECATED_CONCURRENCY","validateConfigBlock","block","context","basePath","issues","workerLimit","push","validateCrossFields","blockIssues","validateExtendsChain","extendsList","Array","isArray","i","trim","isLocal","nodePath","isPluginSpecifier","includes","anchorFile","createRequire","issuePath","n","s","l","validateGlobPatterns","forEach","index","GLOB_RULES","test","endsWith","match","minimatch","err","duplicates","filter","item","indexOf","Set","t","c","validatePaths","resolveFromCwd","targetPath","PATH_RULES","some","constants","W_OK","isInNodeModules","isStandardCache","cacheDir","resolvedProject","resolvedTsconfigRootDir","SEVERITY_LEVELS","info","low","warning","warn","moderate","high","critical","VALID_SEVERITIES","Object","keys","VALID_RULE_SEVERITIES","validateRules","hasExtends","ruleEntries","entries","ruleConfig","validateDeprecatedFields","rawConfig","buildLocationMap","fileContent","filePath","sourceFile","ASTUtils","generateLocationMap","resolveLocationMap","astCache","versionedKey","CACHE_VERSION","cachedEntry","get","ast","locationMap","set","enrichIssueLocations","hash","issue","file","line","column","BUILTIN_PRESETS","attachFileLocations","buildValidationResult","finalConfig","seen","unique","key","stringify","has","add","sort","a","b","valid","report","validateBlock","schemaIssues","validated","success","safeParse","allIssues","check","name","run","validateConfiguration","profile","baseOptions","availableProfiles","profileConfig","available","presetHint","merged","defu","resolveConfig","loaded","cachedResult","tryLoadFromCache","resolutionTime","runValidation","configs","hashInput","PACKAGE_VERSION","computeHash","asts","ConfigExistsError","Error","TEMPLATE","initConfig","existing","force","alreadyExists","writeFile","validateConfig","String","defineConfig","DEFAULT_CAPABILITIES","typeCheckingEnabled","templateASTEnabled","cssASTEnabled","loadPlugins","plugins","configDir","registry","capabilities","_require","pluginErrors","pluginRef","resolvedPath","module","rawExport","pluginList","registeredCount","plugin","value","handler","handle","Function","manifest","rangeError","currentVersion","range","pluginName","pluginVersion","trimmed","current","parseVersion","expanded","base","parsed","slice","constraint","split","Boolean","op","required","diff","engineVersionRange","version","req","label","register","e","v","Number"],"mappings":"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","file":"index.js","sourcesContent":["import t from 'node:os';\nexport const getDefaultMaxWorkers = ()=>Math.max(1, t.cpus().length - 1);\nexport const DEFAULT_CACHE_OPTIONS = {\n enabled: !0,\n location: 'node_modules/.cache/ngcompass',\n strategy: 'local',\n ttl: 86400000\n};\nexport const DEFAULT_CONFIG = {\n outputFormat: 'text',\n failOnSeverity: 'error',\n maxWarnings: 10,\n include: [\n 'src/**/*.ts'\n ],\n exclude: [\n 'node_modules/**',\n 'dist/**',\n '**/*.spec.ts',\n '**/*.test.ts'\n ]\n};\n","import { z as e } from 'zod';\nimport { DEFAULT_CONFIG as o, DEFAULT_CACHE_OPTIONS as n, getDefaultMaxWorkers as r } from './defaults.js';\nlet SeveritySchema = e.enum([\n 'warn',\n 'error'\n]), OutputFormatSchema = e.enum([\n 'json',\n 'text',\n 'sarif',\n 'html'\n]), RuleDefinitionSchema = e.union([\n SeveritySchema,\n e.literal('off'),\n e.object({\n severity: e.union([\n SeveritySchema,\n e.literal('off')\n ]),\n options: e.record(e.string(), e.unknown()).optional()\n })\n]), CacheOptionsSchema = e.object({\n enabled: e.boolean().optional(),\n location: e.string().optional(),\n strategy: e.enum([\n 'memory',\n 'local'\n ]).optional(),\n ttl: e.number().optional()\n}), ParserOptionsSchema = e.object({\n project: e.string().optional(),\n tsconfigRootDir: e.string().optional(),\n sourceType: e.enum([\n 'module',\n 'commonjs'\n ]).optional(),\n ecmaVersion: e.number().optional()\n}), BaseAnalyzerConfigSchema = e.object({\n extends: e.union([\n e.string(),\n e.array(e.string())\n ]).optional(),\n include: e.array(e.string()).default([\n ...o.include\n ]),\n exclude: e.array(e.string()).default([\n ...o.exclude\n ]),\n maxWorkers: e.number().optional(),\n concurrency: e.number().optional(),\n cache: e.union([\n e.boolean(),\n CacheOptionsSchema\n ]).optional(),\n cacheLocation: e.string().optional(),\n outputFormat: OutputFormatSchema.default(o.outputFormat),\n outputPath: e.string().optional(),\n failOnSeverity: SeveritySchema.default(o.failOnSeverity),\n maxWarnings: e.number().default(o.maxWarnings),\n ignorePatterns: e.array(e.string()).optional(),\n rules: e.record(e.string(), RuleDefinitionSchema).optional(),\n overrides: e.array(e.object({\n files: e.union([\n e.string(),\n e.array(e.string())\n ]),\n rules: e.record(e.string(), RuleDefinitionSchema).optional()\n })).optional(),\n parserOptions: ParserOptionsSchema.optional()\n});\nexport const ProfileConfigSchema = e.lazy(()=>BaseAnalyzerConfigSchema.partial());\nexport const AnalyzerConfigSchema = BaseAnalyzerConfigSchema.extend({\n profiles: e.record(e.string(), ProfileConfigSchema).optional()\n}).transform((e)=>{\n let o, t = e.maxWorkers ?? e.concurrency ?? r();\n if (!1 === e.cache) o = {\n ...n,\n enabled: !1\n };\n else if (!0 === e.cache || void 0 === e.cache) {\n let r = e.cacheLocation ?? n.location;\n o = {\n ...n,\n location: r\n };\n } else o = {\n ...n,\n ...e.cache\n };\n return {\n ...e,\n maxWorkers: t,\n cache: o,\n rules: e.rules ?? {},\n overrides: e.overrides ?? [],\n ignorePatterns: e.ignorePatterns ?? []\n };\n});\n","import { lilconfig as o } from 'lilconfig';\nimport { createJiti as e } from 'jiti';\nimport i from 'node:fs';\nimport t from 'node:crypto';\nimport r from 'node:path';\nimport { fileURLToPath as n } from 'node:url';\nimport { debug as s, time as c, timeEnd as a } from '@ngcompass/common';\nlet MODULE_NAME = 'ngcompass', SEARCH_PLACES = [\n `${MODULE_NAME}.config.ts`,\n `${MODULE_NAME}.config.js`,\n `${MODULE_NAME}.config.mjs`,\n `${MODULE_NAME}.config.cjs`,\n `${MODULE_NAME}.config.json`,\n `.${MODULE_NAME}rc`,\n `.${MODULE_NAME}rc.json`,\n 'package.json'\n], jitiLoader = (o)=>{\n let i = n(import.meta.url);\n return e(o, {\n alias: {\n '@ngcompass/config': r.basename(i).startsWith('index.') ? i : n(new URL('../index.ts', import.meta.url))\n }\n }).import(o).then((o)=>o && 'object' == typeof o && 'default' in o ? o.default ?? o : o);\n}, jsonLoader = (o, e)=>JSON.parse(e.replace(/^\\uFEFF/, ''));\nexport const findAndLoadConfig = async (e = process.cwd())=>{\n c('config-discovery'), s('discovery', `Searching for config in: ${e}`);\n let r = o(MODULE_NAME, {\n searchPlaces: SEARCH_PLACES,\n loaders: {\n '.ts': jitiLoader,\n '.js': jitiLoader,\n '.mjs': jitiLoader,\n '.cjs': jitiLoader,\n '.json': jsonLoader,\n noExt: jsonLoader\n }\n }), n = await r.search(e);\n if (!n) return s('discovery', 'No config file found'), a('config-discovery'), null;\n s('discovery', `Found config: ${n.filepath}`);\n let f = '', d = '';\n c('content-hash');\n try {\n f = i.readFileSync(n.filepath, 'utf-8'), d = t.createHash('sha1').update(f).digest('hex');\n let o = a('content-hash');\n s('discovery', `Content hash: ${d.substring(0, 8)}... (${o.toFixed(1)}ms)`);\n } catch {}\n let m = a('config-discovery');\n return s('discovery', `Discovery complete: ${m.toFixed(1)}ms`), {\n config: n.config,\n filepath: n.filepath,\n content: f,\n contentHash: d,\n isEmpty: n.isEmpty\n };\n};\n","import * as e from \"node:fs\";\nimport * as o from \"node:path\";\nimport { cpus as s } from \"node:os\";\nimport r from \"node:process\";\nexport function createDefaultContext(t) {\n return {\n cwd: r.cwd(),\n fs: {\n existsSync: e.existsSync,\n accessSync: (o, s)=>e.accessSync(o, s)\n },\n os: {\n cpus: s\n },\n path: {\n dirname: o.dirname,\n resolve: o.resolve,\n isAbsolute: o.isAbsolute\n },\n ...t\n };\n}\n","export const MESSAGES = {\n NEGATIVE_MAX_WARNINGS: (e)=>({\n code: \"negative-max-warnings\",\n message: `Value for 'maxWarnings' must be non-negative. Received: ${e}.`,\n suggestion: \"Set 'maxWarnings' to 0 or higher, or remove it to use default (10).\",\n severity: \"error\"\n }),\n WORKERS_BELOW_MINIMUM: ()=>({\n code: \"workers-below-minimum\",\n message: \"Value for 'maxWorkers' must be at least 1.\",\n suggestion: \"Set to 1 or higher, or remove to use default (CPU count - 1).\",\n severity: \"error\"\n }),\n NEGATIVE_CACHE_TTL: (e)=>({\n code: \"negative-cache-ttl\",\n message: `Cache TTL must be non-negative. Received: ${e}ms.`,\n suggestion: \"Set to 0 (default TTL) or higher. Example: 86400000 for 24 hours.\",\n severity: \"error\"\n }),\n WORKERS_EXCESSIVE: (e, t)=>({\n code: \"warn-workers-excessive\",\n message: `Worker count (${e}) exceeds CPU count (${t}). May cause context switching overhead.`,\n suggestion: `Reduce to ${t} or lower for optimal performance.`,\n severity: \"warning\"\n }),\n CACHE_TTL_ZERO: ()=>({\n code: \"warn-cache-ttl-zero\",\n message: \"Cache TTL is set to 0. Using driver default TTL (typically 24 hours).\",\n suggestion: \"Set explicit TTL if you need different cache expiration behavior.\",\n severity: \"warning\"\n }),\n INVALID_GLOB_PATTERN: (e, t)=>({\n code: \"invalid-glob-pattern\",\n message: `Glob pattern \"${e}\" is invalid. Error: ${t}.`,\n suggestion: \"Check pattern syntax. Valid examples: 'src/**/*.ts', '**/*.{ts,html}'.\",\n severity: \"error\"\n }),\n EMPTY_INCLUDE: ()=>({\n code: \"empty-include\",\n message: \"No include patterns defined. Analysis will skip all files.\",\n suggestion: \"Add patterns like ['src/**/*.ts', 'src/**/*.html'] to enable analysis.\",\n severity: \"error\"\n }),\n EMPTY_EXCLUDE: ()=>({\n code: \"warn-empty-exclude\",\n message: \"No exclude patterns defined. Performance may degrade.\",\n suggestion: \"Add common exclusions: ['node_modules/**', 'dist/**', '**/*.spec.ts'].\",\n severity: \"warning\"\n }),\n DUPLICATE_PATTERNS: (e, t)=>({\n code: \"warn-duplicate-patterns\",\n message: `Duplicate patterns found in \"${e}\": ${t.map((e)=>`\"${e}\"`).join(\", \")}.`,\n suggestion: \"Remove duplicate entries to simplify configuration.\",\n severity: \"warning\"\n }),\n EMPTY_GLOB_PATTERN: (e)=>({\n code: \"empty-glob-pattern\",\n message: `Empty string detected in \"${e}\" patterns.`,\n suggestion: \"Remove empty strings from the pattern array.\",\n severity: \"error\"\n }),\n TSCONFIG_ROOT_NOT_FOUND: (e)=>({\n code: \"tsconfig-root-not-found\",\n message: `TSConfig root directory not found: \"${e}\".`,\n suggestion: \"Verify the directory exists and the path is correct relative to the config file.\",\n severity: \"error\"\n }),\n TSCONFIG_PROJECT_NOT_FOUND: (e)=>({\n code: \"tsconfig-project-not-found\",\n message: `TSConfig file not found: \"${e}\".`,\n suggestion: \"Verify the file exists and the path is relative to 'tsconfigRootDir' or config location.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_TRAVERSAL: (e)=>({\n code: \"output-path-traversal\",\n message: `Output path contains unsafe traversal (..): \"${e}\".`,\n suggestion: \"Use absolute paths or paths without '..' to prevent security issues.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_SYSTEM_DIR: (e)=>({\n code: \"output-path-system-dir\",\n message: `Output path points to a system directory: \"${e}\".`,\n suggestion: \"Choose a safe output location within your project directory.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_NOT_FOUND: (e)=>({\n code: \"output-path-not-found\",\n message: `Output directory does not exist: \"${e}\".`,\n suggestion: \"Create the directory or update 'outputPath' to an existing location.\",\n severity: \"error\"\n }),\n OUTPUT_PATH_NOT_WRITABLE: (e)=>({\n code: \"output-path-not-writable\",\n message: `Output directory is not writable: \"${e}\".`,\n suggestion: \"Check directory permissions or choose a different output location.\",\n severity: \"error\"\n }),\n CACHE_IN_NODE_MODULES: (e)=>({\n code: \"cache-in-node-modules\",\n message: `Cache location inside 'node_modules' is unsafe: \"${e}\". node_modules can be deleted, causing cache loss.`,\n suggestion: \"Use a different directory like '.cache' or 'node_modules/.cache/ngcompass'.\",\n severity: \"error\"\n }),\n CACHE_PARENT_NOT_FOUND: (e)=>({\n code: \"warn-cache-parent-not-found\",\n message: `Cache parent directory missing: \"${e}\". It will be created automatically.`,\n suggestion: \"No action needed. Directory will be created on first cache write.\",\n severity: \"warning\"\n }),\n INVALID_RULE_SEVERITY: (e, t)=>({\n code: \"invalid-rule-severity\",\n message: `Rule \"${e}\" has invalid severity: \"${t}\".`,\n suggestion: \"Use valid severities: 'off', 'info', 'low', 'moderate', 'high', or 'critical'.\",\n severity: \"error\"\n }),\n NO_RULES_CONFIGURED: ()=>({\n code: \"warn-no-rules-configured\",\n message: \"No rules configured. Analysis effectively skips checks.\",\n suggestion: \"Add rules to enable analysis, or extend from a preset like 'recommended'.\",\n severity: \"warning\"\n }),\n EMPTY_RULE_NAME: ()=>({\n code: \"empty-rule-name\",\n message: \"Empty rule name detected. Rule keys must be non-empty strings.\",\n suggestion: \"Remove empty keys from 'rules' configuration.\",\n severity: \"error\"\n }),\n PROFILE_CIRCULAR_INHERITANCE: (e)=>({\n code: \"profile-circular-inheritance\",\n message: `Circular profile inheritance detected: ${e.join(\" → \")}.`,\n suggestion: \"Break the circular dependency by removing one 'extends' reference.\",\n severity: \"error\"\n }),\n PROFILE_EMPTY: ()=>({\n code: \"warn-profile-empty\",\n message: \"Profiles section is defined but empty. Consider removing it.\",\n suggestion: \"Remove 'profiles: {}' or add at least one profile like 'dev' or 'ci'.\",\n severity: \"warning\"\n }),\n EXTENDS_NOT_FOUND: (e)=>({\n code: \"extends-not-found\",\n message: `Cannot resolve preset \"${e}\". Make sure the package is installed.`,\n suggestion: `Run: npm install --save-dev ${e}`,\n severity: \"error\"\n }),\n DEPRECATED_CACHE_LOCATION: ()=>({\n code: \"warn-deprecated-cache-location\",\n message: \"'cacheLocation' is deprecated. Use 'cache.location' instead.\",\n suggestion: \"Replace 'cacheLocation: \\\"...\\\"' with 'cache: { location: \\\"...\\\" }'.\",\n severity: \"warning\"\n }),\n DEPRECATED_CONCURRENCY: ()=>({\n code: \"warn-deprecated-concurrency\",\n message: \"'concurrency' is deprecated. Use 'maxWorkers' instead.\",\n suggestion: \"Replace 'concurrency: N' with 'maxWorkers: N'.\",\n severity: \"warning\"\n })\n};\n","import { MESSAGES as e } from \"../messages.js\";\nexport function validateConfigBlock(o, r, t = []) {\n let a = [];\n if (void 0 !== o.maxWorkers) {\n let s = 2 * r.os.cpus().length;\n o.maxWorkers < 1 ? a.push({\n ...e.WORKERS_BELOW_MINIMUM(),\n path: [\n ...t,\n \"maxWorkers\"\n ]\n }) : o.maxWorkers > s && a.push({\n ...e.WORKERS_EXCESSIVE(o.maxWorkers, s),\n path: [\n ...t,\n \"maxWorkers\"\n ]\n });\n }\n if (o.cache && \"object\" == typeof o.cache && void 0 !== o.cache.ttl) {\n let { ttl: r } = o.cache, s = [\n ...t,\n \"cache\",\n \"ttl\"\n ];\n r < 0 && a.push({\n ...e.NEGATIVE_CACHE_TTL(r),\n path: s\n });\n }\n return {\n issues: a\n };\n}\n","import { MESSAGES as s } from \"../messages.js\";\nimport { validateConfigBlock as e } from \"./base.js\";\nexport function validateCrossFields(i, r, t = []) {\n let a = [];\n if (void 0 !== i.maxWarnings) {\n let { maxWarnings: e } = i;\n e < 0 && a.push({\n ...s.NEGATIVE_MAX_WARNINGS(e),\n path: [\n ...t,\n \"maxWarnings\"\n ]\n });\n }\n let { issues: o } = e(i, r, t);\n return a.push(...o), {\n issues: a\n };\n}\n","import { createRequire as e } from \"node:module\";\nimport t from \"node:path\";\nimport r from \"node:process\";\nimport { MESSAGES as n } from \"../messages.js\";\nexport function validateExtendsChain(s, o = [], i = r.cwd()) {\n let l = [];\n if (!s.extends) return {\n issues: l\n };\n let u = Array.isArray(s.extends) ? s.extends : [\n s.extends\n ], d = Array.isArray(s.extends);\n for(let r = 0; r < u.length; r++){\n let s = u[r];\n if (!(\"string\" != typeof s || \"\" === s.trim() || function(e) {\n let r = e.startsWith(\".\"), n = t.isAbsolute(e), s = e.includes(\":\");\n return r || n || s;\n }(s)) && null === function(r, n) {\n try {\n let s = t.join(n, \"__resolve_anchor__.cjs\");\n return e(s).resolve(r);\n } catch {\n return null;\n }\n }(s, i)) {\n let e = [\n ...o,\n \"extends\"\n ];\n d && e.push(r), l.push({\n ...n.EXTENDS_NOT_FOUND(s),\n path: e\n });\n }\n }\n return {\n issues: l\n };\n}\n","import { minimatch as e } from \"minimatch\";\nimport { MESSAGES as t } from \"../messages.js\";\nlet n = /\\/\\/\\//, s = /\\{/g, l = /\\}/g;\nexport function validateGlobPatterns(r, i = []) {\n let h = [];\n for (let u of [\n \"include\",\n \"exclude\",\n \"ignorePatterns\"\n ]){\n let a = r[u];\n if (!Array.isArray(a)) continue;\n a.forEach((r, a)=>{\n h.push(...function(r, i, h, u) {\n let a = [], c = [\n ...u,\n r,\n h\n ];\n if (!i || \"\" === i.trim()) return a.push({\n ...t.EMPTY_GLOB_PATTERN(r),\n path: c\n }), a;\n if (i.includes(\"[\") && !i.includes(\"]\")) return a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"unclosed bracket\"),\n path: c\n }), a;\n if (n.test(i) || i.startsWith(\"///\")) return a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"invalid path pattern with multiple slashes\"),\n path: c\n }), a;\n (i.endsWith(\"\\\\\") || i.endsWith(\"/\")) && a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"trailing slash not allowed\"),\n path: c\n }), (i.match(s) || []).length !== (i.match(l) || []).length && a.push({\n ...t.INVALID_GLOB_PATTERN(i, \"unmatched braces\"),\n path: c\n });\n try {\n e(\"sample.ts\", i);\n } catch (e) {\n a.push({\n ...t.INVALID_GLOB_PATTERN(i, e.message),\n path: c\n });\n }\n return a;\n }(u, r, a, i));\n });\n let c = a.filter((e, t)=>a.indexOf(e) !== t);\n c.length > 0 && h.push({\n ...t.DUPLICATE_PATTERNS(u, [\n ...new Set(c)\n ]),\n path: [\n ...i,\n u\n ]\n });\n }\n return r.include && 0 !== r.include.length || h.push({\n ...t.EMPTY_INCLUDE(),\n path: [\n ...i,\n \"include\"\n ]\n }), r.exclude && 0 !== r.exclude.length || h.push({\n ...t.EMPTY_EXCLUDE(),\n path: [\n ...i,\n \"exclude\"\n ]\n }), {\n issues: h\n };\n}\n","import * as s from \"node:fs\";\nimport { MESSAGES as e } from \"../messages.js\";\nlet t = [\n \"/etc/\",\n \"\\\\etc\\\\\",\n \"/var/\",\n \"\\\\var\\\\\"\n], c = \"node_modules\";\nexport function validatePaths(a, o, p = []) {\n let i = [], n = (s)=>o.path.isAbsolute(s) ? s : o.path.resolve(o.cwd ?? process.cwd(), s);\n if (a.outputPath) {\n let { outputPath: c } = a, h = [\n ...p,\n \"outputPath\"\n ];\n c.includes(\"..\") && i.push({\n ...e.OUTPUT_PATH_TRAVERSAL(c),\n path: h\n }), t.some((s)=>c.includes(s)) && i.push({\n ...e.OUTPUT_PATH_SYSTEM_DIR(c),\n path: h\n });\n let r = o.path.dirname(n(c));\n if (o.fs.existsSync(r)) try {\n o.fs.accessSync(r, s.constants.W_OK);\n } catch {\n i.push({\n ...e.OUTPUT_PATH_NOT_WRITABLE(r),\n path: h\n });\n }\n else i.push({\n ...e.OUTPUT_PATH_NOT_FOUND(r),\n path: h\n });\n }\n if (a.cache && \"object\" == typeof a.cache && a.cache.enabled) {\n let { location: s } = a.cache;\n if (s) {\n let t = [\n ...p,\n \"cache\",\n \"location\"\n ], a = s.includes(c), h = s.includes(`${c}/.cache`);\n a && !h && i.push({\n ...e.CACHE_IN_NODE_MODULES(s),\n path: t\n });\n let r = o.path.dirname(n(s));\n o.fs.existsSync(r) || i.push({\n ...e.CACHE_PARENT_NOT_FOUND(r),\n path: t\n });\n }\n }\n if (a.parserOptions) {\n let { project: s, tsconfigRootDir: t } = a.parserOptions, c = s ? n(s) : void 0, h = t ? n(t) : void 0;\n c && !o.fs.existsSync(c) && i.push({\n ...e.TSCONFIG_PROJECT_NOT_FOUND(s),\n path: [\n ...p,\n \"parserOptions\",\n \"project\"\n ]\n }), h && !o.fs.existsSync(h) && i.push({\n ...e.TSCONFIG_ROOT_NOT_FOUND(t),\n path: [\n ...p,\n \"parserOptions\",\n \"tsconfigRootDir\"\n ]\n });\n }\n return {\n issues: i\n };\n}\n","export const SEVERITY_LEVELS = {\n info: 0,\n low: 1,\n warning: 2,\n warn: 2,\n moderate: 2,\n high: 3,\n error: 4,\n critical: 4\n};\nexport const VALID_SEVERITIES = Object.keys(SEVERITY_LEVELS);\nexport const VALID_RULE_SEVERITIES = [\n ...VALID_SEVERITIES,\n \"off\"\n];\n","import { VALID_RULE_SEVERITIES as e } from \"../constants.js\";\nimport { MESSAGES as t } from \"../messages.js\";\nexport function validateRules(s, r = []) {\n let n = [], l = Array.isArray(s.extends) ? s.extends.length > 0 : !!s.extends && s.extends.length > 0, u = Object.entries(s.rules || {});\n for (let [s, i] of (u.length > 0 || l || n.push({\n ...t.NO_RULES_CONFIGURED(),\n path: [\n ...r,\n \"rules\"\n ]\n }), u)){\n if (!s || \"\" === s.trim()) {\n n.push({\n ...t.EMPTY_RULE_NAME(),\n path: [\n ...r,\n \"rules\"\n ]\n });\n continue;\n }\n if (\"object\" == typeof i && null !== i) {\n let { severity: l } = i;\n l && !e.includes(l) && n.push({\n ...t.INVALID_RULE_SEVERITY(s, l),\n path: [\n ...r,\n \"rules\",\n s,\n \"severity\"\n ]\n });\n }\n }\n return {\n issues: n\n };\n}\n","import { MESSAGES as c } from \"../messages.js\";\nexport function validateDeprecatedFields(e, o = []) {\n let n = [];\n return e && \"object\" == typeof e && (\"cacheLocation\" in e && void 0 !== e.cacheLocation && n.push({\n ...c.DEPRECATED_CACHE_LOCATION(),\n path: [\n ...o,\n \"cacheLocation\"\n ]\n }), \"concurrency\" in e && void 0 !== e.concurrency && n.push({\n ...c.DEPRECATED_CONCURRENCY(),\n path: [\n ...o,\n \"concurrency\"\n ]\n })), {\n issues: n\n };\n}\n","import { ASTUtils as t, CACHE_VERSION as e } from \"@ngcompass/common\";\nimport n from \"node:crypto\";\nfunction buildLocationMap(e, n) {\n let o = t.parse(e, n);\n return t.generateLocationMap(o);\n}\nasync function resolveLocationMap(t, n, o, a) {\n if (!o) return buildLocationMap(t, n);\n let i = `v${e}:${a}`, r = await o.get(i);\n if (r) return r.ast;\n let c = buildLocationMap(t, n);\n return await o.set(i, {\n filePath: n,\n ast: c\n }), c;\n}\nexport async function enrichIssueLocations(t, e, o, a, i) {\n if (0 === t.length) return;\n let r = i ?? n.createHash(\"sha1\").update(e).digest(\"hex\"), c = await resolveLocationMap(e, o, a, r);\n for (let e of t){\n if (e.file || (e.file = o), !((!e.line || 1 === e.line) && e.path)) continue;\n let t = c[e.path.join(\".\")];\n t && (e.line = t.line, e.column = t.column);\n }\n}\n","import { defu as e } from \"defu\";\nimport { AnalyzerConfigSchema as s } from \"../schemas/schema.js\";\nimport { createDefaultContext as r } from \"./context.js\";\nimport { validateCrossFields as i, validateExtendsChain as t, validateGlobPatterns as a, validatePaths as o, validateRules as n, validateDeprecatedFields as l } from \"./checks/index.js\";\nimport { enrichIssueLocations as c } from \"./enricher.js\";\nlet BUILTIN_PRESETS = new Set([\n \"recommended\",\n \"strict\",\n \"performance\",\n \"reactivity\",\n \"all\"\n]);\nasync function attachFileLocations(e, s, r, i, t) {\n if (r) return void await c(e, r, s, i, t);\n for (let r of e)r.file || (r.file = s);\n}\nfunction buildValidationResult(e, s) {\n let r, i = [\n ...(r = new Set(), e.filter((e)=>{\n let s = `${e.code}:${e.message}:${JSON.stringify(e.path)}`;\n return !r.has(s) && (r.add(s), !0);\n }))\n ].sort((e, s)=>e.severity === s.severity ? 0 : \"error\" === e.severity ? -1 : 1), t = !i.some((e)=>\"error\" === e.severity);\n return {\n config: t ? s : void 0,\n report: {\n valid: t,\n issues: i\n }\n };\n}\nasync function validateBlock(e) {\n let r, { config: c, context: u, basePath: f = [], filePath: d, fileContent: p, astCache: m, contentHash: v } = e, { issues: h, validated: g, success: y } = (r = s.safeParse(c)).success ? {\n issues: [],\n validated: r.data,\n success: !0\n } : {\n issues: r.error.issues.map((e)=>({\n code: e.code.replace(/_/g, \"-\"),\n message: e.message,\n path: [\n ...f,\n ...e.path\n ],\n severity: \"error\",\n file: d\n })),\n validated: c,\n success: !1\n }, $ = [\n ...h,\n ...function(e, s, r, c, u) {\n let f = [];\n for (let d of [\n {\n name: \"cross-fields\",\n run: ()=>i(e, r, c).issues\n },\n {\n name: \"glob-patterns\",\n run: ()=>a(e, c).issues\n },\n {\n name: \"paths\",\n run: ()=>o(e, r, c).issues\n },\n {\n name: \"rules\",\n run: ()=>n(e, c).issues\n },\n {\n name: \"extends-chain\",\n run: ()=>t(e, c, r.cwd).issues\n },\n {\n name: \"deprecated\",\n run: ()=>l(s, c).issues\n }\n ])try {\n f.push(...d.run());\n } catch (e) {\n f.push({\n code: \"check-failed\",\n message: `Check \"${d.name}\" encountered an unexpected error: ${e.message}`,\n path: c,\n severity: \"error\",\n file: u\n });\n }\n return f;\n }(g, c, u, f, d)\n ];\n return d && await attachFileLocations($, d, p, m, v), {\n issues: $,\n validated: y ? g : void 0\n };\n}\nexport async function validateConfiguration(s, i = r(), t, a, o, n) {\n var l;\n let c = {\n context: i,\n filePath: t,\n fileContent: a,\n astCache: o,\n contentHash: n\n }, u = null === s || \"object\" != typeof s ? {} : s.profiles ?? {};\n if (i.profile) {\n let r = u[i.profile];\n if (!r) {\n let e, s;\n return l = i.profile, e = Object.keys(u).join(\", \"), s = BUILTIN_PRESETS.has(l.replace(/^ngcompass:/, \"\")) ? ` \"${l}\" is a built-in preset, not a config profile. Use 'extends: \"ngcompass:${l.replace(/^ngcompass:/, \"\")}\"' in your config instead.` : \"\", {\n config: void 0,\n report: {\n valid: !1,\n issues: [\n {\n code: \"error-profile-not-found\",\n message: `Profile \"${l}\" not found. Available: [${e}]${s}`,\n path: [\n \"profiles\",\n l\n ],\n severity: \"error\",\n file: t\n }\n ]\n }\n };\n }\n let a = e(r, s), { issues: o, validated: n } = await validateBlock({\n ...c,\n config: a,\n basePath: [\n \"profiles\",\n i.profile\n ]\n });\n return buildValidationResult(o, n);\n }\n let { issues: f, validated: d } = await validateBlock({\n ...c,\n config: s\n });\n return buildValidationResult(f, d);\n}\n","import { findAndLoadConfig as o } from './discovery.js';\nimport { validateConfiguration as t } from '../health/index.js';\nimport { createDefaultContext as e } from '../health/context.js';\nimport { PACKAGE_VERSION as n, CACHE_VERSION as i, debug as r, time as a, timeEnd as s } from '@ngcompass/common';\nimport l from 'node:process';\nexport const resolveConfig = async (t)=>{\n a('config-resolution');\n let { cwd: e = l.cwd(), profile: n, cache: i } = t;\n r('loader', `Starting config resolution (cwd: ${e}, profile: ${n || 'none'})`);\n let c = await o(e), { hash: d, cachedResult: u } = await tryLoadFromCache(c, n, i);\n if (u) {\n let o = s('config-resolution');\n return r('loader', `Cache HIT - returning cached result (${o.toFixed(1)}ms)`), u;\n }\n r('loader', 'Cache MISS - running validation');\n let f = await runValidation(c, n, i);\n r('loader', `Validation complete: ${f.report.valid ? 'valid' : `invalid (${f.report.issues.length} issues)`}`), i && d && (await i.configs.set(d, f), r('loader', `Cached validation result: key=${d.substring(0, 8)}...`));\n let m = s('config-resolution');\n return r('loader', `Config resolution complete: ${m.toFixed(1)}ms`), f;\n};\nasync function tryLoadFromCache(o, t, e) {\n if (!e) return {};\n let a = [\n o?.contentHash ?? '',\n t ?? '',\n n,\n i\n ].join('::'), s = e.computeHash(a);\n r('loader', `Cache lookup: key=${s.substring(0, 8)}...`);\n let l = await e.configs.get(s);\n return {\n hash: s,\n cachedResult: l\n };\n}\nasync function runValidation(o, n, i) {\n return t(o?.config ?? {}, e({\n profile: n\n }), o?.filepath, o?.content, i?.asts, o?.contentHash);\n}\n","import e from 'node:fs/promises';\nimport s from 'node:path';\nimport { findAndLoadConfig as r } from '../loaders/discovery.js';\nexport class ConfigExistsError extends Error {\n constructor(e){\n super(`Configuration file already exists at: ${e}`), this.name = 'ConfigExistsError';\n }\n}\nlet TEMPLATE = `import { defineConfig } from '@ngcompass/config';\n\nexport default defineConfig({\n extends: 'ngcompass:recommended',\n\n include: [\n 'src/**/*.ts',\n 'src/**/*.html',\n ],\n\n exclude: [\n 'node_modules/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n '**/*.d.ts',\n '**/*.spec.ts',\n '**/*.test.ts',\n ],\n\n profiles: {\n ci: {\n outputFormat: 'json',\n maxWarnings: 0,\n },\n },\n});\n`;\nexport async function initConfig(t = {}) {\n let o = t.cwd ?? process.cwd(), i = s.join(o, 'ngcompass.config.ts'), n = await r(o);\n if (n && !t.force) return {\n success: !1,\n filePath: n.filepath,\n alreadyExists: !0\n };\n try {\n return await e.writeFile(i, TEMPLATE, 'utf-8'), {\n success: !0,\n filePath: i\n };\n } catch (e) {\n return {\n success: !1,\n filePath: i\n };\n }\n}\n","import { resolveConfig as r } from '../loaders/loader.js';\nexport async function validateConfig(e = {}) {\n try {\n return await r(e);\n } catch (r) {\n return {\n config: void 0,\n report: {\n valid: !1,\n issues: [\n {\n code: \"error-conf-semantic\",\n message: r instanceof Error ? r.message : String(r),\n path: [],\n severity: \"error\"\n }\n ]\n }\n };\n }\n}\n","export function defineConfig(n) {\n return n;\n}\n","import { createRequire as e } from 'node:module';\nimport { warn as r, debug as n, PACKAGE_VERSION as t } from '@ngcompass/common';\nlet DEFAULT_CAPABILITIES = {\n typeCheckingEnabled: !1,\n templateASTEnabled: !0,\n cssASTEnabled: !0\n};\nexport const loadPlugins = async (l, i, a, o = DEFAULT_CAPABILITIES)=>{\n if (0 === l.length) return;\n n('plugin-loader', `Initializing loader for ${l.length} plugin(s) at ${i}`);\n let u = e(i + '/package.json'), s = [];\n for (let e of l)try {\n let l;\n try {\n l = u.resolve(e);\n } catch {\n l = e;\n }\n let i = await import(l), s = i.default ?? i, f = Array.isArray(s) ? s : [\n s\n ], c = 0;\n for (let l of f){\n if (!function(e) {\n if (!e || 'object' != typeof e) return !1;\n let r = e.handler;\n return 'string' == typeof e.name && e.name.length > 0 && r?.handle instanceof Function;\n }(l)) {\n r('plugin-loader', `Plugin \"${e}\" exported an invalid structure. Skipping.`);\n continue;\n }\n let { manifest: i } = l;\n if (i) {\n let e = function(e, r) {\n let n = function(e, r, n, t) {\n let l = r.trim();\n if (!l || '*' === l) return null;\n let i = parseVersion(e);\n if (!i) return null;\n let a = l.startsWith('^') ? function(e) {\n let r = parseVersion(e);\n return r ? `>=${e} <${r[0] + 1}.0.0` : null;\n }(l.slice(1)) : l;\n if (!a) return null;\n for (let l of a.split(/\\s+/).filter(Boolean)){\n let a = l.match(/^(>=|<=|>|<|=|==)(\\d+\\.\\d+\\.\\d+.*)$/);\n if (!a) continue;\n let o = a[1], u = parseVersion(a[2]);\n if (!u) continue;\n let s = function(e, r) {\n for(let n = 0; n < 3; n++)if (e[n] !== r[n]) return e[n] > r[n] ? 1 : -1;\n return 0;\n }(i, u);\n if (!('>=' === o ? s >= 0 : '<=' === o ? s <= 0 : '>' === o ? s > 0 : '<' === o ? s < 0 : 0 === s)) return `Plugin \"${n}@${t}\" requires engine \"${r}\", found \"${e}\".`;\n }\n return null;\n }(t.replace(/^v/, ''), e.engineVersionRange, e.name, e.version);\n if (n) return n;\n for (let n of [\n {\n key: 'requiresTypeInfo',\n current: r.typeCheckingEnabled,\n label: 'Type Information'\n },\n {\n key: 'requiresTemplateAST',\n current: r.templateASTEnabled,\n label: 'Template AST'\n },\n {\n key: 'requiresCssAST',\n current: r.cssASTEnabled,\n label: 'CSS AST'\n }\n ])if (e.capabilities?.[n.key] && !n.current) return `Plugin \"${e.name}@${e.version}\" requires ${n.label} support, which is currently disabled.`;\n return null;\n }(i, o);\n if (e) throw Error(e);\n n('plugin-loader', `❯ Validated: ${i.name}@${i.version}`);\n } else r('plugin-loader', `Plugin \"${e}\" is missing a manifest. Please update for future compatibility.`);\n a.register(l), c++, n('plugin-loader', `❯ Registered Rule: ${l.name}`);\n }\n n('plugin-loader', `Plugin \"${e}\" processed: ${c} rules active.`);\n } catch (n) {\n let r = n instanceof Error ? n.message : String(n);\n s.push(`- \"${e}\": ${r}`);\n }\n if (s.length > 0) throw Error(`[ngcompass] Plugin Load Failure:\\n${s.join('\\n')}\\nEnsure plugins are installed and satisfy version requirements.`);\n};\nfunction parseVersion(e) {\n let r = e.trim().match(/^v?\\.?(\\d+)\\.(\\d+)\\.(\\d+)(?:[-+].*)?$/);\n return r ? [\n Number(r[1]),\n Number(r[2]),\n Number(r[3])\n ] : null;\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@ngcompass/config",
3
+ "version": "0.1.1-beta",
4
+ "description": "Config loading, resolution and validation for ngcompass",
5
+ "sideEffects": false,
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "type": "module",
10
+ "engines": {
11
+ "node": "^20.19.0 || >=22.12.0"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js",
17
+ "require": "./dist/index.cjs"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "dependencies": {
24
+ "defu": "^6.1.5",
25
+ "jiti": "^2.6.1",
26
+ "lilconfig": "^3.1.3",
27
+ "minimatch": "^10.2.4",
28
+ "zod": "^4.3.6",
29
+ "zod-validation-error": "^5.0.0",
30
+ "@ngcompass/cache": "0.1.1-beta",
31
+ "@ngcompass/common": "0.1.1-beta"
32
+ },
33
+ "peerDependencies": {
34
+ "typescript": "5.9.3"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^25.1.0"
38
+ },
39
+ "keywords": [
40
+ "angular",
41
+ "config",
42
+ "ngcompass"
43
+ ],
44
+ "author": "ngcompass",
45
+ "license": "MIT",
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "build:prod": "tsup --minify",
52
+ "dev": "tsup --watch",
53
+ "test": "vitest run --passWithNoTests",
54
+ "test:watch": "vitest --passWithNoTests",
55
+ "typecheck": "tsc --noEmit",
56
+ "clean": "rimraf dist .turbo"
57
+ }
58
+ }