UNPKG

@freik/files

Version:
2 lines (1 loc) 4.64 kB
var R=Object.create;var x=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var B=(i,t)=>{for(var e in t)x(i,e,{get:t[e],enumerable:!0})},N=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let f of v(t))!I.call(i,f)&&f!==e&&x(i,f,{get:()=>t[f],enumerable:!(s=W(t,f))||s.enumerable});return i};var L=(i,t,e)=>(e=i!=null?R($(i)):{},N(t||!i||!i.__esModule?x(e,"default",{value:i,enumerable:!0}):e,i)),Q=i=>N(x({},"__esModule",{value:!0}),i);var X={};B(X,{ForDirs:()=>V,ForFiles:()=>z,ForFilesSync:()=>K});module.exports=Q(X);var g=require("@freik/containers"),J=require("@freik/is-hidden-file"),c=require("@freik/typechk"),C=L(require("fs")),y=require("fs"),j=L(require("path")),w=L(require("./PathUtil.js")),M=require("@freik/logger");const{err:F}=(0,M.MakeLog)("@freil/files:forFiles");function q(i){const t=w.TrailingSlash(i),e=t.substring(0,t.length-1);let s=e.lastIndexOf("/");return s<0&&j.sep==="\\"&&(s=e.lastIndexOf("\\")),i[s<0?0:s+1]==="."}function U(i,t,e){return t?e&&q(i)?!0:(0,J.isHiddenFile)(i):!1}function A(i){return!0}function T(i){return!1}function G(i){return(0,c.isUndefined)(i)||(0,c.isUndefined)(i.recurse)?A:(0,c.isBoolean)(i.recurse)?i.recurse?A:T:i.recurse}async function D(i,t){const e=i(t);return(0,c.isBoolean)(e)?e:await e}async function z(i,t,e){const s=G(e),f=e&&e.keepGoing,m=e&&e.fileTypes,S=e&&e.order==="depth",H=e?!!e.skipHiddenFiles:!0,P=e?!!e.skipHiddenFolders:!0,b=e?!e.dontAssumeDotsAreHidden:!0,h=e?e.dontFollowSymlinks:!0,k=m?n=>{const o=n.toLocaleUpperCase();if((0,c.isString)(m))return o.endsWith(m.toLocaleUpperCase());const l=m.map(r=>r.toLocaleUpperCase());for(const r of l)if(o.endsWith(r))return!0;return!1}:()=>!0,u=(0,c.isString)(i)?[i]:i,d=S?(0,g.MakeStack)(u):(0,g.MakeQueue)(u);let p=!0;for(;!d.empty();){const n=d.pop();if(!n)continue;const o=await y.promises.stat(n);if(o.isFile()&&!U(n,H,b)&&k(n)){if(await D(t,n)!==!0&&(p=!1,!f))return!1}else if(o.isDirectory()&&!U(n,P,b)){let l=null;try{l=await y.promises.readdir(n,{withFileTypes:!0})}catch{F(`Unable to read ${n||"<unknown>"}`);continue}if(!l)continue;for(const r of l)try{if(r.isSymbolicLink()&&h){const a=await y.promises.realpath(w.Join(n,r.name)),O=await y.promises.stat(a);(O.isFile()||O.isDirectory()&&await D(s,a))&&d.push(a)}else if(r.isDirectory()||r.isFile()){const a=w.Join(n,r.name);r.isDirectory()?await D(s,a)&&d.push(a):d.push(a)}}catch{F("Unable to process dirent:"),F(r);continue}}}return p}function E(i){return(0,c.isUndefined)(i)||(0,c.isUndefined)(i.recurse)?A:(0,c.isBoolean)(i.recurse)?i.recurse?A:T:i.recurse}function K(i,t,e){const s=E(e),f=e&&e.keepGoing,m=e&&e.fileTypes,S=e&&e.order==="depth",H=e?!!e.skipHiddenFiles:!0,P=e?!!e.skipHiddenFolders:!0,b=e?!e.dontAssumeDotsAreHidden:!0,h=e?e.dontFollowSymlinks:!0,k=m?n=>{const o=n.toLocaleUpperCase();if((0,c.isString)(m))return o.endsWith(m.toLocaleUpperCase());const l=m.map(r=>r.toLocaleUpperCase());for(const r of l)if(o.endsWith(r))return!0;return!1}:()=>!0,u=(0,c.isString)(i)?[i]:i,d=S?(0,g.MakeStack)(u):(0,g.MakeQueue)(u);let p=!0;for(;!d.empty();){const n=d.pop();if(!n)continue;const o=C.statSync(n);if(o.isFile()&&!U(n,H,b)&&k(n)){if(!t(n)&&(p=!1,!f))return!1}else if(o.isDirectory()&&!U(n,P,b)){let l=null;try{l=C.readdirSync(n,{withFileTypes:!0})}catch{F(`Unable to read ${n||"<unknown>"}`);continue}if(!l)continue;for(const r of l)try{if(r.isSymbolicLink()&&h){const a=C.realpathSync(w.Join(n,r.name)),O=C.statSync(a);(O.isDirectory()&&s(a)||O.isFile())&&d.push(a)}else if(r.isDirectory()||r.isFile()){const a=w.Join(n,r.name);(r.isFile()||s(a))&&d.push(a)}}catch{F("Unable to process dirent:"),F(r);continue}}}return p}async function V(i,t,e){const s=G(e),f=e&&e.keepGoing,m=e&&e.order==="depth",S=e?!!e.skipHiddenFolders:!0,H=e?!e.dontAssumeDotsAreHidden:!0,P=e?e.dontFollowSymlinks:!0,b=(0,c.isString)(i)?[i]:i,h=m?(0,g.MakeStack)(b):(0,g.MakeQueue)(b);let k=!0;for(;!h.empty();){const u=h.pop();if(!u)continue;if((await y.promises.stat(u)).isDirectory()&&!U(u,S,H)){let p=null;try{p=await y.promises.readdir(u,{withFileTypes:!0})}catch{F(`Unable to read ${u||"<unknown>"}`);continue}if(!p)continue;for(const n of p)try{if(n.isSymbolicLink()&&P){const o=w.Join(u,n.name),l=await y.promises.realpath(o);if((await y.promises.stat(l)).isDirectory())if(await D(t,o)!==!0){if(k=!1,!f)return!1}else await D(s,l)&&h.push(l)}else if(n.isDirectory()){const o=w.Join(u,n.name);if(n.isDirectory())if(await D(t,o)!==!0){if(k=!1,!f)return!1}else await D(s,o)&&h.push(o)}}catch{F("Unable to process dirent:"),F(n);continue}}}return k}