@ngcompass/scanner
Advanced tools
+3
-3
@@ -1,4 +0,4 @@ | ||
| 'use strict';var promises=require('fs/promises'),g=require('path'),common=require('@ngcompass/common'),tinyglobby=require('tinyglobby'),minimatch=require('minimatch'),Y=require('ignore'),child_process=require('child_process'),util=require('util');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var g__default=/*#__PURE__*/_interopDefault(g);var Y__default=/*#__PURE__*/_interopDefault(Y);var xe=["**/*.ts","**/*.html","**/*.scss","**/*.css","**/*.sass","**/*.less"],j=e=>({rootDir:g__default.default.resolve(e.rootDir),include:e.include.length>0?e.include:xe,exclude:e.exclude,ignorePatterns:e.ignorePatterns??[],respectGitignore:e.respectGitignore??true,followSymlinks:e.followSymlinks??false,dot:e.dot??false}),we=e=>{let r=[];return e.rootDir&&e.rootDir.trim()!==""||r.push("rootDir cannot be empty"),e.include&&e.include.length!==0||r.push("No include patterns specified (will use defaults)"),r};var P=e=>e.replace(/\\/g,"/"),C=e=>({include:e.include.map(P),ignore:[...e.exclude.map(P),...e.ignorePatterns.map(P)]}),X=e=>!(e.trim()===""||e.includes("***")),Fe=e=>{let r=[],t=[];for(let i of e)X(i)?r.push(i):t.push(`Invalid pattern: "${i}"`);return [r,t]};var M=async(e,r,t)=>{try{let i=await tinyglobby.glob([...e.include],{cwd:r,ignore:[...e.ignore],absolute:!0,followSymbolicLinks:t.followSymlinks,onlyFiles:!0,dot:t.dot});return common.Ok({files:i})}catch(i){return common.Err(Error(`Glob execution failed: ${i.message}`))}};var Ee=async e=>{let r=g__default.default.join(e,".gitignore");try{return await promises.readFile(r,"utf-8")}catch{return common.debug("scanner",`Failed to load .gitignore from ${e}`),null}},Se=e=>{let r=Y__default.default().add(e);return (t,i)=>{let n=g__default.default.relative(i,t);return !r.ignores(n)}},Z=()=>()=>true;var L=async(e,r)=>{try{let t=new Set;for(let n of(t.add(e),r)){let o=g__default.default.dirname(n);for(;o.startsWith(e)&&o!==g__default.default.dirname(e)&&(t.add(o),o!==e);)o=g__default.default.dirname(o);}let i=[];for(let n of t){let o=await Ee(n);o&&i.push({dir:n,ig:Y__default.default().add(o)});}return i.length===0?common.Ok(Z()):common.Ok(n=>{for(let{dir:o,ig:a}of i){let u=g__default.default.relative(o,n).replace(/\\/g,"/");if(!u.startsWith("..")&&!g__default.default.isAbsolute(u)&&a.ignores(u))return !1}return !0})}catch(t){return common.Err(Error(`Failed to load gitignore filters: ${t.message}`))}};var te=e=>Array.from(new Set(e)),ke=(e,r,t)=>e.filter(i=>t(i,r)),re=async(e,r)=>{try{let t=e.files,i=t.length;if(r.respectGitignore){let n=await L(r.rootDir,t);if(!n.ok)return n;t=ke(t,r.rootDir,n.data);}return t=te(t),common.Ok({files:t,filtered:i-t.length})}catch(t){return common.Err(Error(`Filtering failed: ${t.message}`))}},Ge=(e,r)=>{let t=new Set(r);return e.filter(i=>{let n=i.substring(i.lastIndexOf("."));return t.has(n)})},Ae=(e,r)=>e.filter(t=>r.test(t)),ie=(e,r,t,i)=>e.filter(n=>{let o=g__default.default.relative(i,n).replace(/\\/g,"/");return !(!r.some(a=>minimatch.minimatch(o,a,{dot:true}))||t.some(a=>minimatch.minimatch(o,a,{dot:true})))});var Te=async(e,r)=>{let t=Array(e.length),i=0,n=async()=>{for(;i<e.length;){let o=i++;try{t[o]={status:"fulfilled",value:await e[o]()};}catch(a){t[o]={status:"rejected",reason:a};}}};return await Promise.all(Array.from({length:Math.min(r,e.length)},n)),t},Oe=async e=>{let r=e.map(t=>()=>promises.stat(t));return (await Te(r,128)).reduce((t,i)=>t+(i.status==="fulfilled"?i.value.size:0),0)},N=async(e,r,t=false)=>{let i=e.reduce((a,u)=>{let p=g__default.default.extname(u)||".no-extension",y=a.get(p)??0;return a.set(p,y+1),a},new Map),n=await Oe(e),o=performance.now()-r;return {totalFiles:e.length,byExtension:i,totalSize:n,scanTime:o,cacheHit:t}};var B=util.promisify(child_process.exec),oe=async e=>{try{return await B("git rev-parse --is-inside-work-tree",{cwd:e}),!0}catch{return false}},ae=async e=>new Promise(r=>{try{let t=child_process.spawn("git",["ls-files","-c","-o","--exclude-standard"],{cwd:e}),i=[];t.stdout.setEncoding("utf8"),t.stdout.on("data",n=>{i.push(n);}),t.on("close",n=>{if(n!==0){common.debug("scanner",`git ls-files exited with code ${n}`),r([]);return}let o=i.join("").split(` | ||
| `).filter(a=>a.trim().length>0).map(a=>g__default.default.resolve(e,a));r(o);}),t.on("error",n=>{common.debug("scanner",`Git discovery failed: ${n.message}`),r([]);});}catch(t){common.debug("scanner",`Git discovery failed: ${t.message}`),r([]);}}),le=async e=>{try{let{stdout:r}=await B("git rev-parse HEAD",{cwd:e});try{let{stdout:t}=await B("git rev-parse --show-toplevel",{cwd:e}),i=g__default.default.join(t.trim(),".git","index"),n=await promises.stat(i);return `${r.trim()}-${n.mtime.getTime()}`}catch{return r.trim()}}catch(r){return common.debug("scanner",`Failed to get repo fingerprint: ${r instanceof Error?r.message:String(r)}`),""}},se=async e=>{try{let r=await promises.readdir(e,{withFileTypes:!0}),t=await Promise.allSettled(r.map(a=>promises.stat(g__default.default.join(e,a.name)))),i=0,n=0,o=0;for(let a of t)a.status==="fulfilled"&&(i+=a.value.size,a.value.mtimeMs>n&&(n=a.value.mtimeMs),o++);return `dir-${r.length}-${o}-${i}-${n}`}catch(r){return common.debug("scanner",`Failed to get directory fingerprint: ${r instanceof Error?r.message:String(r)}`),""}};var Ie=async e=>{var r,t,i,n,o,a,u,p,y,b,G,W;let J;common.time("file-scan");let U=performance.now(),h=e.onProgress??(()=>{});r=e,common.debug("scanner",`Starting file discovery in: ${r.rootDir}`),common.debug("scanner",`Include patterns: ${r.include.join(", ")}`),common.debug("scanner",`Exclude patterns: ${r.exclude.join(", ")}`),h("normalizing",0);let ue=performance.now(),d=j(e),x=C(d),de=performance.now()-ue;if(t=d,i=x,common.debug("scanner",`Normalized rootDir: ${t.rootDir}`),common.debug("scanner",`Expanded to ${i.include.length} include patterns, ${i.ignore.length} ignore patterns`),e.tsConfigPath){let s=await Ue(e.tsConfigPath,d.rootDir);s&&(n=x,x={include:(o=s).include.length>0?[...n.include,...o.include]:n.include,ignore:o.exclude.length>0?[...n.ignore,...o.exclude]:n.ignore},common.debug("scanner",`tsconfig patterns merged: +${s.include.length} include, +${s.exclude.length} exclude`));}try{await promises.access(d.rootDir);}catch{return common.timeEnd("file-scan"),common.Err(Error(`rootDir does not exist or is not accessible: ${d.rootDir}`))}let z=await oe(d.rootDir),T=await We(d,x,z,e);if(T){let s,F,_;return h("complete",T.files.length),a=T,u=U,s=performance.now()-u,_=(F=(function(f){if(!f||typeof f!="object"||typeof f.totalFiles!="number"||typeof f.totalSize!="number"||typeof f.scanTime!="number"||typeof f.cacheHit!="boolean")return null;let $=(function(v){if(v instanceof Map)return v;if(!Array.isArray(v))return null;let S=new Map;for(let H of v){if(!Array.isArray(H)||H.length!==2)return null;let[q,Q]=H;if(typeof q!="string"||typeof Q!="number")return null;S.set(q,Q);}return S})(f.byExtension);return $?{totalFiles:f.totalFiles,byExtension:$,totalSize:f.totalSize,scanTime:f.scanTime,cacheHit:f.cacheHit}:null})(a.stats))?{...F,scanTime:s,cacheHit:true}:{totalFiles:a.files.length,byExtension:(function(f){let $=new Map;for(let v of f){let S=g__default.default.extname(v)||".no-extension";$.set(S,($.get(S)??0)+1);}return $})(a.files),totalSize:0,scanTime:s,cacheHit:true},common.Ok({files:a.files,stats:_,timestamp:Date.now(),timings:{normalization:0,discovery:s,filtering:0,total:s}})}h("discovering",0);let me=performance.now(),A=await Re(d,x,z);if(!A.ok)return ce("Scan",A.error),A;let K=A.data,pe=performance.now()-me;h("filtering",K.length);let ge=performance.now(),E=await re({files:K},d);if(!E.ok)return ce("Filter",E.error),E;let w=E.data.files,ye=performance.now()-ge;p=w.length,y=E.data.filtered,common.debug("scanner",`After filters: ${p} files (${y} filtered out)`),h("calculating-stats",w.length);let O=await N(w,U,false);await Je(d,x,w,{totalFiles:(b=O).totalFiles,byExtension:Array.from(b.byExtension.entries()),totalSize:b.totalSize,scanTime:b.scanTime,cacheHit:b.cacheHit},z,e);let V=common.timeEnd("file-scan");return G=O,W=V,common.debug("scanner",`Scan complete: ${G.totalFiles} files in ${W.toFixed(1)}ms`),J=Array.from(G.byExtension.entries()).sort(([,s],[,F])=>F-s).slice(0,5).map(([s,F])=>`${s}:${F}`).join(", "),common.debug("scanner",`Breakdown: ${J}`),G.totalFiles===0&&common.debug("scanner","No files found matching patterns. Check your include/exclude configuration."),h("complete",w.length),common.Ok({files:w,stats:O,timestamp:Date.now(),timings:{normalization:de,discovery:pe,filtering:ye,total:V}})};async function Re(e,r,t){if(t){common.debug("scanner","Git repository detected. Using fast Git discovery...");let n=await ae(e.rootDir);if(n.length===0){common.debug("scanner","Git discovery returned 0 files \u2014 this may indicate a git command failure. Falling back to glob-based scanning.");let a=await M(r,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return a.ok&&common.debug("scanner",`Glob fallback found ${a.data.files.length} files`),a.ok?common.Ok(a.data.files):a}let o=ie(n,r.include,r.ignore,e.rootDir);return common.debug("scanner",`Git discovery found ${o.length} files (after glob filtering)`),common.Ok(o)}common.debug("scanner","Not a Git repository. Falling back to standard globbing...");let i=await M(r,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return i.ok&&common.debug("scanner",`Glob found ${i.data.files.length} files`),i.ok?common.Ok(i.data.files):i}async function fe(e,r,t,i){if(!i.cache)return null;let n=t?await le(e.rootDir):await se(e.rootDir);return n?i.cache.computeHash([e.rootDir,JSON.stringify(r),n,"v1"].join("|")):null}async function We(e,r,t,i){let n=await fe(e,r,t,i);if(!n||!i.cache)return null;let o=await i.cache.files.get(n);return o?(common.debug("scanner",`Cache HIT. Loaded ${o.files.length} files.`),o):null}async function Je(e,r,t,i,n,o){if(!o.cache||t.length===0)return;let a=await fe(e,r,n,o);a&&(await o.cache.files.set(a,t,i),common.debug("scanner","File list cached."));}function ce(e,r){let t=common.timeEnd("file-scan");common.debug("scanner",`${e} failed after ${t.toFixed(1)}ms: ${r.message}`);}async function Ue(e,r){try{let t=(await promises.readFile(e,"utf-8")).replace(/\/\/[^\n]*/g,"").replace(/\/\*[\s\S]*?\*\//g,""),i=JSON.parse(t),n=g__default.default.dirname(g__default.default.resolve(e)),o=p=>{let y=g__default.default.resolve(n,p);return g__default.default.relative(r,y).replace(/\\/g,"/")},a=[],u=[];return Array.isArray(i.include)&&a.push(...i.include.map(o)),Array.isArray(i.files)&&a.push(...i.files.map(o)),Array.isArray(i.exclude)&&u.push(...i.exclude.map(o)),{include:a,exclude:u}}catch(t){return common.debug("scanner",`Failed to load tsconfig patterns from ${e}: ${t instanceof Error?t.message:String(t)}`),null}} | ||
| Object.defineProperty(exports,"Err",{enumerable:true,get:function(){return common.Err}});Object.defineProperty(exports,"Ok",{enumerable:true,get:function(){return common.Ok}});exports.calculateStats=N;exports.createGitignoreFilter=Se;exports.createPassThroughFilter=Z;exports.deduplicateFiles=te;exports.expandPatterns=C;exports.filterByExtension=Ge;exports.filterByPattern=Ae;exports.isValidPattern=X;exports.loadAllGitignoreFilters=L;exports.normalizeOptions=j;exports.normalizePattern=P;exports.scan=Ie;exports.validateOptions=we;exports.validatePatterns=Fe;//# sourceMappingURL=index.cjs.map | ||
| 'use strict';var promises=require('fs/promises'),h=require('path'),common=require('@ngcompass/common'),minimatch=require('minimatch'),Q=require('ignore'),tinyglobby=require('tinyglobby'),child_process=require('child_process');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var h__default=/*#__PURE__*/_interopDefault(h);var Q__default=/*#__PURE__*/_interopDefault(Q);var be=async e=>{let n=h__default.default.join(e,".gitignore");try{return await promises.readFile(n,"utf-8")}catch(t){let r=t instanceof Error?t.message:String(t);return common.debug("scanner",`Failed to load .gitignore from ${e}: ${r}`),null}},ve=e=>{let n=Q__default.default().add(e);return (t,r)=>{let i=h__default.default.relative(r,t);return !n.ignores(i)}},X=()=>()=>true;var j=async(e,n)=>{try{let t=(function(i,o){let a=new Set([i]),l=i.endsWith(h__default.default.sep)?i:i+h__default.default.sep;for(let g of o){let f=h__default.default.dirname(g);for(;(f===i||f.startsWith(l))&&(a.add(f),f!==i);){let y=h__default.default.dirname(f);if(y===f)break;f=y;}}return a})(e,n),r=await Ee(t);return r.length===0?common.Ok(X()):common.Ok(i=>{for(let{dir:o,ig:a}of r){let l=h__default.default.relative(o,i).replace(/\\/g,"/");if(!l.startsWith("..")&&!h__default.default.isAbsolute(l)&&a.ignores(l))return !1}return !0})}catch(t){return common.Err(Error(`Failed to load gitignore filters: ${t.message}`))}};async function Ee(e){let n=[];for(let t of e){let r=await be(t);r&&n.push({dir:t,ig:Q__default.default().add(r)});}return n}var Z=e=>Array.from(new Set(e)),Se=(e,n,t)=>e.filter(r=>t(r,n)),ee=async(e,n)=>{try{let t=e.files,r=t.length;if(n.respectGitignore){let i=await j(n.rootDir,t);if(!i.ok)return i;t=Se(t,n.rootDir,i.data);}return t=Z(t),common.Ok({files:t,filtered:r-t.length})}catch(t){return common.Err(Error(`Filtering failed: ${t.message}`))}},Ge=(e,n)=>{let t=new Set(n);return e.filter(r=>{let i=r.lastIndexOf(".");return !(i===-1||i<=Math.max(r.lastIndexOf("/"),r.lastIndexOf("\\"))+1)&&t.has(r.substring(i))})},ke=(e,n)=>e.filter(t=>n.test(t)),te=(e,n,t,r)=>e.filter(i=>{let o=h__default.default.relative(r,i).replace(/\\/g,"/");return !!n.some(a=>minimatch.minimatch(o,a,{dot:true}))&&!t.some(a=>minimatch.minimatch(o,a,{dot:true}))});var re=async(e,n,t)=>{try{let r=await tinyglobby.glob([...e.include],{cwd:n,ignore:[...e.ignore],absolute:!0,followSymbolicLinks:t.followSymlinks,onlyFiles:!0,dot:t.dot});return common.Ok({files:r})}catch(r){return common.Err(Error(`Glob execution failed: ${r.message}`))}};var oe=async e=>new Promise(n=>{let t=child_process.spawn("git",["rev-parse","--is-inside-work-tree"],{cwd:e});t.on("close",r=>n(r===0)),t.on("error",()=>n(false));}),ae=async e=>new Promise(n=>{try{let t=child_process.spawn("git",["ls-files","-c","-o","--exclude-standard"],{cwd:e}),r=[],i=[];t.stdout.setEncoding("utf8"),t.stdout.on("data",o=>r.push(o)),t.stderr.setEncoding("utf8"),t.stderr.on("data",o=>i.push(o)),t.on("close",o=>{if(o!==0){let l=i.join("").trim();common.debug("scanner",`git ls-files exited with code ${o}${l?`: ${l}`:""}`),n([]);return}let a=r.join("").split(` | ||
| `).filter(l=>l.trim().length>0).map(l=>h__default.default.resolve(e,l));n(a);}),t.on("error",o=>{common.debug("scanner",`Git discovery failed: ${o.message}`),n([]);});}catch(t){common.debug("scanner",`Git discovery failed: ${t.message}`),n([]);}}),le=async e=>{let n=await ne(["rev-parse","HEAD"],e);if(!n)return "";let t=await ne(["rev-parse","--show-toplevel"],e);if(!t)return n;try{let r=h__default.default.join(t,".git","index"),i=await promises.stat(r);return `${n}-${i.mtime.getTime()}`}catch(r){return common.debug("scanner",`Could not stat .git/index, falling back to HEAD-only fingerprint: ${r instanceof Error?r.message:String(r)}`),n}},se=async e=>{try{let n=await promises.readdir(e,{withFileTypes:!0}),t=await Promise.allSettled(n.map(a=>promises.stat(h__default.default.join(e,a.name)))),r=0,i=0,o=0;for(let a of t)a.status==="fulfilled"&&(r+=a.value.size,a.value.mtimeMs>i&&(i=a.value.mtimeMs),o++);return `dir-${n.length}-${o}-${r}-${i}`}catch(n){return common.debug("scanner",`Failed to get directory fingerprint: ${n instanceof Error?n.message:String(n)}`),""}};function ne(e,n){return new Promise(t=>{let r=child_process.spawn("git",[...e],{cwd:n}),i=[];r.stdout.setEncoding("utf8"),r.stdout.on("data",o=>i.push(o)),r.on("close",o=>t(o===0?i.join("").trim():"")),r.on("error",()=>t(""));})}var Te=["**/*.ts","**/*.html","**/*.scss","**/*.css","**/*.sass","**/*.less"],I=e=>({rootDir:h__default.default.resolve(e.rootDir),include:e.include.length>0?e.include:Te,exclude:e.exclude,ignorePatterns:e.ignorePatterns??[],respectGitignore:e.respectGitignore??true,followSymlinks:e.followSymlinks??false,dot:e.dot??false}),Oe=e=>{let n=[];return e.rootDir&&e.rootDir.trim()!==""||n.push("rootDir cannot be empty"),e.include&&e.include.length!==0||n.push("No include patterns specified (will use defaults)"),n};var P=e=>e.replace(/\\/g,"/"),B=e=>({include:e.include.map(P),ignore:[...e.exclude.map(P),...e.ignorePatterns.map(P)]}),fe=e=>!(e.trim()===""||e.includes("***")||e.endsWith("/")||e.endsWith("\\"))&&!!ce(e,"{","}")&&!!ce(e,"[","]"),He=e=>{let n=[],t=[];for(let r of e)fe(r)?n.push(r):t.push(`Invalid pattern: "${r}"`);return [n,t]};function ce(e,n,t){let r=0;for(let i=0;i<e.length;i++)e[i]===n?r++:e[i]===t&&r--;return r===0}var Me=async(e,n)=>{let t=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let o=r++;try{t[o]={status:"fulfilled",value:await e[o]()};}catch(a){t[o]={status:"rejected",reason:a};}}};return await Promise.all(Array.from({length:Math.min(n,e.length)},i)),t},Ie=async e=>{let n=e.map(i=>()=>promises.stat(i)),t=await Me(n,128),r=0;for(let i of t)i.status==="fulfilled"&&(r+=i.value.size);return r},L=async(e,n,t=false)=>{let r=(a=>{let l=new Map;for(let g of a){let f=h__default.default.extname(g)||".no-extension";l.set(f,(l.get(f)??0)+1);}return l})(e),i=await Ie(e),o=performance.now()-n;return {totalFiles:e.length,byExtension:r,totalSize:i,scanTime:o,cacheHit:t}};var Re=async e=>{var n,t,r,i,o,a,l,g,f,y,k,W;let R;common.time("file-scan");let U=performance.now(),x=e.onProgress??(()=>{});n=e,common.debug("scanner",`Starting file discovery in: ${n.rootDir}`),common.debug("scanner",`Include patterns: ${n.include.join(", ")}`),common.debug("scanner",`Exclude patterns: ${n.exclude.join(", ")}`),x("normalizing",0);let pe=performance.now(),m=I(e),w=B(m),ge=performance.now()-pe;if(t=m,r=w,common.debug("scanner",`Normalized rootDir: ${t.rootDir}`),common.debug("scanner",`Expanded to ${r.include.length} include patterns, ${r.ignore.length} ignore patterns`),e.tsConfigPath){let c=await Ve(e.tsConfigPath,m.rootDir);c&&(i=w,w={include:(o=c).include.length>0?[...i.include,...o.include]:i.include,ignore:o.exclude.length>0?[...i.ignore,...o.exclude]:i.ignore},common.debug("scanner",`tsconfig patterns merged: +${c.include.length} include, +${c.exclude.length} exclude`));}try{await promises.access(m.rootDir);}catch{return common.timeEnd("file-scan"),common.Err(Error(`rootDir does not exist or is not accessible: ${m.rootDir}`))}let z=await oe(m.rootDir),T=await Je(m,w,z,e);if(T){let c,$,V;return x("complete",T.files.length),a=T,l=U,c=performance.now()-l,V=($=(function(u){if(!u||typeof u!="object"||typeof u.totalFiles!="number"||typeof u.totalSize!="number"||typeof u.scanTime!="number"||typeof u.cacheHit!="boolean")return null;let b=(function(v){if(v instanceof Map)return v;if(!Array.isArray(v))return null;let D=new Map;for(let H of v){if(!Array.isArray(H)||H.length!==2)return null;let[_,q]=H;if(typeof _!="string"||typeof q!="number")return null;D.set(_,q);}return D})(u.byExtension);return b?{totalFiles:u.totalFiles,byExtension:b,totalSize:u.totalSize,scanTime:u.scanTime,cacheHit:u.cacheHit}:null})(a.stats))?{...$,scanTime:c,cacheHit:true}:{totalFiles:a.files.length,byExtension:(function(u){let b=new Map;for(let v of u){let D=h__default.default.extname(v)||".no-extension";b.set(D,(b.get(D)??0)+1);}return b})(a.files),totalSize:0,scanTime:c,cacheHit:true},common.Ok({files:a.files,stats:V,timestamp:Date.now(),timings:{normalization:0,discovery:c,filtering:0,total:c}})}x("discovering",0);let ye=performance.now(),A=await Ue(m,w,z);if(!A.ok)return de("Scan",A.error),A;let J=A.data,he=performance.now()-ye;x("filtering",J.length);let xe=performance.now(),E=await ee({files:J},m);if(!E.ok)return de("Filter",E.error),E;let F=E.data.files,we=performance.now()-xe;g=F.length,f=E.data.filtered,common.debug("scanner",`After filters: ${g} files (${f} filtered out)`),x("calculating-stats",F.length);let O=await L(F,U,false);await Ke(m,w,F,{totalFiles:(y=O).totalFiles,byExtension:Array.from(y.byExtension.entries()),totalSize:y.totalSize,scanTime:y.scanTime,cacheHit:y.cacheHit},z,e);let K=common.timeEnd("file-scan");return k=O,W=K,common.debug("scanner",`Scan complete: ${k.totalFiles} files in ${W.toFixed(1)}ms`),R=Array.from(k.byExtension.entries()).sort(([,c],[,$])=>$-c).slice(0,5).map(([c,$])=>`${c}:${$}`).join(", "),common.debug("scanner",`Breakdown: ${R}`),k.totalFiles===0&&common.debug("scanner","No files found matching patterns. Check your include/exclude configuration."),x("complete",F.length),common.Ok({files:F,stats:O,timestamp:Date.now(),timings:{normalization:ge,discovery:he,filtering:we,total:K}})};async function Ue(e,n,t){if(t){common.debug("scanner","Git repository detected. Using fast Git discovery...");let r=await ae(e.rootDir);if(r.length===0)return common.debug("scanner","Git discovery returned 0 files \u2014 falling back to glob-based scanning."),ue(e,n);let i=te(r,n.include,n.ignore,e.rootDir);return common.debug("scanner",`Git discovery found ${i.length} files (after glob filtering)`),common.Ok(i)}return common.debug("scanner","Not a Git repository. Falling back to standard globbing..."),ue(e,n)}async function ue(e,n){let t=await re(n,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return t.ok?(common.debug("scanner",`Glob found ${t.data.files.length} files`),common.Ok(t.data.files)):t}async function me(e,n,t,r){if(!r.cache)return null;let i=t?await le(e.rootDir):await se(e.rootDir);return i?r.cache.computeHash([e.rootDir,common.stableSerialize(n),i,"v1"].join("|")):null}async function Je(e,n,t,r){let i=await me(e,n,t,r);if(!i||!r.cache)return null;let o=await r.cache.files.get(i);return o?(common.debug("scanner",`Cache HIT. Loaded ${o.files.length} files.`),o):null}async function Ke(e,n,t,r,i,o){if(!o.cache||t.length===0)return;let a=await me(e,n,i,o);a&&(await o.cache.files.set(a,[...t],r),common.debug("scanner","File list cached."));}function de(e,n){let t=common.timeEnd("file-scan");common.debug("scanner",`${e} failed after ${t.toFixed(1)}ms: ${n.message}`);}async function Ve(e,n){try{let t=(await promises.readFile(e,"utf-8")).replace(/\/\/[^\n]*/g,"").replace(/\/\*[\s\S]*?\*\//g,""),r=JSON.parse(t),i=h__default.default.dirname(h__default.default.resolve(e)),o=g=>h__default.default.relative(n,h__default.default.resolve(i,g)).replace(/\\/g,"/"),a=[],l=[];return Array.isArray(r.include)&&a.push(...r.include.map(o)),Array.isArray(r.files)&&a.push(...r.files.map(o)),Array.isArray(r.exclude)&&l.push(...r.exclude.map(o)),{include:a,exclude:l}}catch(t){return common.debug("scanner",`Failed to load tsconfig patterns from ${e}: ${t instanceof Error?t.message:String(t)}`),null}} | ||
| Object.defineProperty(exports,"Err",{enumerable:true,get:function(){return common.Err}});Object.defineProperty(exports,"Ok",{enumerable:true,get:function(){return common.Ok}});exports.calculateStats=L;exports.createGitignoreFilter=ve;exports.createPassThroughFilter=X;exports.deduplicateFiles=Z;exports.expandPatterns=B;exports.filterByExtension=Ge;exports.filterByPattern=ke;exports.isValidPattern=fe;exports.loadAllGitignoreFilters=j;exports.normalizeOptions=I;exports.normalizePattern=P;exports.scan=Re;exports.validateOptions=Oe;exports.validatePatterns=He;//# sourceMappingURL=index.cjs.map | ||
| //# sourceMappingURL=index.cjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/normalize.ts","../src/patterns.ts","../src/glob.ts","../src/gitignore.ts","../src/filters.ts","../src/stats.ts","../src/git.ts","../src/scan.ts"],"names":["DEFAULT_INCLUDE","normalizeOptions","options","rootDir","path","resolve","include","length","exclude","ignorePatterns","respectGitignore","followSymlinks","dot","validateOptions","errors","trim","push","normalizePattern","pattern","replace","expandPatterns","map","ignore","isValidPattern","includes","validatePatterns","patterns","valid","executeGlob","files","glob","cwd","absolute","followSymbolicLinks","onlyFiles","Ok","error","Err","Error","message","loadGitignore","gitignorePath","join","readFile","debug","createGitignoreFilter","gitignoreContent","ig","add","file","relative","ignores","createPassThroughFilter","loadAllGitignoreFilters","filePaths","dirsToCheck","Set","filePath","current","dirname","startsWith","dirFilters","dir","content","rel","isAbsolute","deduplicateFiles","Array","from","applyGitignoreFilter","filter","applyFilters","rawFiles","startCount","filterResult","ok","data","filtered","filterByExtension","extensions","extSet","ext","substring","lastIndexOf","has","filterByPattern","test","filterByGlob","relativePath","some","p","minimatch","runWithLimit","tasks","concurrency","results","cursor","worker","i","status","value","reason","Promise","all","Math","min","calculateTotalSize","f","stat","reduce","sum","result","size","calculateStats","startTime","cacheHit","byExtension","extname","count","get","set","Map","totalSize","scanTime","performance","now","totalFiles","execAsync","promisify","exec","isGitRepo","executeGitDiscovery","child","spawn","chunks","stdout","setEncoding","on","chunk","code","split","line","err","getRepoFingerprint","head","root","indexPath","fileStats","mtime","getTime","String","getDirectoryFingerprint","entries","readdir","withFileTypes","statResults","allSettled","entry","name","latestMtime","statSuccessCount","mtimeMs","scan","normalized","tsPatterns","cached","fileCount","filteredCount","stats","breakdown","time","progress","onProgress","t0","normalizationTime","tsConfigPath","loadTsConfigPatterns","access","timeEnd","isGit","cacheResult","tryLoadFromCache","totalTime","cachedStats","isArray","extension","timestamp","Date","timings","normalization","discovery","filtering","total","t1","discoveryResult","discoverFiles","logAndReturnError","discoveryTime","t2","finalFiles","filteringTime","saveToCache","toFixed","sort","a","b","slice","gitFiles","getCacheKey","cache","fingerprint","computeHash","JSON","stringify","key","phase","stripped","config","parse","configDir","toRootRelative","abs"],"mappings":"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","file":"index.cjs","sourcesContent":["import e from 'node:path';\nlet DEFAULT_INCLUDE = [\n '**/*.ts',\n '**/*.html',\n '**/*.scss',\n '**/*.css',\n '**/*.sass',\n '**/*.less'\n];\nexport const normalizeOptions = (t)=>({\n rootDir: e.resolve(t.rootDir),\n include: t.include.length > 0 ? t.include : DEFAULT_INCLUDE,\n exclude: t.exclude,\n ignorePatterns: t.ignorePatterns ?? [],\n respectGitignore: t.respectGitignore ?? !0,\n followSymlinks: t.followSymlinks ?? !1,\n dot: t.dot ?? !1\n });\nexport const validateOptions = (e)=>{\n let t = [];\n return e.rootDir && '' !== e.rootDir.trim() || t.push('rootDir cannot be empty'), e.include && 0 !== e.include.length || t.push('No include patterns specified (will use defaults)'), t;\n};\n","export const normalizePattern = (t)=>t.replace(/\\\\/g, '/');\nexport const expandPatterns = (t)=>({\n include: t.include.map(normalizePattern),\n ignore: [\n ...t.exclude.map(normalizePattern),\n ...t.ignorePatterns.map(normalizePattern)\n ]\n });\nexport const isValidPattern = (t)=>!('' === t.trim() || t.includes('***'));\nexport const validatePatterns = (t)=>{\n let e = [], n = [];\n for (let r of t)isValidPattern(r) ? e.push(r) : n.push(`Invalid pattern: \"${r}\"`);\n return [\n e,\n n\n ];\n};\n","import { glob as e } from 'tinyglobby';\nimport { Ok as t, Err as o } from './types.js';\nexport const executeGlob = async (r, l, i)=>{\n try {\n let o = await e([\n ...r.include\n ], {\n cwd: l,\n ignore: [\n ...r.ignore\n ],\n absolute: !0,\n followSymbolicLinks: i.followSymlinks,\n onlyFiles: !0,\n dot: i.dot\n });\n return t({\n files: o\n });\n } catch (e) {\n return o(Error(`Glob execution failed: ${e.message}`));\n }\n};\nexport const patternsLikelyHaveMatches = (e)=>!(0 === e.include.length || e.include.every((e)=>e.startsWith('!')));\n","import r from 'ignore';\nimport { readFile as e } from 'node:fs/promises';\nimport t from 'node:path';\nimport { Ok as o, Err as i } from './types.js';\nimport { debug as a } from '@ngcompass/common';\nexport const loadGitignore = async (r)=>{\n let o = t.join(r, '.gitignore');\n try {\n return await e(o, 'utf-8');\n } catch (e) {\n return a('scanner', `Failed to load .gitignore from ${r}`), null;\n }\n};\nexport const createGitignoreFilter = (e)=>{\n let o = r().add(e);\n return (r, e)=>{\n let i = t.relative(e, r);\n return !o.ignores(i);\n };\n};\nexport const createPassThroughFilter = ()=>()=>!0;\nexport const loadAndCreateGitignoreFilter = async (r)=>{\n try {\n let e = await loadGitignore(r);\n if (!e) return o(createPassThroughFilter());\n let t = createGitignoreFilter(e);\n return o(t);\n } catch (r) {\n return i(Error(`Failed to load .gitignore: ${r.message}`));\n }\n};\nexport const loadAllGitignoreFilters = async (e, a)=>{\n try {\n let i = new Set();\n for (let r of (i.add(e), a)){\n let o = t.dirname(r);\n for(; o.startsWith(e) && o !== t.dirname(e) && (i.add(o), o !== e);)o = t.dirname(o);\n }\n let n = [];\n for (let e of i){\n let t = await loadGitignore(e);\n t && n.push({\n dir: e,\n ig: r().add(t)\n });\n }\n if (0 === n.length) return o(createPassThroughFilter());\n return o((r)=>{\n for (let { dir: e, ig: o } of n){\n let i = t.relative(e, r).replace(/\\\\/g, '/');\n if (!i.startsWith('..') && !t.isAbsolute(i) && o.ignores(i)) return !1;\n }\n return !0;\n });\n } catch (r) {\n return i(Error(`Failed to load gitignore filters: ${r.message}`));\n }\n};\n","import t from 'node:path';\nimport { minimatch as e } from 'minimatch';\nimport { Ok as r, Err as i } from './types.js';\nimport { loadAllGitignoreFilters as o } from './gitignore.js';\nexport const deduplicateFiles = (t)=>Array.from(new Set(t));\nexport const applyGitignoreFilter = (t, e, r)=>t.filter((t)=>r(t, e));\nexport const applyFilters = async (t, e)=>{\n try {\n let i = t.files, l = i.length;\n if (e.respectGitignore) {\n let t = await o(e.rootDir, i);\n if (!t.ok) return t;\n i = applyGitignoreFilter(i, e.rootDir, t.data);\n }\n return i = deduplicateFiles(i), r({\n files: i,\n filtered: l - i.length\n });\n } catch (t) {\n return i(Error(`Filtering failed: ${t.message}`));\n }\n};\nexport const filterByExtension = (t, e)=>{\n let r = new Set(e);\n return t.filter((t)=>{\n let e = t.substring(t.lastIndexOf('.'));\n return r.has(e);\n });\n};\nexport const filterByPattern = (t, e)=>t.filter((t)=>e.test(t));\nexport const filterByGlob = (r, i, o, l)=>r.filter((r)=>{\n let n = t.relative(l, r).replace(/\\\\/g, '/');\n return !(!i.some((t)=>e(n, t, {\n dot: !0\n })) || o.some((t)=>e(n, t, {\n dot: !0\n })));\n });\n","import t from 'node:path';\nimport { stat as e } from 'node:fs/promises';\nlet runWithLimit = async (t, e)=>{\n let a = Array(t.length), l = 0, r = async ()=>{\n for(; l < t.length;){\n let e = l++;\n try {\n a[e] = {\n status: 'fulfilled',\n value: await t[e]()\n };\n } catch (t) {\n a[e] = {\n status: 'rejected',\n reason: t\n };\n }\n }\n };\n return await Promise.all(Array.from({\n length: Math.min(e, t.length)\n }, r)), a;\n}, calculateTotalSize = async (t)=>{\n let a = t.map((t)=>()=>e(t));\n return (await runWithLimit(a, 128)).reduce((t, e)=>t + ('fulfilled' === e.status ? e.value.size : 0), 0);\n};\nexport const calculateStats = async (e, a, l = !1)=>{\n let r = e.reduce((e, a)=>{\n let l = t.extname(a) || '.no-extension', r = e.get(l) ?? 0;\n return e.set(l, r + 1), e;\n }, new Map()), n = await calculateTotalSize(e), i = performance.now() - a;\n return {\n totalFiles: e.length,\n byExtension: r,\n totalSize: n,\n scanTime: i,\n cacheHit: l\n };\n};\n","import { exec as e, spawn as t } from 'node:child_process';\nimport { promisify as r } from 'node:util';\nimport i from 'node:path';\nimport { stat as o, readdir as n } from 'node:fs/promises';\nimport { debug as s } from '@ngcompass/common';\nlet execAsync = r(e);\nexport const isGitRepo = async (e)=>{\n try {\n return await execAsync('git rev-parse --is-inside-work-tree', {\n cwd: e\n }), !0;\n } catch {\n return !1;\n }\n};\nexport const executeGitDiscovery = async (e)=>new Promise((r)=>{\n try {\n let o = t('git', [\n 'ls-files',\n '-c',\n '-o',\n '--exclude-standard'\n ], {\n cwd: e\n }), n = [];\n o.stdout.setEncoding('utf8'), o.stdout.on('data', (e)=>{\n n.push(e);\n }), o.on('close', (t)=>{\n if (0 !== t) {\n s('scanner', `git ls-files exited with code ${t}`), r([]);\n return;\n }\n let o = n.join('').split('\\n').filter((e)=>e.trim().length > 0).map((t)=>i.resolve(e, t));\n r(o);\n }), o.on('error', (e)=>{\n s('scanner', `Git discovery failed: ${e.message}`), r([]);\n });\n } catch (e) {\n s('scanner', `Git discovery failed: ${e.message}`), r([]);\n }\n });\nexport const getRepoFingerprint = async (e)=>{\n try {\n let { stdout: t } = await execAsync('git rev-parse HEAD', {\n cwd: e\n });\n try {\n let { stdout: r } = await execAsync('git rev-parse --show-toplevel', {\n cwd: e\n }), n = i.join(r.trim(), '.git', 'index'), s = await o(n);\n return `${t.trim()}-${s.mtime.getTime()}`;\n } catch {\n return t.trim();\n }\n } catch (e) {\n return s('scanner', `Failed to get repo fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\nexport const getDirectoryFingerprint = async (e)=>{\n try {\n let t = await n(e, {\n withFileTypes: !0\n }), r = await Promise.allSettled(t.map((t)=>o(i.join(e, t.name)))), s = 0, a = 0, c = 0;\n for (let e of r)'fulfilled' === e.status && (s += e.value.size, e.value.mtimeMs > a && (a = e.value.mtimeMs), c++);\n return `dir-${t.length}-${c}-${s}-${a}`;\n } catch (e) {\n return s('scanner', `Failed to get directory fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\n","import { access as e, readFile as t } from 'node:fs/promises';\nimport n from 'node:path';\nimport { debug as r, time as i, timeEnd as o } from '@ngcompass/common';\nimport { Ok as a, Err as l } from './types.js';\nimport { normalizeOptions as s } from './normalize.js';\nimport { expandPatterns as c } from './patterns.js';\nimport { executeGlob as f } from './glob.js';\nimport { applyFilters as u, filterByGlob as d } from './filters.js';\nimport { calculateStats as m } from './stats.js';\nimport { isGitRepo as g, executeGitDiscovery as p, getRepoFingerprint as h, getDirectoryFingerprint as y } from './git.js';\nexport const scan = async (t)=>{\n var f, d, p, h, y, w, $, b, x, F, v, D;\n let S;\n i('file-scan');\n let A = performance.now(), k = t.onProgress ?? (()=>void 0);\n f = t, r('scanner', `Starting file discovery in: ${f.rootDir}`), r('scanner', `Include patterns: ${f.include.join(', ')}`), r('scanner', `Exclude patterns: ${f.exclude.join(', ')}`), k('normalizing', 0);\n let C = performance.now(), j = s(t), E = c(j), T = performance.now() - C;\n if (d = j, p = E, r('scanner', `Normalized rootDir: ${d.rootDir}`), r('scanner', `Expanded to ${p.include.length} include patterns, ${p.ignore.length} ignore patterns`), t.tsConfigPath) {\n let e = await loadTsConfigPatterns(t.tsConfigPath, j.rootDir);\n e && (h = E, E = {\n include: (y = e).include.length > 0 ? [\n ...h.include,\n ...y.include\n ] : h.include,\n ignore: y.exclude.length > 0 ? [\n ...h.ignore,\n ...y.exclude\n ] : h.ignore\n }, r('scanner', `tsconfig patterns merged: +${e.include.length} include, +${e.exclude.length} exclude`));\n }\n try {\n await e(j.rootDir);\n } catch {\n return o('file-scan'), l(Error(`rootDir does not exist or is not accessible: ${j.rootDir}`));\n }\n let z = await g(j.rootDir), H = await tryLoadFromCache(j, E, z, t);\n if (H) {\n let e, t, r;\n return k('complete', H.files.length), w = H, $ = A, e = performance.now() - $, r = (t = function(e) {\n if (!e || 'object' != typeof e || 'number' != typeof e.totalFiles || 'number' != typeof e.totalSize || 'number' != typeof e.scanTime || 'boolean' != typeof e.cacheHit) return null;\n let t = function(e) {\n if (e instanceof Map) return e;\n if (!Array.isArray(e)) return null;\n let t = new Map();\n for (let n of e){\n if (!Array.isArray(n) || 2 !== n.length) return null;\n let [e, r] = n;\n if ('string' != typeof e || 'number' != typeof r) return null;\n t.set(e, r);\n }\n return t;\n }(e.byExtension);\n return t ? {\n totalFiles: e.totalFiles,\n byExtension: t,\n totalSize: e.totalSize,\n scanTime: e.scanTime,\n cacheHit: e.cacheHit\n } : null;\n }(w.stats)) ? {\n ...t,\n scanTime: e,\n cacheHit: !0\n } : {\n totalFiles: w.files.length,\n byExtension: function(e) {\n let t = new Map();\n for (let r of e){\n let e = n.extname(r) || '.no-extension';\n t.set(e, (t.get(e) ?? 0) + 1);\n }\n return t;\n }(w.files),\n totalSize: 0,\n scanTime: e,\n cacheHit: !0\n }, a({\n files: w.files,\n stats: r,\n timestamp: Date.now(),\n timings: {\n normalization: 0,\n discovery: e,\n filtering: 0,\n total: e\n }\n });\n }\n k('discovering', 0);\n let G = performance.now(), N = await discoverFiles(j, E, z);\n if (!N.ok) return logAndReturnError('Scan', N.error), N;\n let P = N.data, K = performance.now() - G;\n k('filtering', P.length);\n let L = performance.now(), M = await u({\n files: P\n }, j);\n if (!M.ok) return logAndReturnError('Filter', M.error), M;\n let R = M.data.files, I = performance.now() - L;\n b = R.length, x = M.data.filtered, r('scanner', `After filters: ${b} files (${x} filtered out)`), k('calculating-stats', R.length);\n let J = await m(R, A, !1);\n await saveToCache(j, E, R, {\n totalFiles: (F = J).totalFiles,\n byExtension: Array.from(F.byExtension.entries()),\n totalSize: F.totalSize,\n scanTime: F.scanTime,\n cacheHit: F.cacheHit\n }, z, t);\n let O = o('file-scan');\n return v = J, D = O, r('scanner', `Scan complete: ${v.totalFiles} files in ${D.toFixed(1)}ms`), S = Array.from(v.byExtension.entries()).sort(([, e], [, t])=>t - e).slice(0, 5).map(([e, t])=>`${e}:${t}`).join(', '), r('scanner', `Breakdown: ${S}`), 0 === v.totalFiles && r('scanner', 'No files found matching patterns. Check your include/exclude configuration.'), k('complete', R.length), a({\n files: R,\n stats: J,\n timestamp: Date.now(),\n timings: {\n normalization: T,\n discovery: K,\n filtering: I,\n total: O\n }\n });\n};\nasync function discoverFiles(e, t, n) {\n if (n) {\n r('scanner', 'Git repository detected. Using fast Git discovery...');\n let n = await p(e.rootDir);\n if (0 === n.length) {\n r('scanner', 'Git discovery returned 0 files — this may indicate a git command failure. Falling back to glob-based scanning.');\n let n = await f(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return n.ok && r('scanner', `Glob fallback found ${n.data.files.length} files`), n.ok ? a(n.data.files) : n;\n }\n let i = d(n, t.include, t.ignore, e.rootDir);\n return r('scanner', `Git discovery found ${i.length} files (after glob filtering)`), a(i);\n }\n r('scanner', 'Not a Git repository. Falling back to standard globbing...');\n let i = await f(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return i.ok && r('scanner', `Glob found ${i.data.files.length} files`), i.ok ? a(i.data.files) : i;\n}\nasync function getCacheKey(e, t, n, r) {\n if (!r.cache) return null;\n let i = n ? await h(e.rootDir) : await y(e.rootDir);\n return i ? r.cache.computeHash([\n e.rootDir,\n JSON.stringify(t),\n i,\n 'v1'\n ].join('|')) : null;\n}\nasync function tryLoadFromCache(e, t, n, i) {\n let o = await getCacheKey(e, t, n, i);\n if (!o || !i.cache) return null;\n let a = await i.cache.files.get(o);\n return a ? (r('scanner', `Cache HIT. Loaded ${a.files.length} files.`), a) : null;\n}\nasync function saveToCache(e, t, n, i, o, a) {\n if (!a.cache || 0 === n.length) return;\n let l = await getCacheKey(e, t, o, a);\n l && (await a.cache.files.set(l, n, i), r('scanner', 'File list cached.'));\n}\nfunction logAndReturnError(e, t) {\n let n = o('file-scan');\n r('scanner', `${e} failed after ${n.toFixed(1)}ms: ${t.message}`);\n}\nasync function loadTsConfigPatterns(e, i) {\n try {\n let r = (await t(e, 'utf-8')).replace(/\\/\\/[^\\n]*/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, ''), o = JSON.parse(r), a = n.dirname(n.resolve(e)), l = (e)=>{\n let t = n.resolve(a, e);\n return n.relative(i, t).replace(/\\\\/g, '/');\n }, s = [], c = [];\n return Array.isArray(o.include) && s.push(...o.include.map(l)), Array.isArray(o.files) && s.push(...o.files.map(l)), Array.isArray(o.exclude) && c.push(...o.exclude.map(l)), {\n include: s,\n exclude: c\n };\n } catch (t) {\n return r('scanner', `Failed to load tsconfig patterns from ${e}: ${t instanceof Error ? t.message : String(t)}`), null;\n }\n}\n"]} | ||
| {"version":3,"sources":["../src/gitignore.ts","../src/filters.ts","../src/glob.ts","../src/git.ts","../src/normalize.ts","../src/patterns.ts","../src/stats.ts","../src/scan.ts"],"names":["loadGitignore","rootDir","gitignorePath","path","join","readFile","error","msg","Error","message","String","debug","createGitignoreFilter","gitignoreContent","ig","ignore","add","file","relative","ignores","createPassThroughFilter","loadAllGitignoreFilters","filePaths","dirsToCheck","dirs","Set","rootWithSep","endsWith","sep","filePath","current","dirname","startsWith","parent","dirFilters","loadIgnoreFiles","length","Ok","dir","rel","replace","isAbsolute","Err","result","content","push","deduplicateFiles","files","Array","from","applyGitignoreFilter","filter","applyFilters","rawFiles","options","startCount","respectGitignore","filterResult","ok","data","filtered","filterByExtension","extensions","extSet","dotIndex","lastIndexOf","Math","max","has","substring","filterByPattern","pattern","test","filterByGlob","includes","relativePath","some","p","minimatch","dot","executeGlob","patterns","glob","include","cwd","absolute","followSymbolicLinks","followSymlinks","onlyFiles","isGitRepo","Promise","resolve","child","spawn","on","code","executeGitDiscovery","stdoutChunks","stderrChunks","stdout","setEncoding","chunk","stderr","trim","split","line","map","err","getRepoFingerprint","head","runGitForOutput","root","indexPath","fileStats","stat","mtime","getTime","getDirectoryFingerprint","entries","readdir","withFileTypes","statResults","allSettled","entry","name","totalSize","latestMtime","statSuccessCount","status","value","size","mtimeMs","args","out","DEFAULT_INCLUDE","normalizeOptions","exclude","ignorePatterns","validateOptions","errors","normalizePattern","expandPatterns","isValidPattern","balanced","validatePatterns","valid","s","open","close","depth","i","runWithLimit","tasks","concurrency","results","cursor","worker","reason","all","min","calculateTotalSize","f","total","calculateStats","startTime","cacheHit","byExtension","Map","ext","extname","set","get","scanTime","performance","now","totalFiles","scan","normalized","tsPatterns","cached","fileCount","filteredCount","stats","breakdown","time","progress","onProgress","t0","normalizationTime","tsConfigPath","loadTsConfigPatterns","access","timeEnd","isGit","cacheResult","tryLoadFromCache","totalTime","cachedStats","isArray","extension","count","timestamp","Date","timings","normalization","discovery","filtering","t1","discoveryResult","discoverFiles","logAndReturnError","discoveryTime","t2","finalFiles","filteringTime","saveToCache","toFixed","sort","a","b","slice","gitFiles","runGlobDiscovery","getCacheKey","cache","fingerprint","computeHash","stableSerialize","key","phase","stripped","config","JSON","parse","configDir","toRootRelative"],"mappings":"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","file":"index.cjs","sourcesContent":["import { readFile as r } from 'node:fs/promises';\nimport e from 'node:path';\nimport t from 'ignore';\nimport { debug as o } from '@ngcompass/common';\nimport { Err as i, Ok as n } from './types.js';\nexport const loadGitignore = async (t)=>{\n let i = e.join(t, '.gitignore');\n try {\n return await r(i, 'utf-8');\n } catch (e) {\n let r = e instanceof Error ? e.message : String(e);\n return o('scanner', `Failed to load .gitignore from ${t}: ${r}`), null;\n }\n};\nexport const createGitignoreFilter = (r)=>{\n let o = t().add(r);\n return (r, t)=>{\n let i = e.relative(t, r);\n return !o.ignores(i);\n };\n};\nexport const createPassThroughFilter = ()=>()=>!0;\nexport const loadAndCreateGitignoreFilter = async (r)=>{\n try {\n let e = await loadGitignore(r);\n if (!e) return n(createPassThroughFilter());\n return n(createGitignoreFilter(e));\n } catch (r) {\n return i(Error(`Failed to load .gitignore: ${r.message}`));\n }\n};\nexport const loadAllGitignoreFilters = async (r, t)=>{\n try {\n let o = function(r, t) {\n let o = new Set([\n r\n ]), i = r.endsWith(e.sep) ? r : r + e.sep;\n for (let n of t){\n let t = e.dirname(n);\n for(; (t === r || t.startsWith(i)) && (o.add(t), t !== r);){\n let r = e.dirname(t);\n if (r === t) break;\n t = r;\n }\n }\n return o;\n }(r, t), i = await loadIgnoreFiles(o);\n if (0 === i.length) return n(createPassThroughFilter());\n return n((r)=>{\n for (let { dir: t, ig: o } of i){\n let i = e.relative(t, r).replace(/\\\\/g, '/');\n if (!i.startsWith('..') && !e.isAbsolute(i) && o.ignores(i)) return !1;\n }\n return !0;\n });\n } catch (r) {\n return i(Error(`Failed to load gitignore filters: ${r.message}`));\n }\n};\nasync function loadIgnoreFiles(r) {\n let e = [];\n for (let o of r){\n let r = await loadGitignore(o);\n r && e.push({\n dir: o,\n ig: t().add(r)\n });\n }\n return e;\n}\n","import t from 'node:path';\nimport { minimatch as e } from 'minimatch';\nimport { loadAllGitignoreFilters as r } from './gitignore.js';\nimport { Err as i, Ok as o } from './types.js';\nexport const deduplicateFiles = (t)=>Array.from(new Set(t));\nexport const applyGitignoreFilter = (t, e, r)=>t.filter((t)=>r(t, e));\nexport const applyFilters = async (t, e)=>{\n try {\n let i = t.files, l = i.length;\n if (e.respectGitignore) {\n let t = await r(e.rootDir, i);\n if (!t.ok) return t;\n i = applyGitignoreFilter(i, e.rootDir, t.data);\n }\n return i = deduplicateFiles(i), o({\n files: i,\n filtered: l - i.length\n });\n } catch (t) {\n return i(Error(`Filtering failed: ${t.message}`));\n }\n};\nexport const filterByExtension = (t, e)=>{\n let r = new Set(e);\n return t.filter((t)=>{\n let e = t.lastIndexOf('.');\n return !(-1 === e || e <= Math.max(t.lastIndexOf('/'), t.lastIndexOf('\\\\')) + 1) && r.has(t.substring(e));\n });\n};\nexport const filterByPattern = (t, e)=>t.filter((t)=>e.test(t));\nexport const filterByGlob = (r, i, o, l)=>r.filter((r)=>{\n let n = t.relative(l, r).replace(/\\\\/g, '/');\n return !!i.some((t)=>e(n, t, {\n dot: !0\n })) && !o.some((t)=>e(n, t, {\n dot: !0\n }));\n });\n","import { glob as e } from 'tinyglobby';\nimport { Err as t, Ok as o } from './types.js';\nexport const executeGlob = async (r, l, i)=>{\n try {\n let t = await e([\n ...r.include\n ], {\n cwd: l,\n ignore: [\n ...r.ignore\n ],\n absolute: !0,\n followSymbolicLinks: i.followSymlinks,\n onlyFiles: !0,\n dot: i.dot\n });\n return o({\n files: t\n });\n } catch (e) {\n return t(Error(`Glob execution failed: ${e.message}`));\n }\n};\nexport const patternsLikelyHaveMatches = (e)=>!(0 === e.include.length || e.include.every((e)=>e.startsWith('!')));\n","import { spawn as e } from 'node:child_process';\nimport { readdir as t, stat as r } from 'node:fs/promises';\nimport i from 'node:path';\nimport { debug as o } from '@ngcompass/common';\nexport const isGitRepo = async (t)=>new Promise((r)=>{\n let i = e('git', [\n 'rev-parse',\n '--is-inside-work-tree'\n ], {\n cwd: t\n });\n i.on('close', (e)=>r(0 === e)), i.on('error', ()=>r(!1));\n });\nexport const executeGitDiscovery = async (t)=>new Promise((r)=>{\n try {\n let n = e('git', [\n 'ls-files',\n '-c',\n '-o',\n '--exclude-standard'\n ], {\n cwd: t\n }), s = [], a = [];\n n.stdout.setEncoding('utf8'), n.stdout.on('data', (e)=>s.push(e)), n.stderr.setEncoding('utf8'), n.stderr.on('data', (e)=>a.push(e)), n.on('close', (e)=>{\n if (0 !== e) {\n let t = a.join('').trim();\n o('scanner', `git ls-files exited with code ${e}${t ? `: ${t}` : ''}`), r([]);\n return;\n }\n let n = s.join('').split('\\n').filter((e)=>e.trim().length > 0).map((e)=>i.resolve(t, e));\n r(n);\n }), n.on('error', (e)=>{\n o('scanner', `Git discovery failed: ${e.message}`), r([]);\n });\n } catch (e) {\n o('scanner', `Git discovery failed: ${e.message}`), r([]);\n }\n });\nexport const getRepoFingerprint = async (e)=>{\n let t = await runGitForOutput([\n 'rev-parse',\n 'HEAD'\n ], e);\n if (!t) return '';\n let n = await runGitForOutput([\n 'rev-parse',\n '--show-toplevel'\n ], e);\n if (!n) return t;\n try {\n let e = i.join(n, '.git', 'index'), o = await r(e);\n return `${t}-${o.mtime.getTime()}`;\n } catch (e) {\n return o('scanner', `Could not stat .git/index, falling back to HEAD-only fingerprint: ${e instanceof Error ? e.message : String(e)}`), t;\n }\n};\nexport const getDirectoryFingerprint = async (e)=>{\n try {\n let o = await t(e, {\n withFileTypes: !0\n }), n = await Promise.allSettled(o.map((t)=>r(i.join(e, t.name)))), s = 0, a = 0, c = 0;\n for (let e of n)'fulfilled' === e.status && (s += e.value.size, e.value.mtimeMs > a && (a = e.value.mtimeMs), c++);\n return `dir-${o.length}-${c}-${s}-${a}`;\n } catch (e) {\n return o('scanner', `Failed to get directory fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\nfunction runGitForOutput(t, r) {\n return new Promise((i)=>{\n let o = e('git', [\n ...t\n ], {\n cwd: r\n }), n = [];\n o.stdout.setEncoding('utf8'), o.stdout.on('data', (e)=>n.push(e)), o.on('close', (e)=>i(0 === e ? n.join('').trim() : '')), o.on('error', ()=>i(''));\n });\n}\n","import e from 'node:path';\nlet DEFAULT_INCLUDE = [\n '**/*.ts',\n '**/*.html',\n '**/*.scss',\n '**/*.css',\n '**/*.sass',\n '**/*.less'\n];\nexport const normalizeOptions = (t)=>({\n rootDir: e.resolve(t.rootDir),\n include: t.include.length > 0 ? t.include : DEFAULT_INCLUDE,\n exclude: t.exclude,\n ignorePatterns: t.ignorePatterns ?? [],\n respectGitignore: t.respectGitignore ?? !0,\n followSymlinks: t.followSymlinks ?? !1,\n dot: t.dot ?? !1\n });\nexport const validateOptions = (e)=>{\n let t = [];\n return e.rootDir && '' !== e.rootDir.trim() || t.push('rootDir cannot be empty'), e.include && 0 !== e.include.length || t.push('No include patterns specified (will use defaults)'), t;\n};\n","export const normalizePattern = (e)=>e.replace(/\\\\/g, '/');\nexport const expandPatterns = (e)=>({\n include: e.include.map(normalizePattern),\n ignore: [\n ...e.exclude.map(normalizePattern),\n ...e.ignorePatterns.map(normalizePattern)\n ]\n });\nexport const isValidPattern = (e)=>!('' === e.trim() || e.includes('***') || e.endsWith('/') || e.endsWith('\\\\')) && !!balanced(e, '{', '}') && !!balanced(e, '[', ']');\nexport const validatePatterns = (e)=>{\n let t = [], n = [];\n for (let a of e)isValidPattern(a) ? t.push(a) : n.push(`Invalid pattern: \"${a}\"`);\n return [\n t,\n n\n ];\n};\nfunction balanced(e, t, n) {\n let a = 0;\n for(let r = 0; r < e.length; r++)e[r] === t ? a++ : e[r] === n && a--;\n return 0 === a;\n}\n","import { stat as t } from 'node:fs/promises';\nimport e from 'node:path';\nlet runWithLimit = async (t, e)=>{\n let a = Array(t.length), l = 0, r = async ()=>{\n for(; l < t.length;){\n let e = l++;\n try {\n a[e] = {\n status: 'fulfilled',\n value: await t[e]()\n };\n } catch (t) {\n a[e] = {\n status: 'rejected',\n reason: t\n };\n }\n }\n };\n return await Promise.all(Array.from({\n length: Math.min(e, t.length)\n }, r)), a;\n}, calculateTotalSize = async (e)=>{\n let a = e.map((e)=>()=>t(e)), l = await runWithLimit(a, 128), r = 0;\n for (let t of l)'fulfilled' === t.status && (r += t.value.size);\n return r;\n};\nexport const calculateStats = async (t, a, l = !1)=>{\n let r = ((t)=>{\n let a = new Map();\n for (let l of t){\n let t = e.extname(l) || '.no-extension';\n a.set(t, (a.get(t) ?? 0) + 1);\n }\n return a;\n })(t), n = await calculateTotalSize(t), o = performance.now() - a;\n return {\n totalFiles: t.length,\n byExtension: r,\n totalSize: n,\n scanTime: o,\n cacheHit: l\n };\n};\n","import { access as e, readFile as t } from 'node:fs/promises';\nimport n from 'node:path';\nimport { debug as r, stableSerialize as i, time as o, timeEnd as a } from '@ngcompass/common';\nimport { applyFilters as l, filterByGlob as s } from './filters.js';\nimport { executeGlob as c } from './glob.js';\nimport { executeGitDiscovery as f, getDirectoryFingerprint as u, getRepoFingerprint as m, isGitRepo as d } from './git.js';\nimport { normalizeOptions as g } from './normalize.js';\nimport { expandPatterns as p } from './patterns.js';\nimport { calculateStats as y } from './stats.js';\nimport { Err as h, Ok as w } from './types.js';\nexport const scan = async (t)=>{\n var i, s, c, f, u, m, b, $, x, v, D, F;\n let A;\n o('file-scan');\n let S = performance.now(), C = t.onProgress ?? (()=>void 0);\n i = t, r('scanner', `Starting file discovery in: ${i.rootDir}`), r('scanner', `Include patterns: ${i.include.join(', ')}`), r('scanner', `Exclude patterns: ${i.exclude.join(', ')}`), C('normalizing', 0);\n let j = performance.now(), E = g(t), T = p(E), z = performance.now() - j;\n if (s = E, c = T, r('scanner', `Normalized rootDir: ${s.rootDir}`), r('scanner', `Expanded to ${c.include.length} include patterns, ${c.ignore.length} ignore patterns`), t.tsConfigPath) {\n let e = await loadTsConfigPatterns(t.tsConfigPath, E.rootDir);\n e && (f = T, T = {\n include: (u = e).include.length > 0 ? [\n ...f.include,\n ...u.include\n ] : f.include,\n ignore: u.exclude.length > 0 ? [\n ...f.ignore,\n ...u.exclude\n ] : f.ignore\n }, r('scanner', `tsconfig patterns merged: +${e.include.length} include, +${e.exclude.length} exclude`));\n }\n try {\n await e(E.rootDir);\n } catch {\n return a('file-scan'), h(Error(`rootDir does not exist or is not accessible: ${E.rootDir}`));\n }\n let k = await d(E.rootDir), G = await tryLoadFromCache(E, T, k, t);\n if (G) {\n let e, t, r;\n return C('complete', G.files.length), m = G, b = S, e = performance.now() - b, r = (t = function(e) {\n if (!e || 'object' != typeof e || 'number' != typeof e.totalFiles || 'number' != typeof e.totalSize || 'number' != typeof e.scanTime || 'boolean' != typeof e.cacheHit) return null;\n let t = function(e) {\n if (e instanceof Map) return e;\n if (!Array.isArray(e)) return null;\n let t = new Map();\n for (let n of e){\n if (!Array.isArray(n) || 2 !== n.length) return null;\n let [e, r] = n;\n if ('string' != typeof e || 'number' != typeof r) return null;\n t.set(e, r);\n }\n return t;\n }(e.byExtension);\n return t ? {\n totalFiles: e.totalFiles,\n byExtension: t,\n totalSize: e.totalSize,\n scanTime: e.scanTime,\n cacheHit: e.cacheHit\n } : null;\n }(m.stats)) ? {\n ...t,\n scanTime: e,\n cacheHit: !0\n } : {\n totalFiles: m.files.length,\n byExtension: function(e) {\n let t = new Map();\n for (let r of e){\n let e = n.extname(r) || '.no-extension';\n t.set(e, (t.get(e) ?? 0) + 1);\n }\n return t;\n }(m.files),\n totalSize: 0,\n scanTime: e,\n cacheHit: !0\n }, w({\n files: m.files,\n stats: r,\n timestamp: Date.now(),\n timings: {\n normalization: 0,\n discovery: e,\n filtering: 0,\n total: e\n }\n });\n }\n C('discovering', 0);\n let H = performance.now(), P = await discoverFiles(E, T, k);\n if (!P.ok) return logAndReturnError('Scan', P.error), P;\n let N = P.data, K = performance.now() - H;\n C('filtering', N.length);\n let L = performance.now(), M = await l({\n files: N\n }, E);\n if (!M.ok) return logAndReturnError('Filter', M.error), M;\n let R = M.data.files, I = performance.now() - L;\n $ = R.length, x = M.data.filtered, r('scanner', `After filters: ${$} files (${x} filtered out)`), C('calculating-stats', R.length);\n let B = await y(R, S, !1);\n await saveToCache(E, T, R, {\n totalFiles: (v = B).totalFiles,\n byExtension: Array.from(v.byExtension.entries()),\n totalSize: v.totalSize,\n scanTime: v.scanTime,\n cacheHit: v.cacheHit\n }, k, t);\n let J = a('file-scan');\n return D = B, F = J, r('scanner', `Scan complete: ${D.totalFiles} files in ${F.toFixed(1)}ms`), A = Array.from(D.byExtension.entries()).sort(([, e], [, t])=>t - e).slice(0, 5).map(([e, t])=>`${e}:${t}`).join(', '), r('scanner', `Breakdown: ${A}`), 0 === D.totalFiles && r('scanner', 'No files found matching patterns. Check your include/exclude configuration.'), C('complete', R.length), w({\n files: R,\n stats: B,\n timestamp: Date.now(),\n timings: {\n normalization: z,\n discovery: K,\n filtering: I,\n total: J\n }\n });\n};\nasync function discoverFiles(e, t, n) {\n if (n) {\n r('scanner', 'Git repository detected. Using fast Git discovery...');\n let n = await f(e.rootDir);\n if (0 === n.length) return r('scanner', 'Git discovery returned 0 files — falling back to glob-based scanning.'), runGlobDiscovery(e, t);\n let i = s(n, t.include, t.ignore, e.rootDir);\n return r('scanner', `Git discovery found ${i.length} files (after glob filtering)`), w(i);\n }\n return r('scanner', 'Not a Git repository. Falling back to standard globbing...'), runGlobDiscovery(e, t);\n}\nasync function runGlobDiscovery(e, t) {\n let n = await c(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return n.ok ? (r('scanner', `Glob found ${n.data.files.length} files`), w(n.data.files)) : n;\n}\nasync function getCacheKey(e, t, n, r) {\n if (!r.cache) return null;\n let o = n ? await m(e.rootDir) : await u(e.rootDir);\n return o ? r.cache.computeHash([\n e.rootDir,\n i(t),\n o,\n 'v1'\n ].join('|')) : null;\n}\nasync function tryLoadFromCache(e, t, n, i) {\n let o = await getCacheKey(e, t, n, i);\n if (!o || !i.cache) return null;\n let a = await i.cache.files.get(o);\n return a ? (r('scanner', `Cache HIT. Loaded ${a.files.length} files.`), a) : null;\n}\nasync function saveToCache(e, t, n, i, o, a) {\n if (!a.cache || 0 === n.length) return;\n let l = await getCacheKey(e, t, o, a);\n l && (await a.cache.files.set(l, [\n ...n\n ], i), r('scanner', 'File list cached.'));\n}\nfunction logAndReturnError(e, t) {\n let n = a('file-scan');\n r('scanner', `${e} failed after ${n.toFixed(1)}ms: ${t.message}`);\n}\nasync function loadTsConfigPatterns(e, i) {\n try {\n let r = (await t(e, 'utf-8')).replace(/\\/\\/[^\\n]*/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, ''), o = JSON.parse(r), a = n.dirname(n.resolve(e)), l = (e)=>n.relative(i, n.resolve(a, e)).replace(/\\\\/g, '/'), s = [], c = [];\n return Array.isArray(o.include) && s.push(...o.include.map(l)), Array.isArray(o.files) && s.push(...o.files.map(l)), Array.isArray(o.exclude) && c.push(...o.exclude.map(l)), {\n include: s,\n exclude: c\n };\n } catch (t) {\n return r('scanner', `Failed to load tsconfig patterns from ${e}: ${t instanceof Error ? t.message : String(t)}`), null;\n }\n}\n"]} |
+1
-187
@@ -5,17 +5,2 @@ import { CacheContext } from '@ngcompass/cache'; | ||
| /** | ||
| * @fileoverview | ||
| * Definitional contracts and primitive types for the @ngcompass/scanner package. | ||
| * | ||
| * Adheres to functional programming principles by ensuring type immutability | ||
| * and providing explicit structures for configuration, results, and progress reporting. | ||
| */ | ||
| /** | ||
| * Represents a value that may be present, null, or undefined. | ||
| */ | ||
| type Option<T> = T | null | undefined; | ||
| /** | ||
| * Defines the input configuration options for a scanner operation. | ||
| */ | ||
| interface ScanOptions { | ||
@@ -28,29 +13,8 @@ readonly rootDir: string; | ||
| readonly followSymlinks?: boolean; | ||
| /** | ||
| * Whether to match dotfiles and dot-directories (e.g. `.angular/`, `.nx/`). | ||
| * Corresponds to tinyglobby's `dot` option. | ||
| * @default false | ||
| */ | ||
| readonly dot?: boolean; | ||
| readonly debug?: boolean; | ||
| readonly cache?: CacheContext; | ||
| /** | ||
| * Optional progress callback invoked at key phases of the scan. | ||
| * Receives the current phase name and the file count known at that point. | ||
| */ | ||
| readonly onProgress?: OnProgressCallback; | ||
| /** | ||
| * Optional path to a `tsconfig.json` file. When provided, the scanner | ||
| * narrows discovered files to those the TypeScript compiler would include | ||
| * by merging the tsconfig's `include` / `exclude` / `files` arrays with | ||
| * the scan options. | ||
| * | ||
| * Relative paths inside the tsconfig are resolved against the tsconfig's | ||
| * directory, not `rootDir`. | ||
| */ | ||
| readonly tsConfigPath?: string; | ||
| } | ||
| /** | ||
| * Represents scanner configuration options after the application of project defaults. | ||
| */ | ||
| interface NormalizedOptions { | ||
@@ -63,8 +27,4 @@ readonly rootDir: string; | ||
| readonly followSymlinks: boolean; | ||
| /** Resolved value of ScanOptions.dot β€” always a boolean after normalization. */ | ||
| readonly dot: boolean; | ||
| } | ||
| /** | ||
| * Represents a set of inclusion and exclusion glob patterns. | ||
| */ | ||
| interface ExpandedPatterns { | ||
@@ -74,5 +34,2 @@ readonly include: ReadonlyArray<string>; | ||
| } | ||
| /** | ||
| * Encapsulates statistical metadata for a completed scan operation. | ||
| */ | ||
| interface ScanStatistics { | ||
@@ -85,5 +42,2 @@ readonly totalFiles: number; | ||
| } | ||
| /** | ||
| * Encapsulates high-resolution timing data for various scan phases. | ||
| */ | ||
| interface ScanTimings { | ||
@@ -95,5 +49,2 @@ readonly normalization: number; | ||
| } | ||
| /** | ||
| * Encapsulates the consolidated results and metadata of a scan operation. | ||
| */ | ||
| interface ScanResult { | ||
@@ -105,163 +56,26 @@ readonly files: ReadonlyArray<string>; | ||
| } | ||
| /** | ||
| * Gitignore filter function type | ||
| */ | ||
| type GitignoreFilter = (file: string, rootDir: string) => boolean; | ||
| /** | ||
| * Represents the distinct phases of an active scan operation. | ||
| */ | ||
| type ScanPhase = 'normalizing' | 'discovering' | 'filtering' | 'calculating-stats' | 'complete'; | ||
| /** | ||
| * Callback invoked at each scan phase transition with the current file count. | ||
| * Useful for driving progress bars or log output in CLI consumers. | ||
| * | ||
| * @param phase - The phase that just started (or completed for 'complete'). | ||
| * @param count - Number of files known at this point in the scan. | ||
| */ | ||
| type OnProgressCallback = (phase: ScanPhase, count: number) => void; | ||
| /** | ||
| * Executes a comprehensive file scan based on the provided configuration. | ||
| * | ||
| * Discovers files using optimized Git utilities or standard globbing, applies | ||
| * hierarchical ignore filters, and computes project-level statistics. | ||
| * | ||
| * @param options - The configuration settings for the scan operation. | ||
| * @returns A promise resolving to a Result containing the discovered files and scan metadata. | ||
| */ | ||
| declare const scan: (options: ScanOptions) => Promise<Result<ScanResult>>; | ||
| /** | ||
| * Normalizes scanner options by applying defaults and resolving paths. | ||
| * | ||
| * @param options - The raw configuration options provided by the caller. | ||
| * @returns A new object containing fully normalized scanner options. | ||
| */ | ||
| declare const normalizeOptions: (options: ScanOptions) => NormalizedOptions; | ||
| /** | ||
| * Validates the structural integrity of the provided scanner options. | ||
| * | ||
| * @param options - The options to evaluate. | ||
| * @returns A read-only collection of validation error messages, if any. | ||
| */ | ||
| declare const validateOptions: (options: ScanOptions) => ReadonlyArray<string>; | ||
| /** | ||
| * @fileoverview | ||
| * Provides utilities for the expansion and normalization of glob patterns. | ||
| * | ||
| * Implements deterministic transformations to ensure cross-platform compatibility | ||
| * and validates pattern syntax before scanner execution. | ||
| */ | ||
| /** | ||
| * Normalizes a glob pattern by ensuring the use of forward slashes. | ||
| * | ||
| * @param pattern - The pattern to normalize. | ||
| * @returns The normalized pattern string. | ||
| */ | ||
| declare const normalizePattern: (pattern: string) => string; | ||
| /** | ||
| * Expands configuration options into normalized inclusion and exclusion patterns. | ||
| * | ||
| * @param options - The normalized scanner options. | ||
| * @returns An object containing expanded include and ignore pattern collections. | ||
| */ | ||
| declare const expandPatterns: (options: NormalizedOptions) => ExpandedPatterns; | ||
| /** | ||
| * Evaluates whether a glob pattern adheres to supported syntax rules. | ||
| * | ||
| * @param pattern - The pattern to validate. | ||
| * @returns True if the pattern is structurally valid. | ||
| */ | ||
| declare const isValidPattern: (pattern: string) => boolean; | ||
| /** | ||
| * Validates a collection of patterns, segregating them into valid and erroneous sets. | ||
| * | ||
| * @param patterns - The patterns to evaluate. | ||
| * @returns A tuple containing the valid patterns and a collection of error messages. | ||
| */ | ||
| declare const validatePatterns: (patterns: ReadonlyArray<string>) => readonly [ReadonlyArray<string>, ReadonlyArray<string>]; | ||
| /** | ||
| * @fileoverview | ||
| * Provides high-performance file filtering utilities for the scanner. | ||
| * | ||
| * Implements functional primitives for deduplication, gitignore evaluation, | ||
| * extension filtering, and glob-based inclusion/exclusion logic. All operations | ||
| * prioritize immutability and predictable outcomes. | ||
| */ | ||
| /** | ||
| * Deduplicates a collection of file paths. | ||
| * | ||
| * @param files - A collection of file paths, potentially containing duplicates. | ||
| * @returns A new read-only collection with duplicate entries removed. | ||
| */ | ||
| declare const deduplicateFiles: (files: ReadonlyArray<string>) => ReadonlyArray<string>; | ||
| /** | ||
| * Filters a collection of files based on their file extensions. | ||
| * | ||
| * @param files - The files to evaluate. | ||
| * @param extensions - A collection of allowed file extensions (e.g., ['.ts', '.html']). | ||
| * @returns A collection of files matching the specified extensions. | ||
| */ | ||
| declare const filterByExtension: (files: ReadonlyArray<string>, extensions: ReadonlyArray<string>) => ReadonlyArray<string>; | ||
| /** | ||
| * Filters a collection of files using regular expression pattern matching. | ||
| * | ||
| * @param files - The files to evaluate. | ||
| * @param pattern - The regular expression pattern to apply. | ||
| * @returns A collection of files that satisfy the pattern. | ||
| */ | ||
| declare const filterByPattern: (files: ReadonlyArray<string>, pattern: RegExp) => ReadonlyArray<string>; | ||
| /** | ||
| * @fileoverview | ||
| * Provides utilities for calculating and formatting file scan statistics. | ||
| * | ||
| * Implements high-performance aggregation logic, including asynchronous file size | ||
| * summation with concurrency control and extension-based grouping. | ||
| */ | ||
| /** | ||
| * Generates comprehensive scan statistics for a collection of discovered files. | ||
| * | ||
| * @param files - The collection of discovered file paths. | ||
| * @param startTime - The high-resolution start time of the scan operation. | ||
| * @param cacheHit - Indicates whether the results were retrieved from a cache. | ||
| * @returns A promise resolving to the computed scan statistics. | ||
| */ | ||
| declare const calculateStats: (files: ReadonlyArray<string>, startTime: number, cacheHit?: boolean) => Promise<ScanStatistics>; | ||
| /** | ||
| * Constructs a gitignore evaluator function from raw ignore patterns. | ||
| * | ||
| * @param gitignoreContent - The raw content of a .gitignore configuration. | ||
| * @returns An evaluator function that determines if a file path is ignored. | ||
| */ | ||
| declare const createGitignoreFilter: (gitignoreContent: string) => GitignoreFilter; | ||
| /** | ||
| * Constructs a pass-through filter that accepts all file paths. | ||
| * | ||
| * @returns An evaluator function that invariably returns true. | ||
| */ | ||
| declare const createPassThroughFilter: () => GitignoreFilter; | ||
| /** | ||
| * Builds a composite gitignore filter by collecting every `.gitignore` file | ||
| * that lies between `rootDir` and the directories of the supplied file paths. | ||
| * | ||
| * Each `.gitignore` file is applied relative to its own directory β€” exactly | ||
| * as Git itself does β€” so a pattern `dist/` inside `src/.gitignore` only | ||
| * ignores `src/dist/`, not the repo root `dist/`. | ||
| * | ||
| * This is more correct than loading only the root `.gitignore` for projects | ||
| * that use per-package or per-directory ignore rules (monorepos, etc.). | ||
| * | ||
| * @param rootDir - Scan root directory (absolute path) | ||
| * @param filePaths - File paths discovered so far (used to find relevant dirs) | ||
| * @returns Composite filter or a pass-through if no `.gitignore` files found | ||
| */ | ||
| declare const loadAllGitignoreFilters: (rootDir: string, filePaths: ReadonlyArray<string>) => Promise<Result<GitignoreFilter>>; | ||
| export { type ExpandedPatterns, type GitignoreFilter, type NormalizedOptions, type OnProgressCallback, type Option, type ScanOptions, type ScanPhase, type ScanResult, type ScanStatistics, calculateStats, createGitignoreFilter, createPassThroughFilter, deduplicateFiles, expandPatterns, filterByExtension, filterByPattern, isValidPattern, loadAllGitignoreFilters, normalizeOptions, normalizePattern, scan, validateOptions, validatePatterns }; | ||
| export { type ExpandedPatterns, type GitignoreFilter, type NormalizedOptions, type OnProgressCallback, type ScanOptions, type ScanPhase, type ScanResult, type ScanStatistics, calculateStats, createGitignoreFilter, createPassThroughFilter, deduplicateFiles, expandPatterns, filterByExtension, filterByPattern, isValidPattern, loadAllGitignoreFilters, normalizeOptions, normalizePattern, scan, validateOptions, validatePatterns }; |
+1
-187
@@ -5,17 +5,2 @@ import { CacheContext } from '@ngcompass/cache'; | ||
| /** | ||
| * @fileoverview | ||
| * Definitional contracts and primitive types for the @ngcompass/scanner package. | ||
| * | ||
| * Adheres to functional programming principles by ensuring type immutability | ||
| * and providing explicit structures for configuration, results, and progress reporting. | ||
| */ | ||
| /** | ||
| * Represents a value that may be present, null, or undefined. | ||
| */ | ||
| type Option<T> = T | null | undefined; | ||
| /** | ||
| * Defines the input configuration options for a scanner operation. | ||
| */ | ||
| interface ScanOptions { | ||
@@ -28,29 +13,8 @@ readonly rootDir: string; | ||
| readonly followSymlinks?: boolean; | ||
| /** | ||
| * Whether to match dotfiles and dot-directories (e.g. `.angular/`, `.nx/`). | ||
| * Corresponds to tinyglobby's `dot` option. | ||
| * @default false | ||
| */ | ||
| readonly dot?: boolean; | ||
| readonly debug?: boolean; | ||
| readonly cache?: CacheContext; | ||
| /** | ||
| * Optional progress callback invoked at key phases of the scan. | ||
| * Receives the current phase name and the file count known at that point. | ||
| */ | ||
| readonly onProgress?: OnProgressCallback; | ||
| /** | ||
| * Optional path to a `tsconfig.json` file. When provided, the scanner | ||
| * narrows discovered files to those the TypeScript compiler would include | ||
| * by merging the tsconfig's `include` / `exclude` / `files` arrays with | ||
| * the scan options. | ||
| * | ||
| * Relative paths inside the tsconfig are resolved against the tsconfig's | ||
| * directory, not `rootDir`. | ||
| */ | ||
| readonly tsConfigPath?: string; | ||
| } | ||
| /** | ||
| * Represents scanner configuration options after the application of project defaults. | ||
| */ | ||
| interface NormalizedOptions { | ||
@@ -63,8 +27,4 @@ readonly rootDir: string; | ||
| readonly followSymlinks: boolean; | ||
| /** Resolved value of ScanOptions.dot β€” always a boolean after normalization. */ | ||
| readonly dot: boolean; | ||
| } | ||
| /** | ||
| * Represents a set of inclusion and exclusion glob patterns. | ||
| */ | ||
| interface ExpandedPatterns { | ||
@@ -74,5 +34,2 @@ readonly include: ReadonlyArray<string>; | ||
| } | ||
| /** | ||
| * Encapsulates statistical metadata for a completed scan operation. | ||
| */ | ||
| interface ScanStatistics { | ||
@@ -85,5 +42,2 @@ readonly totalFiles: number; | ||
| } | ||
| /** | ||
| * Encapsulates high-resolution timing data for various scan phases. | ||
| */ | ||
| interface ScanTimings { | ||
@@ -95,5 +49,2 @@ readonly normalization: number; | ||
| } | ||
| /** | ||
| * Encapsulates the consolidated results and metadata of a scan operation. | ||
| */ | ||
| interface ScanResult { | ||
@@ -105,163 +56,26 @@ readonly files: ReadonlyArray<string>; | ||
| } | ||
| /** | ||
| * Gitignore filter function type | ||
| */ | ||
| type GitignoreFilter = (file: string, rootDir: string) => boolean; | ||
| /** | ||
| * Represents the distinct phases of an active scan operation. | ||
| */ | ||
| type ScanPhase = 'normalizing' | 'discovering' | 'filtering' | 'calculating-stats' | 'complete'; | ||
| /** | ||
| * Callback invoked at each scan phase transition with the current file count. | ||
| * Useful for driving progress bars or log output in CLI consumers. | ||
| * | ||
| * @param phase - The phase that just started (or completed for 'complete'). | ||
| * @param count - Number of files known at this point in the scan. | ||
| */ | ||
| type OnProgressCallback = (phase: ScanPhase, count: number) => void; | ||
| /** | ||
| * Executes a comprehensive file scan based on the provided configuration. | ||
| * | ||
| * Discovers files using optimized Git utilities or standard globbing, applies | ||
| * hierarchical ignore filters, and computes project-level statistics. | ||
| * | ||
| * @param options - The configuration settings for the scan operation. | ||
| * @returns A promise resolving to a Result containing the discovered files and scan metadata. | ||
| */ | ||
| declare const scan: (options: ScanOptions) => Promise<Result<ScanResult>>; | ||
| /** | ||
| * Normalizes scanner options by applying defaults and resolving paths. | ||
| * | ||
| * @param options - The raw configuration options provided by the caller. | ||
| * @returns A new object containing fully normalized scanner options. | ||
| */ | ||
| declare const normalizeOptions: (options: ScanOptions) => NormalizedOptions; | ||
| /** | ||
| * Validates the structural integrity of the provided scanner options. | ||
| * | ||
| * @param options - The options to evaluate. | ||
| * @returns A read-only collection of validation error messages, if any. | ||
| */ | ||
| declare const validateOptions: (options: ScanOptions) => ReadonlyArray<string>; | ||
| /** | ||
| * @fileoverview | ||
| * Provides utilities for the expansion and normalization of glob patterns. | ||
| * | ||
| * Implements deterministic transformations to ensure cross-platform compatibility | ||
| * and validates pattern syntax before scanner execution. | ||
| */ | ||
| /** | ||
| * Normalizes a glob pattern by ensuring the use of forward slashes. | ||
| * | ||
| * @param pattern - The pattern to normalize. | ||
| * @returns The normalized pattern string. | ||
| */ | ||
| declare const normalizePattern: (pattern: string) => string; | ||
| /** | ||
| * Expands configuration options into normalized inclusion and exclusion patterns. | ||
| * | ||
| * @param options - The normalized scanner options. | ||
| * @returns An object containing expanded include and ignore pattern collections. | ||
| */ | ||
| declare const expandPatterns: (options: NormalizedOptions) => ExpandedPatterns; | ||
| /** | ||
| * Evaluates whether a glob pattern adheres to supported syntax rules. | ||
| * | ||
| * @param pattern - The pattern to validate. | ||
| * @returns True if the pattern is structurally valid. | ||
| */ | ||
| declare const isValidPattern: (pattern: string) => boolean; | ||
| /** | ||
| * Validates a collection of patterns, segregating them into valid and erroneous sets. | ||
| * | ||
| * @param patterns - The patterns to evaluate. | ||
| * @returns A tuple containing the valid patterns and a collection of error messages. | ||
| */ | ||
| declare const validatePatterns: (patterns: ReadonlyArray<string>) => readonly [ReadonlyArray<string>, ReadonlyArray<string>]; | ||
| /** | ||
| * @fileoverview | ||
| * Provides high-performance file filtering utilities for the scanner. | ||
| * | ||
| * Implements functional primitives for deduplication, gitignore evaluation, | ||
| * extension filtering, and glob-based inclusion/exclusion logic. All operations | ||
| * prioritize immutability and predictable outcomes. | ||
| */ | ||
| /** | ||
| * Deduplicates a collection of file paths. | ||
| * | ||
| * @param files - A collection of file paths, potentially containing duplicates. | ||
| * @returns A new read-only collection with duplicate entries removed. | ||
| */ | ||
| declare const deduplicateFiles: (files: ReadonlyArray<string>) => ReadonlyArray<string>; | ||
| /** | ||
| * Filters a collection of files based on their file extensions. | ||
| * | ||
| * @param files - The files to evaluate. | ||
| * @param extensions - A collection of allowed file extensions (e.g., ['.ts', '.html']). | ||
| * @returns A collection of files matching the specified extensions. | ||
| */ | ||
| declare const filterByExtension: (files: ReadonlyArray<string>, extensions: ReadonlyArray<string>) => ReadonlyArray<string>; | ||
| /** | ||
| * Filters a collection of files using regular expression pattern matching. | ||
| * | ||
| * @param files - The files to evaluate. | ||
| * @param pattern - The regular expression pattern to apply. | ||
| * @returns A collection of files that satisfy the pattern. | ||
| */ | ||
| declare const filterByPattern: (files: ReadonlyArray<string>, pattern: RegExp) => ReadonlyArray<string>; | ||
| /** | ||
| * @fileoverview | ||
| * Provides utilities for calculating and formatting file scan statistics. | ||
| * | ||
| * Implements high-performance aggregation logic, including asynchronous file size | ||
| * summation with concurrency control and extension-based grouping. | ||
| */ | ||
| /** | ||
| * Generates comprehensive scan statistics for a collection of discovered files. | ||
| * | ||
| * @param files - The collection of discovered file paths. | ||
| * @param startTime - The high-resolution start time of the scan operation. | ||
| * @param cacheHit - Indicates whether the results were retrieved from a cache. | ||
| * @returns A promise resolving to the computed scan statistics. | ||
| */ | ||
| declare const calculateStats: (files: ReadonlyArray<string>, startTime: number, cacheHit?: boolean) => Promise<ScanStatistics>; | ||
| /** | ||
| * Constructs a gitignore evaluator function from raw ignore patterns. | ||
| * | ||
| * @param gitignoreContent - The raw content of a .gitignore configuration. | ||
| * @returns An evaluator function that determines if a file path is ignored. | ||
| */ | ||
| declare const createGitignoreFilter: (gitignoreContent: string) => GitignoreFilter; | ||
| /** | ||
| * Constructs a pass-through filter that accepts all file paths. | ||
| * | ||
| * @returns An evaluator function that invariably returns true. | ||
| */ | ||
| declare const createPassThroughFilter: () => GitignoreFilter; | ||
| /** | ||
| * Builds a composite gitignore filter by collecting every `.gitignore` file | ||
| * that lies between `rootDir` and the directories of the supplied file paths. | ||
| * | ||
| * Each `.gitignore` file is applied relative to its own directory β€” exactly | ||
| * as Git itself does β€” so a pattern `dist/` inside `src/.gitignore` only | ||
| * ignores `src/dist/`, not the repo root `dist/`. | ||
| * | ||
| * This is more correct than loading only the root `.gitignore` for projects | ||
| * that use per-package or per-directory ignore rules (monorepos, etc.). | ||
| * | ||
| * @param rootDir - Scan root directory (absolute path) | ||
| * @param filePaths - File paths discovered so far (used to find relevant dirs) | ||
| * @returns Composite filter or a pass-through if no `.gitignore` files found | ||
| */ | ||
| declare const loadAllGitignoreFilters: (rootDir: string, filePaths: ReadonlyArray<string>) => Promise<Result<GitignoreFilter>>; | ||
| export { type ExpandedPatterns, type GitignoreFilter, type NormalizedOptions, type OnProgressCallback, type Option, type ScanOptions, type ScanPhase, type ScanResult, type ScanStatistics, calculateStats, createGitignoreFilter, createPassThroughFilter, deduplicateFiles, expandPatterns, filterByExtension, filterByPattern, isValidPattern, loadAllGitignoreFilters, normalizeOptions, normalizePattern, scan, validateOptions, validatePatterns }; | ||
| export { type ExpandedPatterns, type GitignoreFilter, type NormalizedOptions, type OnProgressCallback, type ScanOptions, type ScanPhase, type ScanResult, type ScanStatistics, calculateStats, createGitignoreFilter, createPassThroughFilter, deduplicateFiles, expandPatterns, filterByExtension, filterByPattern, isValidPattern, loadAllGitignoreFilters, normalizeOptions, normalizePattern, scan, validateOptions, validatePatterns }; |
+3
-3
@@ -1,4 +0,4 @@ | ||
| import {access,readFile,stat,readdir}from'fs/promises';import g from'path';import {Ok,Err,time,debug,timeEnd}from'@ngcompass/common';export{Err,Ok}from'@ngcompass/common';import {glob}from'tinyglobby';import {minimatch}from'minimatch';import Y from'ignore';import {exec,spawn}from'child_process';import {promisify}from'util';var xe=["**/*.ts","**/*.html","**/*.scss","**/*.css","**/*.sass","**/*.less"],j=e=>({rootDir:g.resolve(e.rootDir),include:e.include.length>0?e.include:xe,exclude:e.exclude,ignorePatterns:e.ignorePatterns??[],respectGitignore:e.respectGitignore??true,followSymlinks:e.followSymlinks??false,dot:e.dot??false}),we=e=>{let r=[];return e.rootDir&&e.rootDir.trim()!==""||r.push("rootDir cannot be empty"),e.include&&e.include.length!==0||r.push("No include patterns specified (will use defaults)"),r};var P=e=>e.replace(/\\/g,"/"),C=e=>({include:e.include.map(P),ignore:[...e.exclude.map(P),...e.ignorePatterns.map(P)]}),X=e=>!(e.trim()===""||e.includes("***")),Fe=e=>{let r=[],t=[];for(let i of e)X(i)?r.push(i):t.push(`Invalid pattern: "${i}"`);return [r,t]};var M=async(e,r,t)=>{try{let i=await glob([...e.include],{cwd:r,ignore:[...e.ignore],absolute:!0,followSymbolicLinks:t.followSymlinks,onlyFiles:!0,dot:t.dot});return Ok({files:i})}catch(i){return Err(Error(`Glob execution failed: ${i.message}`))}};var Ee=async e=>{let r=g.join(e,".gitignore");try{return await readFile(r,"utf-8")}catch{return debug("scanner",`Failed to load .gitignore from ${e}`),null}},Se=e=>{let r=Y().add(e);return (t,i)=>{let n=g.relative(i,t);return !r.ignores(n)}},Z=()=>()=>true;var L=async(e,r)=>{try{let t=new Set;for(let n of(t.add(e),r)){let o=g.dirname(n);for(;o.startsWith(e)&&o!==g.dirname(e)&&(t.add(o),o!==e);)o=g.dirname(o);}let i=[];for(let n of t){let o=await Ee(n);o&&i.push({dir:n,ig:Y().add(o)});}return i.length===0?Ok(Z()):Ok(n=>{for(let{dir:o,ig:a}of i){let u=g.relative(o,n).replace(/\\/g,"/");if(!u.startsWith("..")&&!g.isAbsolute(u)&&a.ignores(u))return !1}return !0})}catch(t){return Err(Error(`Failed to load gitignore filters: ${t.message}`))}};var te=e=>Array.from(new Set(e)),ke=(e,r,t)=>e.filter(i=>t(i,r)),re=async(e,r)=>{try{let t=e.files,i=t.length;if(r.respectGitignore){let n=await L(r.rootDir,t);if(!n.ok)return n;t=ke(t,r.rootDir,n.data);}return t=te(t),Ok({files:t,filtered:i-t.length})}catch(t){return Err(Error(`Filtering failed: ${t.message}`))}},Ge=(e,r)=>{let t=new Set(r);return e.filter(i=>{let n=i.substring(i.lastIndexOf("."));return t.has(n)})},Ae=(e,r)=>e.filter(t=>r.test(t)),ie=(e,r,t,i)=>e.filter(n=>{let o=g.relative(i,n).replace(/\\/g,"/");return !(!r.some(a=>minimatch(o,a,{dot:true}))||t.some(a=>minimatch(o,a,{dot:true})))});var Te=async(e,r)=>{let t=Array(e.length),i=0,n=async()=>{for(;i<e.length;){let o=i++;try{t[o]={status:"fulfilled",value:await e[o]()};}catch(a){t[o]={status:"rejected",reason:a};}}};return await Promise.all(Array.from({length:Math.min(r,e.length)},n)),t},Oe=async e=>{let r=e.map(t=>()=>stat(t));return (await Te(r,128)).reduce((t,i)=>t+(i.status==="fulfilled"?i.value.size:0),0)},N=async(e,r,t=false)=>{let i=e.reduce((a,u)=>{let p=g.extname(u)||".no-extension",y=a.get(p)??0;return a.set(p,y+1),a},new Map),n=await Oe(e),o=performance.now()-r;return {totalFiles:e.length,byExtension:i,totalSize:n,scanTime:o,cacheHit:t}};var B=promisify(exec),oe=async e=>{try{return await B("git rev-parse --is-inside-work-tree",{cwd:e}),!0}catch{return false}},ae=async e=>new Promise(r=>{try{let t=spawn("git",["ls-files","-c","-o","--exclude-standard"],{cwd:e}),i=[];t.stdout.setEncoding("utf8"),t.stdout.on("data",n=>{i.push(n);}),t.on("close",n=>{if(n!==0){debug("scanner",`git ls-files exited with code ${n}`),r([]);return}let o=i.join("").split(` | ||
| `).filter(a=>a.trim().length>0).map(a=>g.resolve(e,a));r(o);}),t.on("error",n=>{debug("scanner",`Git discovery failed: ${n.message}`),r([]);});}catch(t){debug("scanner",`Git discovery failed: ${t.message}`),r([]);}}),le=async e=>{try{let{stdout:r}=await B("git rev-parse HEAD",{cwd:e});try{let{stdout:t}=await B("git rev-parse --show-toplevel",{cwd:e}),i=g.join(t.trim(),".git","index"),n=await stat(i);return `${r.trim()}-${n.mtime.getTime()}`}catch{return r.trim()}}catch(r){return debug("scanner",`Failed to get repo fingerprint: ${r instanceof Error?r.message:String(r)}`),""}},se=async e=>{try{let r=await readdir(e,{withFileTypes:!0}),t=await Promise.allSettled(r.map(a=>stat(g.join(e,a.name)))),i=0,n=0,o=0;for(let a of t)a.status==="fulfilled"&&(i+=a.value.size,a.value.mtimeMs>n&&(n=a.value.mtimeMs),o++);return `dir-${r.length}-${o}-${i}-${n}`}catch(r){return debug("scanner",`Failed to get directory fingerprint: ${r instanceof Error?r.message:String(r)}`),""}};var Ie=async e=>{var r,t,i,n,o,a,u,p,y,b,G,W;let J;time("file-scan");let U=performance.now(),h=e.onProgress??(()=>{});r=e,debug("scanner",`Starting file discovery in: ${r.rootDir}`),debug("scanner",`Include patterns: ${r.include.join(", ")}`),debug("scanner",`Exclude patterns: ${r.exclude.join(", ")}`),h("normalizing",0);let ue=performance.now(),d=j(e),x=C(d),de=performance.now()-ue;if(t=d,i=x,debug("scanner",`Normalized rootDir: ${t.rootDir}`),debug("scanner",`Expanded to ${i.include.length} include patterns, ${i.ignore.length} ignore patterns`),e.tsConfigPath){let s=await Ue(e.tsConfigPath,d.rootDir);s&&(n=x,x={include:(o=s).include.length>0?[...n.include,...o.include]:n.include,ignore:o.exclude.length>0?[...n.ignore,...o.exclude]:n.ignore},debug("scanner",`tsconfig patterns merged: +${s.include.length} include, +${s.exclude.length} exclude`));}try{await access(d.rootDir);}catch{return timeEnd("file-scan"),Err(Error(`rootDir does not exist or is not accessible: ${d.rootDir}`))}let z=await oe(d.rootDir),T=await We(d,x,z,e);if(T){let s,F,_;return h("complete",T.files.length),a=T,u=U,s=performance.now()-u,_=(F=(function(f){if(!f||typeof f!="object"||typeof f.totalFiles!="number"||typeof f.totalSize!="number"||typeof f.scanTime!="number"||typeof f.cacheHit!="boolean")return null;let $=(function(v){if(v instanceof Map)return v;if(!Array.isArray(v))return null;let S=new Map;for(let H of v){if(!Array.isArray(H)||H.length!==2)return null;let[q,Q]=H;if(typeof q!="string"||typeof Q!="number")return null;S.set(q,Q);}return S})(f.byExtension);return $?{totalFiles:f.totalFiles,byExtension:$,totalSize:f.totalSize,scanTime:f.scanTime,cacheHit:f.cacheHit}:null})(a.stats))?{...F,scanTime:s,cacheHit:true}:{totalFiles:a.files.length,byExtension:(function(f){let $=new Map;for(let v of f){let S=g.extname(v)||".no-extension";$.set(S,($.get(S)??0)+1);}return $})(a.files),totalSize:0,scanTime:s,cacheHit:true},Ok({files:a.files,stats:_,timestamp:Date.now(),timings:{normalization:0,discovery:s,filtering:0,total:s}})}h("discovering",0);let me=performance.now(),A=await Re(d,x,z);if(!A.ok)return ce("Scan",A.error),A;let K=A.data,pe=performance.now()-me;h("filtering",K.length);let ge=performance.now(),E=await re({files:K},d);if(!E.ok)return ce("Filter",E.error),E;let w=E.data.files,ye=performance.now()-ge;p=w.length,y=E.data.filtered,debug("scanner",`After filters: ${p} files (${y} filtered out)`),h("calculating-stats",w.length);let O=await N(w,U,false);await Je(d,x,w,{totalFiles:(b=O).totalFiles,byExtension:Array.from(b.byExtension.entries()),totalSize:b.totalSize,scanTime:b.scanTime,cacheHit:b.cacheHit},z,e);let V=timeEnd("file-scan");return G=O,W=V,debug("scanner",`Scan complete: ${G.totalFiles} files in ${W.toFixed(1)}ms`),J=Array.from(G.byExtension.entries()).sort(([,s],[,F])=>F-s).slice(0,5).map(([s,F])=>`${s}:${F}`).join(", "),debug("scanner",`Breakdown: ${J}`),G.totalFiles===0&&debug("scanner","No files found matching patterns. Check your include/exclude configuration."),h("complete",w.length),Ok({files:w,stats:O,timestamp:Date.now(),timings:{normalization:de,discovery:pe,filtering:ye,total:V}})};async function Re(e,r,t){if(t){debug("scanner","Git repository detected. Using fast Git discovery...");let n=await ae(e.rootDir);if(n.length===0){debug("scanner","Git discovery returned 0 files \u2014 this may indicate a git command failure. Falling back to glob-based scanning.");let a=await M(r,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return a.ok&&debug("scanner",`Glob fallback found ${a.data.files.length} files`),a.ok?Ok(a.data.files):a}let o=ie(n,r.include,r.ignore,e.rootDir);return debug("scanner",`Git discovery found ${o.length} files (after glob filtering)`),Ok(o)}debug("scanner","Not a Git repository. Falling back to standard globbing...");let i=await M(r,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return i.ok&&debug("scanner",`Glob found ${i.data.files.length} files`),i.ok?Ok(i.data.files):i}async function fe(e,r,t,i){if(!i.cache)return null;let n=t?await le(e.rootDir):await se(e.rootDir);return n?i.cache.computeHash([e.rootDir,JSON.stringify(r),n,"v1"].join("|")):null}async function We(e,r,t,i){let n=await fe(e,r,t,i);if(!n||!i.cache)return null;let o=await i.cache.files.get(n);return o?(debug("scanner",`Cache HIT. Loaded ${o.files.length} files.`),o):null}async function Je(e,r,t,i,n,o){if(!o.cache||t.length===0)return;let a=await fe(e,r,n,o);a&&(await o.cache.files.set(a,t,i),debug("scanner","File list cached."));}function ce(e,r){let t=timeEnd("file-scan");debug("scanner",`${e} failed after ${t.toFixed(1)}ms: ${r.message}`);}async function Ue(e,r){try{let t=(await readFile(e,"utf-8")).replace(/\/\/[^\n]*/g,"").replace(/\/\*[\s\S]*?\*\//g,""),i=JSON.parse(t),n=g.dirname(g.resolve(e)),o=p=>{let y=g.resolve(n,p);return g.relative(r,y).replace(/\\/g,"/")},a=[],u=[];return Array.isArray(i.include)&&a.push(...i.include.map(o)),Array.isArray(i.files)&&a.push(...i.files.map(o)),Array.isArray(i.exclude)&&u.push(...i.exclude.map(o)),{include:a,exclude:u}}catch(t){return debug("scanner",`Failed to load tsconfig patterns from ${e}: ${t instanceof Error?t.message:String(t)}`),null}} | ||
| export{N as calculateStats,Se as createGitignoreFilter,Z as createPassThroughFilter,te as deduplicateFiles,C as expandPatterns,Ge as filterByExtension,Ae as filterByPattern,X as isValidPattern,L as loadAllGitignoreFilters,j as normalizeOptions,P as normalizePattern,Ie as scan,we as validateOptions,Fe as validatePatterns};//# sourceMappingURL=index.js.map | ||
| import {access,readFile,stat,readdir}from'fs/promises';import h from'path';import {Ok,Err,time,debug,timeEnd,stableSerialize}from'@ngcompass/common';export{Err,Ok}from'@ngcompass/common';import {minimatch}from'minimatch';import Q from'ignore';import {glob}from'tinyglobby';import {spawn}from'child_process';var be=async e=>{let n=h.join(e,".gitignore");try{return await readFile(n,"utf-8")}catch(t){let r=t instanceof Error?t.message:String(t);return debug("scanner",`Failed to load .gitignore from ${e}: ${r}`),null}},ve=e=>{let n=Q().add(e);return (t,r)=>{let i=h.relative(r,t);return !n.ignores(i)}},X=()=>()=>true;var j=async(e,n)=>{try{let t=(function(i,o){let a=new Set([i]),l=i.endsWith(h.sep)?i:i+h.sep;for(let g of o){let f=h.dirname(g);for(;(f===i||f.startsWith(l))&&(a.add(f),f!==i);){let y=h.dirname(f);if(y===f)break;f=y;}}return a})(e,n),r=await Ee(t);return r.length===0?Ok(X()):Ok(i=>{for(let{dir:o,ig:a}of r){let l=h.relative(o,i).replace(/\\/g,"/");if(!l.startsWith("..")&&!h.isAbsolute(l)&&a.ignores(l))return !1}return !0})}catch(t){return Err(Error(`Failed to load gitignore filters: ${t.message}`))}};async function Ee(e){let n=[];for(let t of e){let r=await be(t);r&&n.push({dir:t,ig:Q().add(r)});}return n}var Z=e=>Array.from(new Set(e)),Se=(e,n,t)=>e.filter(r=>t(r,n)),ee=async(e,n)=>{try{let t=e.files,r=t.length;if(n.respectGitignore){let i=await j(n.rootDir,t);if(!i.ok)return i;t=Se(t,n.rootDir,i.data);}return t=Z(t),Ok({files:t,filtered:r-t.length})}catch(t){return Err(Error(`Filtering failed: ${t.message}`))}},Ge=(e,n)=>{let t=new Set(n);return e.filter(r=>{let i=r.lastIndexOf(".");return !(i===-1||i<=Math.max(r.lastIndexOf("/"),r.lastIndexOf("\\"))+1)&&t.has(r.substring(i))})},ke=(e,n)=>e.filter(t=>n.test(t)),te=(e,n,t,r)=>e.filter(i=>{let o=h.relative(r,i).replace(/\\/g,"/");return !!n.some(a=>minimatch(o,a,{dot:true}))&&!t.some(a=>minimatch(o,a,{dot:true}))});var re=async(e,n,t)=>{try{let r=await glob([...e.include],{cwd:n,ignore:[...e.ignore],absolute:!0,followSymbolicLinks:t.followSymlinks,onlyFiles:!0,dot:t.dot});return Ok({files:r})}catch(r){return Err(Error(`Glob execution failed: ${r.message}`))}};var oe=async e=>new Promise(n=>{let t=spawn("git",["rev-parse","--is-inside-work-tree"],{cwd:e});t.on("close",r=>n(r===0)),t.on("error",()=>n(false));}),ae=async e=>new Promise(n=>{try{let t=spawn("git",["ls-files","-c","-o","--exclude-standard"],{cwd:e}),r=[],i=[];t.stdout.setEncoding("utf8"),t.stdout.on("data",o=>r.push(o)),t.stderr.setEncoding("utf8"),t.stderr.on("data",o=>i.push(o)),t.on("close",o=>{if(o!==0){let l=i.join("").trim();debug("scanner",`git ls-files exited with code ${o}${l?`: ${l}`:""}`),n([]);return}let a=r.join("").split(` | ||
| `).filter(l=>l.trim().length>0).map(l=>h.resolve(e,l));n(a);}),t.on("error",o=>{debug("scanner",`Git discovery failed: ${o.message}`),n([]);});}catch(t){debug("scanner",`Git discovery failed: ${t.message}`),n([]);}}),le=async e=>{let n=await ne(["rev-parse","HEAD"],e);if(!n)return "";let t=await ne(["rev-parse","--show-toplevel"],e);if(!t)return n;try{let r=h.join(t,".git","index"),i=await stat(r);return `${n}-${i.mtime.getTime()}`}catch(r){return debug("scanner",`Could not stat .git/index, falling back to HEAD-only fingerprint: ${r instanceof Error?r.message:String(r)}`),n}},se=async e=>{try{let n=await readdir(e,{withFileTypes:!0}),t=await Promise.allSettled(n.map(a=>stat(h.join(e,a.name)))),r=0,i=0,o=0;for(let a of t)a.status==="fulfilled"&&(r+=a.value.size,a.value.mtimeMs>i&&(i=a.value.mtimeMs),o++);return `dir-${n.length}-${o}-${r}-${i}`}catch(n){return debug("scanner",`Failed to get directory fingerprint: ${n instanceof Error?n.message:String(n)}`),""}};function ne(e,n){return new Promise(t=>{let r=spawn("git",[...e],{cwd:n}),i=[];r.stdout.setEncoding("utf8"),r.stdout.on("data",o=>i.push(o)),r.on("close",o=>t(o===0?i.join("").trim():"")),r.on("error",()=>t(""));})}var Te=["**/*.ts","**/*.html","**/*.scss","**/*.css","**/*.sass","**/*.less"],I=e=>({rootDir:h.resolve(e.rootDir),include:e.include.length>0?e.include:Te,exclude:e.exclude,ignorePatterns:e.ignorePatterns??[],respectGitignore:e.respectGitignore??true,followSymlinks:e.followSymlinks??false,dot:e.dot??false}),Oe=e=>{let n=[];return e.rootDir&&e.rootDir.trim()!==""||n.push("rootDir cannot be empty"),e.include&&e.include.length!==0||n.push("No include patterns specified (will use defaults)"),n};var P=e=>e.replace(/\\/g,"/"),B=e=>({include:e.include.map(P),ignore:[...e.exclude.map(P),...e.ignorePatterns.map(P)]}),fe=e=>!(e.trim()===""||e.includes("***")||e.endsWith("/")||e.endsWith("\\"))&&!!ce(e,"{","}")&&!!ce(e,"[","]"),He=e=>{let n=[],t=[];for(let r of e)fe(r)?n.push(r):t.push(`Invalid pattern: "${r}"`);return [n,t]};function ce(e,n,t){let r=0;for(let i=0;i<e.length;i++)e[i]===n?r++:e[i]===t&&r--;return r===0}var Me=async(e,n)=>{let t=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let o=r++;try{t[o]={status:"fulfilled",value:await e[o]()};}catch(a){t[o]={status:"rejected",reason:a};}}};return await Promise.all(Array.from({length:Math.min(n,e.length)},i)),t},Ie=async e=>{let n=e.map(i=>()=>stat(i)),t=await Me(n,128),r=0;for(let i of t)i.status==="fulfilled"&&(r+=i.value.size);return r},L=async(e,n,t=false)=>{let r=(a=>{let l=new Map;for(let g of a){let f=h.extname(g)||".no-extension";l.set(f,(l.get(f)??0)+1);}return l})(e),i=await Ie(e),o=performance.now()-n;return {totalFiles:e.length,byExtension:r,totalSize:i,scanTime:o,cacheHit:t}};var Re=async e=>{var n,t,r,i,o,a,l,g,f,y,k,W;let R;time("file-scan");let U=performance.now(),x=e.onProgress??(()=>{});n=e,debug("scanner",`Starting file discovery in: ${n.rootDir}`),debug("scanner",`Include patterns: ${n.include.join(", ")}`),debug("scanner",`Exclude patterns: ${n.exclude.join(", ")}`),x("normalizing",0);let pe=performance.now(),m=I(e),w=B(m),ge=performance.now()-pe;if(t=m,r=w,debug("scanner",`Normalized rootDir: ${t.rootDir}`),debug("scanner",`Expanded to ${r.include.length} include patterns, ${r.ignore.length} ignore patterns`),e.tsConfigPath){let c=await Ve(e.tsConfigPath,m.rootDir);c&&(i=w,w={include:(o=c).include.length>0?[...i.include,...o.include]:i.include,ignore:o.exclude.length>0?[...i.ignore,...o.exclude]:i.ignore},debug("scanner",`tsconfig patterns merged: +${c.include.length} include, +${c.exclude.length} exclude`));}try{await access(m.rootDir);}catch{return timeEnd("file-scan"),Err(Error(`rootDir does not exist or is not accessible: ${m.rootDir}`))}let z=await oe(m.rootDir),T=await Je(m,w,z,e);if(T){let c,$,V;return x("complete",T.files.length),a=T,l=U,c=performance.now()-l,V=($=(function(u){if(!u||typeof u!="object"||typeof u.totalFiles!="number"||typeof u.totalSize!="number"||typeof u.scanTime!="number"||typeof u.cacheHit!="boolean")return null;let b=(function(v){if(v instanceof Map)return v;if(!Array.isArray(v))return null;let D=new Map;for(let H of v){if(!Array.isArray(H)||H.length!==2)return null;let[_,q]=H;if(typeof _!="string"||typeof q!="number")return null;D.set(_,q);}return D})(u.byExtension);return b?{totalFiles:u.totalFiles,byExtension:b,totalSize:u.totalSize,scanTime:u.scanTime,cacheHit:u.cacheHit}:null})(a.stats))?{...$,scanTime:c,cacheHit:true}:{totalFiles:a.files.length,byExtension:(function(u){let b=new Map;for(let v of u){let D=h.extname(v)||".no-extension";b.set(D,(b.get(D)??0)+1);}return b})(a.files),totalSize:0,scanTime:c,cacheHit:true},Ok({files:a.files,stats:V,timestamp:Date.now(),timings:{normalization:0,discovery:c,filtering:0,total:c}})}x("discovering",0);let ye=performance.now(),A=await Ue(m,w,z);if(!A.ok)return de("Scan",A.error),A;let J=A.data,he=performance.now()-ye;x("filtering",J.length);let xe=performance.now(),E=await ee({files:J},m);if(!E.ok)return de("Filter",E.error),E;let F=E.data.files,we=performance.now()-xe;g=F.length,f=E.data.filtered,debug("scanner",`After filters: ${g} files (${f} filtered out)`),x("calculating-stats",F.length);let O=await L(F,U,false);await Ke(m,w,F,{totalFiles:(y=O).totalFiles,byExtension:Array.from(y.byExtension.entries()),totalSize:y.totalSize,scanTime:y.scanTime,cacheHit:y.cacheHit},z,e);let K=timeEnd("file-scan");return k=O,W=K,debug("scanner",`Scan complete: ${k.totalFiles} files in ${W.toFixed(1)}ms`),R=Array.from(k.byExtension.entries()).sort(([,c],[,$])=>$-c).slice(0,5).map(([c,$])=>`${c}:${$}`).join(", "),debug("scanner",`Breakdown: ${R}`),k.totalFiles===0&&debug("scanner","No files found matching patterns. Check your include/exclude configuration."),x("complete",F.length),Ok({files:F,stats:O,timestamp:Date.now(),timings:{normalization:ge,discovery:he,filtering:we,total:K}})};async function Ue(e,n,t){if(t){debug("scanner","Git repository detected. Using fast Git discovery...");let r=await ae(e.rootDir);if(r.length===0)return debug("scanner","Git discovery returned 0 files \u2014 falling back to glob-based scanning."),ue(e,n);let i=te(r,n.include,n.ignore,e.rootDir);return debug("scanner",`Git discovery found ${i.length} files (after glob filtering)`),Ok(i)}return debug("scanner","Not a Git repository. Falling back to standard globbing..."),ue(e,n)}async function ue(e,n){let t=await re(n,e.rootDir,{followSymlinks:e.followSymlinks,dot:e.dot});return t.ok?(debug("scanner",`Glob found ${t.data.files.length} files`),Ok(t.data.files)):t}async function me(e,n,t,r){if(!r.cache)return null;let i=t?await le(e.rootDir):await se(e.rootDir);return i?r.cache.computeHash([e.rootDir,stableSerialize(n),i,"v1"].join("|")):null}async function Je(e,n,t,r){let i=await me(e,n,t,r);if(!i||!r.cache)return null;let o=await r.cache.files.get(i);return o?(debug("scanner",`Cache HIT. Loaded ${o.files.length} files.`),o):null}async function Ke(e,n,t,r,i,o){if(!o.cache||t.length===0)return;let a=await me(e,n,i,o);a&&(await o.cache.files.set(a,[...t],r),debug("scanner","File list cached."));}function de(e,n){let t=timeEnd("file-scan");debug("scanner",`${e} failed after ${t.toFixed(1)}ms: ${n.message}`);}async function Ve(e,n){try{let t=(await readFile(e,"utf-8")).replace(/\/\/[^\n]*/g,"").replace(/\/\*[\s\S]*?\*\//g,""),r=JSON.parse(t),i=h.dirname(h.resolve(e)),o=g=>h.relative(n,h.resolve(i,g)).replace(/\\/g,"/"),a=[],l=[];return Array.isArray(r.include)&&a.push(...r.include.map(o)),Array.isArray(r.files)&&a.push(...r.files.map(o)),Array.isArray(r.exclude)&&l.push(...r.exclude.map(o)),{include:a,exclude:l}}catch(t){return debug("scanner",`Failed to load tsconfig patterns from ${e}: ${t instanceof Error?t.message:String(t)}`),null}} | ||
| export{L as calculateStats,ve as createGitignoreFilter,X as createPassThroughFilter,Z as deduplicateFiles,B as expandPatterns,Ge as filterByExtension,ke as filterByPattern,fe as isValidPattern,j as loadAllGitignoreFilters,I as normalizeOptions,P as normalizePattern,Re as scan,Oe as validateOptions,He as validatePatterns};//# sourceMappingURL=index.js.map | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/normalize.ts","../src/patterns.ts","../src/glob.ts","../src/gitignore.ts","../src/filters.ts","../src/stats.ts","../src/git.ts","../src/scan.ts"],"names":["DEFAULT_INCLUDE","normalizeOptions","options","rootDir","path","resolve","include","length","exclude","ignorePatterns","respectGitignore","followSymlinks","dot","validateOptions","errors","trim","push","normalizePattern","pattern","replace","expandPatterns","map","ignore","isValidPattern","includes","validatePatterns","patterns","valid","executeGlob","files","glob","cwd","absolute","followSymbolicLinks","onlyFiles","Ok","error","Err","Error","message","loadGitignore","gitignorePath","join","readFile","debug","createGitignoreFilter","gitignoreContent","ig","add","file","relative","ignores","createPassThroughFilter","loadAllGitignoreFilters","filePaths","dirsToCheck","Set","filePath","current","dirname","startsWith","dirFilters","dir","content","rel","isAbsolute","deduplicateFiles","Array","from","applyGitignoreFilter","filter","applyFilters","rawFiles","startCount","filterResult","ok","data","filtered","filterByExtension","extensions","extSet","ext","substring","lastIndexOf","has","filterByPattern","test","filterByGlob","relativePath","some","p","minimatch","runWithLimit","tasks","concurrency","results","cursor","worker","i","status","value","reason","Promise","all","Math","min","calculateTotalSize","f","stat","reduce","sum","result","size","calculateStats","startTime","cacheHit","byExtension","extname","count","get","set","Map","totalSize","scanTime","performance","now","totalFiles","execAsync","promisify","exec","isGitRepo","executeGitDiscovery","child","spawn","chunks","stdout","setEncoding","on","chunk","code","split","line","err","getRepoFingerprint","head","root","indexPath","fileStats","mtime","getTime","String","getDirectoryFingerprint","entries","readdir","withFileTypes","statResults","allSettled","entry","name","latestMtime","statSuccessCount","mtimeMs","scan","normalized","tsPatterns","cached","fileCount","filteredCount","stats","breakdown","time","progress","onProgress","t0","normalizationTime","tsConfigPath","loadTsConfigPatterns","access","timeEnd","isGit","cacheResult","tryLoadFromCache","totalTime","cachedStats","isArray","extension","timestamp","Date","timings","normalization","discovery","filtering","total","t1","discoveryResult","discoverFiles","logAndReturnError","discoveryTime","t2","finalFiles","filteringTime","saveToCache","toFixed","sort","a","b","slice","gitFiles","getCacheKey","cache","fingerprint","computeHash","JSON","stringify","key","phase","stripped","config","parse","configDir","toRootRelative","abs"],"mappings":"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","file":"index.js","sourcesContent":["import e from 'node:path';\nlet DEFAULT_INCLUDE = [\n '**/*.ts',\n '**/*.html',\n '**/*.scss',\n '**/*.css',\n '**/*.sass',\n '**/*.less'\n];\nexport const normalizeOptions = (t)=>({\n rootDir: e.resolve(t.rootDir),\n include: t.include.length > 0 ? t.include : DEFAULT_INCLUDE,\n exclude: t.exclude,\n ignorePatterns: t.ignorePatterns ?? [],\n respectGitignore: t.respectGitignore ?? !0,\n followSymlinks: t.followSymlinks ?? !1,\n dot: t.dot ?? !1\n });\nexport const validateOptions = (e)=>{\n let t = [];\n return e.rootDir && '' !== e.rootDir.trim() || t.push('rootDir cannot be empty'), e.include && 0 !== e.include.length || t.push('No include patterns specified (will use defaults)'), t;\n};\n","export const normalizePattern = (t)=>t.replace(/\\\\/g, '/');\nexport const expandPatterns = (t)=>({\n include: t.include.map(normalizePattern),\n ignore: [\n ...t.exclude.map(normalizePattern),\n ...t.ignorePatterns.map(normalizePattern)\n ]\n });\nexport const isValidPattern = (t)=>!('' === t.trim() || t.includes('***'));\nexport const validatePatterns = (t)=>{\n let e = [], n = [];\n for (let r of t)isValidPattern(r) ? e.push(r) : n.push(`Invalid pattern: \"${r}\"`);\n return [\n e,\n n\n ];\n};\n","import { glob as e } from 'tinyglobby';\nimport { Ok as t, Err as o } from './types.js';\nexport const executeGlob = async (r, l, i)=>{\n try {\n let o = await e([\n ...r.include\n ], {\n cwd: l,\n ignore: [\n ...r.ignore\n ],\n absolute: !0,\n followSymbolicLinks: i.followSymlinks,\n onlyFiles: !0,\n dot: i.dot\n });\n return t({\n files: o\n });\n } catch (e) {\n return o(Error(`Glob execution failed: ${e.message}`));\n }\n};\nexport const patternsLikelyHaveMatches = (e)=>!(0 === e.include.length || e.include.every((e)=>e.startsWith('!')));\n","import r from 'ignore';\nimport { readFile as e } from 'node:fs/promises';\nimport t from 'node:path';\nimport { Ok as o, Err as i } from './types.js';\nimport { debug as a } from '@ngcompass/common';\nexport const loadGitignore = async (r)=>{\n let o = t.join(r, '.gitignore');\n try {\n return await e(o, 'utf-8');\n } catch (e) {\n return a('scanner', `Failed to load .gitignore from ${r}`), null;\n }\n};\nexport const createGitignoreFilter = (e)=>{\n let o = r().add(e);\n return (r, e)=>{\n let i = t.relative(e, r);\n return !o.ignores(i);\n };\n};\nexport const createPassThroughFilter = ()=>()=>!0;\nexport const loadAndCreateGitignoreFilter = async (r)=>{\n try {\n let e = await loadGitignore(r);\n if (!e) return o(createPassThroughFilter());\n let t = createGitignoreFilter(e);\n return o(t);\n } catch (r) {\n return i(Error(`Failed to load .gitignore: ${r.message}`));\n }\n};\nexport const loadAllGitignoreFilters = async (e, a)=>{\n try {\n let i = new Set();\n for (let r of (i.add(e), a)){\n let o = t.dirname(r);\n for(; o.startsWith(e) && o !== t.dirname(e) && (i.add(o), o !== e);)o = t.dirname(o);\n }\n let n = [];\n for (let e of i){\n let t = await loadGitignore(e);\n t && n.push({\n dir: e,\n ig: r().add(t)\n });\n }\n if (0 === n.length) return o(createPassThroughFilter());\n return o((r)=>{\n for (let { dir: e, ig: o } of n){\n let i = t.relative(e, r).replace(/\\\\/g, '/');\n if (!i.startsWith('..') && !t.isAbsolute(i) && o.ignores(i)) return !1;\n }\n return !0;\n });\n } catch (r) {\n return i(Error(`Failed to load gitignore filters: ${r.message}`));\n }\n};\n","import t from 'node:path';\nimport { minimatch as e } from 'minimatch';\nimport { Ok as r, Err as i } from './types.js';\nimport { loadAllGitignoreFilters as o } from './gitignore.js';\nexport const deduplicateFiles = (t)=>Array.from(new Set(t));\nexport const applyGitignoreFilter = (t, e, r)=>t.filter((t)=>r(t, e));\nexport const applyFilters = async (t, e)=>{\n try {\n let i = t.files, l = i.length;\n if (e.respectGitignore) {\n let t = await o(e.rootDir, i);\n if (!t.ok) return t;\n i = applyGitignoreFilter(i, e.rootDir, t.data);\n }\n return i = deduplicateFiles(i), r({\n files: i,\n filtered: l - i.length\n });\n } catch (t) {\n return i(Error(`Filtering failed: ${t.message}`));\n }\n};\nexport const filterByExtension = (t, e)=>{\n let r = new Set(e);\n return t.filter((t)=>{\n let e = t.substring(t.lastIndexOf('.'));\n return r.has(e);\n });\n};\nexport const filterByPattern = (t, e)=>t.filter((t)=>e.test(t));\nexport const filterByGlob = (r, i, o, l)=>r.filter((r)=>{\n let n = t.relative(l, r).replace(/\\\\/g, '/');\n return !(!i.some((t)=>e(n, t, {\n dot: !0\n })) || o.some((t)=>e(n, t, {\n dot: !0\n })));\n });\n","import t from 'node:path';\nimport { stat as e } from 'node:fs/promises';\nlet runWithLimit = async (t, e)=>{\n let a = Array(t.length), l = 0, r = async ()=>{\n for(; l < t.length;){\n let e = l++;\n try {\n a[e] = {\n status: 'fulfilled',\n value: await t[e]()\n };\n } catch (t) {\n a[e] = {\n status: 'rejected',\n reason: t\n };\n }\n }\n };\n return await Promise.all(Array.from({\n length: Math.min(e, t.length)\n }, r)), a;\n}, calculateTotalSize = async (t)=>{\n let a = t.map((t)=>()=>e(t));\n return (await runWithLimit(a, 128)).reduce((t, e)=>t + ('fulfilled' === e.status ? e.value.size : 0), 0);\n};\nexport const calculateStats = async (e, a, l = !1)=>{\n let r = e.reduce((e, a)=>{\n let l = t.extname(a) || '.no-extension', r = e.get(l) ?? 0;\n return e.set(l, r + 1), e;\n }, new Map()), n = await calculateTotalSize(e), i = performance.now() - a;\n return {\n totalFiles: e.length,\n byExtension: r,\n totalSize: n,\n scanTime: i,\n cacheHit: l\n };\n};\n","import { exec as e, spawn as t } from 'node:child_process';\nimport { promisify as r } from 'node:util';\nimport i from 'node:path';\nimport { stat as o, readdir as n } from 'node:fs/promises';\nimport { debug as s } from '@ngcompass/common';\nlet execAsync = r(e);\nexport const isGitRepo = async (e)=>{\n try {\n return await execAsync('git rev-parse --is-inside-work-tree', {\n cwd: e\n }), !0;\n } catch {\n return !1;\n }\n};\nexport const executeGitDiscovery = async (e)=>new Promise((r)=>{\n try {\n let o = t('git', [\n 'ls-files',\n '-c',\n '-o',\n '--exclude-standard'\n ], {\n cwd: e\n }), n = [];\n o.stdout.setEncoding('utf8'), o.stdout.on('data', (e)=>{\n n.push(e);\n }), o.on('close', (t)=>{\n if (0 !== t) {\n s('scanner', `git ls-files exited with code ${t}`), r([]);\n return;\n }\n let o = n.join('').split('\\n').filter((e)=>e.trim().length > 0).map((t)=>i.resolve(e, t));\n r(o);\n }), o.on('error', (e)=>{\n s('scanner', `Git discovery failed: ${e.message}`), r([]);\n });\n } catch (e) {\n s('scanner', `Git discovery failed: ${e.message}`), r([]);\n }\n });\nexport const getRepoFingerprint = async (e)=>{\n try {\n let { stdout: t } = await execAsync('git rev-parse HEAD', {\n cwd: e\n });\n try {\n let { stdout: r } = await execAsync('git rev-parse --show-toplevel', {\n cwd: e\n }), n = i.join(r.trim(), '.git', 'index'), s = await o(n);\n return `${t.trim()}-${s.mtime.getTime()}`;\n } catch {\n return t.trim();\n }\n } catch (e) {\n return s('scanner', `Failed to get repo fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\nexport const getDirectoryFingerprint = async (e)=>{\n try {\n let t = await n(e, {\n withFileTypes: !0\n }), r = await Promise.allSettled(t.map((t)=>o(i.join(e, t.name)))), s = 0, a = 0, c = 0;\n for (let e of r)'fulfilled' === e.status && (s += e.value.size, e.value.mtimeMs > a && (a = e.value.mtimeMs), c++);\n return `dir-${t.length}-${c}-${s}-${a}`;\n } catch (e) {\n return s('scanner', `Failed to get directory fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\n","import { access as e, readFile as t } from 'node:fs/promises';\nimport n from 'node:path';\nimport { debug as r, time as i, timeEnd as o } from '@ngcompass/common';\nimport { Ok as a, Err as l } from './types.js';\nimport { normalizeOptions as s } from './normalize.js';\nimport { expandPatterns as c } from './patterns.js';\nimport { executeGlob as f } from './glob.js';\nimport { applyFilters as u, filterByGlob as d } from './filters.js';\nimport { calculateStats as m } from './stats.js';\nimport { isGitRepo as g, executeGitDiscovery as p, getRepoFingerprint as h, getDirectoryFingerprint as y } from './git.js';\nexport const scan = async (t)=>{\n var f, d, p, h, y, w, $, b, x, F, v, D;\n let S;\n i('file-scan');\n let A = performance.now(), k = t.onProgress ?? (()=>void 0);\n f = t, r('scanner', `Starting file discovery in: ${f.rootDir}`), r('scanner', `Include patterns: ${f.include.join(', ')}`), r('scanner', `Exclude patterns: ${f.exclude.join(', ')}`), k('normalizing', 0);\n let C = performance.now(), j = s(t), E = c(j), T = performance.now() - C;\n if (d = j, p = E, r('scanner', `Normalized rootDir: ${d.rootDir}`), r('scanner', `Expanded to ${p.include.length} include patterns, ${p.ignore.length} ignore patterns`), t.tsConfigPath) {\n let e = await loadTsConfigPatterns(t.tsConfigPath, j.rootDir);\n e && (h = E, E = {\n include: (y = e).include.length > 0 ? [\n ...h.include,\n ...y.include\n ] : h.include,\n ignore: y.exclude.length > 0 ? [\n ...h.ignore,\n ...y.exclude\n ] : h.ignore\n }, r('scanner', `tsconfig patterns merged: +${e.include.length} include, +${e.exclude.length} exclude`));\n }\n try {\n await e(j.rootDir);\n } catch {\n return o('file-scan'), l(Error(`rootDir does not exist or is not accessible: ${j.rootDir}`));\n }\n let z = await g(j.rootDir), H = await tryLoadFromCache(j, E, z, t);\n if (H) {\n let e, t, r;\n return k('complete', H.files.length), w = H, $ = A, e = performance.now() - $, r = (t = function(e) {\n if (!e || 'object' != typeof e || 'number' != typeof e.totalFiles || 'number' != typeof e.totalSize || 'number' != typeof e.scanTime || 'boolean' != typeof e.cacheHit) return null;\n let t = function(e) {\n if (e instanceof Map) return e;\n if (!Array.isArray(e)) return null;\n let t = new Map();\n for (let n of e){\n if (!Array.isArray(n) || 2 !== n.length) return null;\n let [e, r] = n;\n if ('string' != typeof e || 'number' != typeof r) return null;\n t.set(e, r);\n }\n return t;\n }(e.byExtension);\n return t ? {\n totalFiles: e.totalFiles,\n byExtension: t,\n totalSize: e.totalSize,\n scanTime: e.scanTime,\n cacheHit: e.cacheHit\n } : null;\n }(w.stats)) ? {\n ...t,\n scanTime: e,\n cacheHit: !0\n } : {\n totalFiles: w.files.length,\n byExtension: function(e) {\n let t = new Map();\n for (let r of e){\n let e = n.extname(r) || '.no-extension';\n t.set(e, (t.get(e) ?? 0) + 1);\n }\n return t;\n }(w.files),\n totalSize: 0,\n scanTime: e,\n cacheHit: !0\n }, a({\n files: w.files,\n stats: r,\n timestamp: Date.now(),\n timings: {\n normalization: 0,\n discovery: e,\n filtering: 0,\n total: e\n }\n });\n }\n k('discovering', 0);\n let G = performance.now(), N = await discoverFiles(j, E, z);\n if (!N.ok) return logAndReturnError('Scan', N.error), N;\n let P = N.data, K = performance.now() - G;\n k('filtering', P.length);\n let L = performance.now(), M = await u({\n files: P\n }, j);\n if (!M.ok) return logAndReturnError('Filter', M.error), M;\n let R = M.data.files, I = performance.now() - L;\n b = R.length, x = M.data.filtered, r('scanner', `After filters: ${b} files (${x} filtered out)`), k('calculating-stats', R.length);\n let J = await m(R, A, !1);\n await saveToCache(j, E, R, {\n totalFiles: (F = J).totalFiles,\n byExtension: Array.from(F.byExtension.entries()),\n totalSize: F.totalSize,\n scanTime: F.scanTime,\n cacheHit: F.cacheHit\n }, z, t);\n let O = o('file-scan');\n return v = J, D = O, r('scanner', `Scan complete: ${v.totalFiles} files in ${D.toFixed(1)}ms`), S = Array.from(v.byExtension.entries()).sort(([, e], [, t])=>t - e).slice(0, 5).map(([e, t])=>`${e}:${t}`).join(', '), r('scanner', `Breakdown: ${S}`), 0 === v.totalFiles && r('scanner', 'No files found matching patterns. Check your include/exclude configuration.'), k('complete', R.length), a({\n files: R,\n stats: J,\n timestamp: Date.now(),\n timings: {\n normalization: T,\n discovery: K,\n filtering: I,\n total: O\n }\n });\n};\nasync function discoverFiles(e, t, n) {\n if (n) {\n r('scanner', 'Git repository detected. Using fast Git discovery...');\n let n = await p(e.rootDir);\n if (0 === n.length) {\n r('scanner', 'Git discovery returned 0 files — this may indicate a git command failure. Falling back to glob-based scanning.');\n let n = await f(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return n.ok && r('scanner', `Glob fallback found ${n.data.files.length} files`), n.ok ? a(n.data.files) : n;\n }\n let i = d(n, t.include, t.ignore, e.rootDir);\n return r('scanner', `Git discovery found ${i.length} files (after glob filtering)`), a(i);\n }\n r('scanner', 'Not a Git repository. Falling back to standard globbing...');\n let i = await f(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return i.ok && r('scanner', `Glob found ${i.data.files.length} files`), i.ok ? a(i.data.files) : i;\n}\nasync function getCacheKey(e, t, n, r) {\n if (!r.cache) return null;\n let i = n ? await h(e.rootDir) : await y(e.rootDir);\n return i ? r.cache.computeHash([\n e.rootDir,\n JSON.stringify(t),\n i,\n 'v1'\n ].join('|')) : null;\n}\nasync function tryLoadFromCache(e, t, n, i) {\n let o = await getCacheKey(e, t, n, i);\n if (!o || !i.cache) return null;\n let a = await i.cache.files.get(o);\n return a ? (r('scanner', `Cache HIT. Loaded ${a.files.length} files.`), a) : null;\n}\nasync function saveToCache(e, t, n, i, o, a) {\n if (!a.cache || 0 === n.length) return;\n let l = await getCacheKey(e, t, o, a);\n l && (await a.cache.files.set(l, n, i), r('scanner', 'File list cached.'));\n}\nfunction logAndReturnError(e, t) {\n let n = o('file-scan');\n r('scanner', `${e} failed after ${n.toFixed(1)}ms: ${t.message}`);\n}\nasync function loadTsConfigPatterns(e, i) {\n try {\n let r = (await t(e, 'utf-8')).replace(/\\/\\/[^\\n]*/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, ''), o = JSON.parse(r), a = n.dirname(n.resolve(e)), l = (e)=>{\n let t = n.resolve(a, e);\n return n.relative(i, t).replace(/\\\\/g, '/');\n }, s = [], c = [];\n return Array.isArray(o.include) && s.push(...o.include.map(l)), Array.isArray(o.files) && s.push(...o.files.map(l)), Array.isArray(o.exclude) && c.push(...o.exclude.map(l)), {\n include: s,\n exclude: c\n };\n } catch (t) {\n return r('scanner', `Failed to load tsconfig patterns from ${e}: ${t instanceof Error ? t.message : String(t)}`), null;\n }\n}\n"]} | ||
| {"version":3,"sources":["../src/gitignore.ts","../src/filters.ts","../src/glob.ts","../src/git.ts","../src/normalize.ts","../src/patterns.ts","../src/stats.ts","../src/scan.ts"],"names":["loadGitignore","rootDir","gitignorePath","path","join","readFile","error","msg","Error","message","String","debug","createGitignoreFilter","gitignoreContent","ig","ignore","add","file","relative","ignores","createPassThroughFilter","loadAllGitignoreFilters","filePaths","dirsToCheck","dirs","Set","rootWithSep","endsWith","sep","filePath","current","dirname","startsWith","parent","dirFilters","loadIgnoreFiles","length","Ok","dir","rel","replace","isAbsolute","Err","result","content","push","deduplicateFiles","files","Array","from","applyGitignoreFilter","filter","applyFilters","rawFiles","options","startCount","respectGitignore","filterResult","ok","data","filtered","filterByExtension","extensions","extSet","dotIndex","lastIndexOf","Math","max","has","substring","filterByPattern","pattern","test","filterByGlob","includes","relativePath","some","p","minimatch","dot","executeGlob","patterns","glob","include","cwd","absolute","followSymbolicLinks","followSymlinks","onlyFiles","isGitRepo","Promise","resolve","child","spawn","on","code","executeGitDiscovery","stdoutChunks","stderrChunks","stdout","setEncoding","chunk","stderr","trim","split","line","map","err","getRepoFingerprint","head","runGitForOutput","root","indexPath","fileStats","stat","mtime","getTime","getDirectoryFingerprint","entries","readdir","withFileTypes","statResults","allSettled","entry","name","totalSize","latestMtime","statSuccessCount","status","value","size","mtimeMs","args","out","DEFAULT_INCLUDE","normalizeOptions","exclude","ignorePatterns","validateOptions","errors","normalizePattern","expandPatterns","isValidPattern","balanced","validatePatterns","valid","s","open","close","depth","i","runWithLimit","tasks","concurrency","results","cursor","worker","reason","all","min","calculateTotalSize","f","total","calculateStats","startTime","cacheHit","byExtension","Map","ext","extname","set","get","scanTime","performance","now","totalFiles","scan","normalized","tsPatterns","cached","fileCount","filteredCount","stats","breakdown","time","progress","onProgress","t0","normalizationTime","tsConfigPath","loadTsConfigPatterns","access","timeEnd","isGit","cacheResult","tryLoadFromCache","totalTime","cachedStats","isArray","extension","count","timestamp","Date","timings","normalization","discovery","filtering","t1","discoveryResult","discoverFiles","logAndReturnError","discoveryTime","t2","finalFiles","filteringTime","saveToCache","toFixed","sort","a","b","slice","gitFiles","runGlobDiscovery","getCacheKey","cache","fingerprint","computeHash","stableSerialize","key","phase","stripped","config","JSON","parse","configDir","toRootRelative"],"mappings":"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","file":"index.js","sourcesContent":["import { readFile as r } from 'node:fs/promises';\nimport e from 'node:path';\nimport t from 'ignore';\nimport { debug as o } from '@ngcompass/common';\nimport { Err as i, Ok as n } from './types.js';\nexport const loadGitignore = async (t)=>{\n let i = e.join(t, '.gitignore');\n try {\n return await r(i, 'utf-8');\n } catch (e) {\n let r = e instanceof Error ? e.message : String(e);\n return o('scanner', `Failed to load .gitignore from ${t}: ${r}`), null;\n }\n};\nexport const createGitignoreFilter = (r)=>{\n let o = t().add(r);\n return (r, t)=>{\n let i = e.relative(t, r);\n return !o.ignores(i);\n };\n};\nexport const createPassThroughFilter = ()=>()=>!0;\nexport const loadAndCreateGitignoreFilter = async (r)=>{\n try {\n let e = await loadGitignore(r);\n if (!e) return n(createPassThroughFilter());\n return n(createGitignoreFilter(e));\n } catch (r) {\n return i(Error(`Failed to load .gitignore: ${r.message}`));\n }\n};\nexport const loadAllGitignoreFilters = async (r, t)=>{\n try {\n let o = function(r, t) {\n let o = new Set([\n r\n ]), i = r.endsWith(e.sep) ? r : r + e.sep;\n for (let n of t){\n let t = e.dirname(n);\n for(; (t === r || t.startsWith(i)) && (o.add(t), t !== r);){\n let r = e.dirname(t);\n if (r === t) break;\n t = r;\n }\n }\n return o;\n }(r, t), i = await loadIgnoreFiles(o);\n if (0 === i.length) return n(createPassThroughFilter());\n return n((r)=>{\n for (let { dir: t, ig: o } of i){\n let i = e.relative(t, r).replace(/\\\\/g, '/');\n if (!i.startsWith('..') && !e.isAbsolute(i) && o.ignores(i)) return !1;\n }\n return !0;\n });\n } catch (r) {\n return i(Error(`Failed to load gitignore filters: ${r.message}`));\n }\n};\nasync function loadIgnoreFiles(r) {\n let e = [];\n for (let o of r){\n let r = await loadGitignore(o);\n r && e.push({\n dir: o,\n ig: t().add(r)\n });\n }\n return e;\n}\n","import t from 'node:path';\nimport { minimatch as e } from 'minimatch';\nimport { loadAllGitignoreFilters as r } from './gitignore.js';\nimport { Err as i, Ok as o } from './types.js';\nexport const deduplicateFiles = (t)=>Array.from(new Set(t));\nexport const applyGitignoreFilter = (t, e, r)=>t.filter((t)=>r(t, e));\nexport const applyFilters = async (t, e)=>{\n try {\n let i = t.files, l = i.length;\n if (e.respectGitignore) {\n let t = await r(e.rootDir, i);\n if (!t.ok) return t;\n i = applyGitignoreFilter(i, e.rootDir, t.data);\n }\n return i = deduplicateFiles(i), o({\n files: i,\n filtered: l - i.length\n });\n } catch (t) {\n return i(Error(`Filtering failed: ${t.message}`));\n }\n};\nexport const filterByExtension = (t, e)=>{\n let r = new Set(e);\n return t.filter((t)=>{\n let e = t.lastIndexOf('.');\n return !(-1 === e || e <= Math.max(t.lastIndexOf('/'), t.lastIndexOf('\\\\')) + 1) && r.has(t.substring(e));\n });\n};\nexport const filterByPattern = (t, e)=>t.filter((t)=>e.test(t));\nexport const filterByGlob = (r, i, o, l)=>r.filter((r)=>{\n let n = t.relative(l, r).replace(/\\\\/g, '/');\n return !!i.some((t)=>e(n, t, {\n dot: !0\n })) && !o.some((t)=>e(n, t, {\n dot: !0\n }));\n });\n","import { glob as e } from 'tinyglobby';\nimport { Err as t, Ok as o } from './types.js';\nexport const executeGlob = async (r, l, i)=>{\n try {\n let t = await e([\n ...r.include\n ], {\n cwd: l,\n ignore: [\n ...r.ignore\n ],\n absolute: !0,\n followSymbolicLinks: i.followSymlinks,\n onlyFiles: !0,\n dot: i.dot\n });\n return o({\n files: t\n });\n } catch (e) {\n return t(Error(`Glob execution failed: ${e.message}`));\n }\n};\nexport const patternsLikelyHaveMatches = (e)=>!(0 === e.include.length || e.include.every((e)=>e.startsWith('!')));\n","import { spawn as e } from 'node:child_process';\nimport { readdir as t, stat as r } from 'node:fs/promises';\nimport i from 'node:path';\nimport { debug as o } from '@ngcompass/common';\nexport const isGitRepo = async (t)=>new Promise((r)=>{\n let i = e('git', [\n 'rev-parse',\n '--is-inside-work-tree'\n ], {\n cwd: t\n });\n i.on('close', (e)=>r(0 === e)), i.on('error', ()=>r(!1));\n });\nexport const executeGitDiscovery = async (t)=>new Promise((r)=>{\n try {\n let n = e('git', [\n 'ls-files',\n '-c',\n '-o',\n '--exclude-standard'\n ], {\n cwd: t\n }), s = [], a = [];\n n.stdout.setEncoding('utf8'), n.stdout.on('data', (e)=>s.push(e)), n.stderr.setEncoding('utf8'), n.stderr.on('data', (e)=>a.push(e)), n.on('close', (e)=>{\n if (0 !== e) {\n let t = a.join('').trim();\n o('scanner', `git ls-files exited with code ${e}${t ? `: ${t}` : ''}`), r([]);\n return;\n }\n let n = s.join('').split('\\n').filter((e)=>e.trim().length > 0).map((e)=>i.resolve(t, e));\n r(n);\n }), n.on('error', (e)=>{\n o('scanner', `Git discovery failed: ${e.message}`), r([]);\n });\n } catch (e) {\n o('scanner', `Git discovery failed: ${e.message}`), r([]);\n }\n });\nexport const getRepoFingerprint = async (e)=>{\n let t = await runGitForOutput([\n 'rev-parse',\n 'HEAD'\n ], e);\n if (!t) return '';\n let n = await runGitForOutput([\n 'rev-parse',\n '--show-toplevel'\n ], e);\n if (!n) return t;\n try {\n let e = i.join(n, '.git', 'index'), o = await r(e);\n return `${t}-${o.mtime.getTime()}`;\n } catch (e) {\n return o('scanner', `Could not stat .git/index, falling back to HEAD-only fingerprint: ${e instanceof Error ? e.message : String(e)}`), t;\n }\n};\nexport const getDirectoryFingerprint = async (e)=>{\n try {\n let o = await t(e, {\n withFileTypes: !0\n }), n = await Promise.allSettled(o.map((t)=>r(i.join(e, t.name)))), s = 0, a = 0, c = 0;\n for (let e of n)'fulfilled' === e.status && (s += e.value.size, e.value.mtimeMs > a && (a = e.value.mtimeMs), c++);\n return `dir-${o.length}-${c}-${s}-${a}`;\n } catch (e) {\n return o('scanner', `Failed to get directory fingerprint: ${e instanceof Error ? e.message : String(e)}`), '';\n }\n};\nfunction runGitForOutput(t, r) {\n return new Promise((i)=>{\n let o = e('git', [\n ...t\n ], {\n cwd: r\n }), n = [];\n o.stdout.setEncoding('utf8'), o.stdout.on('data', (e)=>n.push(e)), o.on('close', (e)=>i(0 === e ? n.join('').trim() : '')), o.on('error', ()=>i(''));\n });\n}\n","import e from 'node:path';\nlet DEFAULT_INCLUDE = [\n '**/*.ts',\n '**/*.html',\n '**/*.scss',\n '**/*.css',\n '**/*.sass',\n '**/*.less'\n];\nexport const normalizeOptions = (t)=>({\n rootDir: e.resolve(t.rootDir),\n include: t.include.length > 0 ? t.include : DEFAULT_INCLUDE,\n exclude: t.exclude,\n ignorePatterns: t.ignorePatterns ?? [],\n respectGitignore: t.respectGitignore ?? !0,\n followSymlinks: t.followSymlinks ?? !1,\n dot: t.dot ?? !1\n });\nexport const validateOptions = (e)=>{\n let t = [];\n return e.rootDir && '' !== e.rootDir.trim() || t.push('rootDir cannot be empty'), e.include && 0 !== e.include.length || t.push('No include patterns specified (will use defaults)'), t;\n};\n","export const normalizePattern = (e)=>e.replace(/\\\\/g, '/');\nexport const expandPatterns = (e)=>({\n include: e.include.map(normalizePattern),\n ignore: [\n ...e.exclude.map(normalizePattern),\n ...e.ignorePatterns.map(normalizePattern)\n ]\n });\nexport const isValidPattern = (e)=>!('' === e.trim() || e.includes('***') || e.endsWith('/') || e.endsWith('\\\\')) && !!balanced(e, '{', '}') && !!balanced(e, '[', ']');\nexport const validatePatterns = (e)=>{\n let t = [], n = [];\n for (let a of e)isValidPattern(a) ? t.push(a) : n.push(`Invalid pattern: \"${a}\"`);\n return [\n t,\n n\n ];\n};\nfunction balanced(e, t, n) {\n let a = 0;\n for(let r = 0; r < e.length; r++)e[r] === t ? a++ : e[r] === n && a--;\n return 0 === a;\n}\n","import { stat as t } from 'node:fs/promises';\nimport e from 'node:path';\nlet runWithLimit = async (t, e)=>{\n let a = Array(t.length), l = 0, r = async ()=>{\n for(; l < t.length;){\n let e = l++;\n try {\n a[e] = {\n status: 'fulfilled',\n value: await t[e]()\n };\n } catch (t) {\n a[e] = {\n status: 'rejected',\n reason: t\n };\n }\n }\n };\n return await Promise.all(Array.from({\n length: Math.min(e, t.length)\n }, r)), a;\n}, calculateTotalSize = async (e)=>{\n let a = e.map((e)=>()=>t(e)), l = await runWithLimit(a, 128), r = 0;\n for (let t of l)'fulfilled' === t.status && (r += t.value.size);\n return r;\n};\nexport const calculateStats = async (t, a, l = !1)=>{\n let r = ((t)=>{\n let a = new Map();\n for (let l of t){\n let t = e.extname(l) || '.no-extension';\n a.set(t, (a.get(t) ?? 0) + 1);\n }\n return a;\n })(t), n = await calculateTotalSize(t), o = performance.now() - a;\n return {\n totalFiles: t.length,\n byExtension: r,\n totalSize: n,\n scanTime: o,\n cacheHit: l\n };\n};\n","import { access as e, readFile as t } from 'node:fs/promises';\nimport n from 'node:path';\nimport { debug as r, stableSerialize as i, time as o, timeEnd as a } from '@ngcompass/common';\nimport { applyFilters as l, filterByGlob as s } from './filters.js';\nimport { executeGlob as c } from './glob.js';\nimport { executeGitDiscovery as f, getDirectoryFingerprint as u, getRepoFingerprint as m, isGitRepo as d } from './git.js';\nimport { normalizeOptions as g } from './normalize.js';\nimport { expandPatterns as p } from './patterns.js';\nimport { calculateStats as y } from './stats.js';\nimport { Err as h, Ok as w } from './types.js';\nexport const scan = async (t)=>{\n var i, s, c, f, u, m, b, $, x, v, D, F;\n let A;\n o('file-scan');\n let S = performance.now(), C = t.onProgress ?? (()=>void 0);\n i = t, r('scanner', `Starting file discovery in: ${i.rootDir}`), r('scanner', `Include patterns: ${i.include.join(', ')}`), r('scanner', `Exclude patterns: ${i.exclude.join(', ')}`), C('normalizing', 0);\n let j = performance.now(), E = g(t), T = p(E), z = performance.now() - j;\n if (s = E, c = T, r('scanner', `Normalized rootDir: ${s.rootDir}`), r('scanner', `Expanded to ${c.include.length} include patterns, ${c.ignore.length} ignore patterns`), t.tsConfigPath) {\n let e = await loadTsConfigPatterns(t.tsConfigPath, E.rootDir);\n e && (f = T, T = {\n include: (u = e).include.length > 0 ? [\n ...f.include,\n ...u.include\n ] : f.include,\n ignore: u.exclude.length > 0 ? [\n ...f.ignore,\n ...u.exclude\n ] : f.ignore\n }, r('scanner', `tsconfig patterns merged: +${e.include.length} include, +${e.exclude.length} exclude`));\n }\n try {\n await e(E.rootDir);\n } catch {\n return a('file-scan'), h(Error(`rootDir does not exist or is not accessible: ${E.rootDir}`));\n }\n let k = await d(E.rootDir), G = await tryLoadFromCache(E, T, k, t);\n if (G) {\n let e, t, r;\n return C('complete', G.files.length), m = G, b = S, e = performance.now() - b, r = (t = function(e) {\n if (!e || 'object' != typeof e || 'number' != typeof e.totalFiles || 'number' != typeof e.totalSize || 'number' != typeof e.scanTime || 'boolean' != typeof e.cacheHit) return null;\n let t = function(e) {\n if (e instanceof Map) return e;\n if (!Array.isArray(e)) return null;\n let t = new Map();\n for (let n of e){\n if (!Array.isArray(n) || 2 !== n.length) return null;\n let [e, r] = n;\n if ('string' != typeof e || 'number' != typeof r) return null;\n t.set(e, r);\n }\n return t;\n }(e.byExtension);\n return t ? {\n totalFiles: e.totalFiles,\n byExtension: t,\n totalSize: e.totalSize,\n scanTime: e.scanTime,\n cacheHit: e.cacheHit\n } : null;\n }(m.stats)) ? {\n ...t,\n scanTime: e,\n cacheHit: !0\n } : {\n totalFiles: m.files.length,\n byExtension: function(e) {\n let t = new Map();\n for (let r of e){\n let e = n.extname(r) || '.no-extension';\n t.set(e, (t.get(e) ?? 0) + 1);\n }\n return t;\n }(m.files),\n totalSize: 0,\n scanTime: e,\n cacheHit: !0\n }, w({\n files: m.files,\n stats: r,\n timestamp: Date.now(),\n timings: {\n normalization: 0,\n discovery: e,\n filtering: 0,\n total: e\n }\n });\n }\n C('discovering', 0);\n let H = performance.now(), P = await discoverFiles(E, T, k);\n if (!P.ok) return logAndReturnError('Scan', P.error), P;\n let N = P.data, K = performance.now() - H;\n C('filtering', N.length);\n let L = performance.now(), M = await l({\n files: N\n }, E);\n if (!M.ok) return logAndReturnError('Filter', M.error), M;\n let R = M.data.files, I = performance.now() - L;\n $ = R.length, x = M.data.filtered, r('scanner', `After filters: ${$} files (${x} filtered out)`), C('calculating-stats', R.length);\n let B = await y(R, S, !1);\n await saveToCache(E, T, R, {\n totalFiles: (v = B).totalFiles,\n byExtension: Array.from(v.byExtension.entries()),\n totalSize: v.totalSize,\n scanTime: v.scanTime,\n cacheHit: v.cacheHit\n }, k, t);\n let J = a('file-scan');\n return D = B, F = J, r('scanner', `Scan complete: ${D.totalFiles} files in ${F.toFixed(1)}ms`), A = Array.from(D.byExtension.entries()).sort(([, e], [, t])=>t - e).slice(0, 5).map(([e, t])=>`${e}:${t}`).join(', '), r('scanner', `Breakdown: ${A}`), 0 === D.totalFiles && r('scanner', 'No files found matching patterns. Check your include/exclude configuration.'), C('complete', R.length), w({\n files: R,\n stats: B,\n timestamp: Date.now(),\n timings: {\n normalization: z,\n discovery: K,\n filtering: I,\n total: J\n }\n });\n};\nasync function discoverFiles(e, t, n) {\n if (n) {\n r('scanner', 'Git repository detected. Using fast Git discovery...');\n let n = await f(e.rootDir);\n if (0 === n.length) return r('scanner', 'Git discovery returned 0 files — falling back to glob-based scanning.'), runGlobDiscovery(e, t);\n let i = s(n, t.include, t.ignore, e.rootDir);\n return r('scanner', `Git discovery found ${i.length} files (after glob filtering)`), w(i);\n }\n return r('scanner', 'Not a Git repository. Falling back to standard globbing...'), runGlobDiscovery(e, t);\n}\nasync function runGlobDiscovery(e, t) {\n let n = await c(t, e.rootDir, {\n followSymlinks: e.followSymlinks,\n dot: e.dot\n });\n return n.ok ? (r('scanner', `Glob found ${n.data.files.length} files`), w(n.data.files)) : n;\n}\nasync function getCacheKey(e, t, n, r) {\n if (!r.cache) return null;\n let o = n ? await m(e.rootDir) : await u(e.rootDir);\n return o ? r.cache.computeHash([\n e.rootDir,\n i(t),\n o,\n 'v1'\n ].join('|')) : null;\n}\nasync function tryLoadFromCache(e, t, n, i) {\n let o = await getCacheKey(e, t, n, i);\n if (!o || !i.cache) return null;\n let a = await i.cache.files.get(o);\n return a ? (r('scanner', `Cache HIT. Loaded ${a.files.length} files.`), a) : null;\n}\nasync function saveToCache(e, t, n, i, o, a) {\n if (!a.cache || 0 === n.length) return;\n let l = await getCacheKey(e, t, o, a);\n l && (await a.cache.files.set(l, [\n ...n\n ], i), r('scanner', 'File list cached.'));\n}\nfunction logAndReturnError(e, t) {\n let n = a('file-scan');\n r('scanner', `${e} failed after ${n.toFixed(1)}ms: ${t.message}`);\n}\nasync function loadTsConfigPatterns(e, i) {\n try {\n let r = (await t(e, 'utf-8')).replace(/\\/\\/[^\\n]*/g, '').replace(/\\/\\*[\\s\\S]*?\\*\\//g, ''), o = JSON.parse(r), a = n.dirname(n.resolve(e)), l = (e)=>n.relative(i, n.resolve(a, e)).replace(/\\\\/g, '/'), s = [], c = [];\n return Array.isArray(o.include) && s.push(...o.include.map(l)), Array.isArray(o.files) && s.push(...o.files.map(l)), Array.isArray(o.exclude) && c.push(...o.exclude.map(l)), {\n include: s,\n exclude: c\n };\n } catch (t) {\n return r('scanner', `Failed to load tsconfig patterns from ${e}: ${t instanceof Error ? t.message : String(t)}`), null;\n }\n}\n"]} |
+3
-3
| { | ||
| "name": "@ngcompass/scanner", | ||
| "version": "0.1.6-beta", | ||
| "version": "0.1.7-beta", | ||
| "description": "File system scanning (glob, git, gitignore) for ngcompass", | ||
@@ -27,4 +27,4 @@ "sideEffects": false, | ||
| "tinyglobby": "^0.2.15", | ||
| "@ngcompass/cache": "0.1.6-beta", | ||
| "@ngcompass/common": "0.1.6-beta" | ||
| "@ngcompass/cache": "0.1.7-beta", | ||
| "@ngcompass/common": "0.1.7-beta" | ||
| }, | ||
@@ -31,0 +31,0 @@ "peerDependencies": { |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
123380
-5.94%156
-53.29%2
100%+ Added
+ Added
- Removed
- Removed
Updated
Updated