UNPKG

dree

Version:

A nodejs module wich helps you handle a directory tree providing you its abstraction through tested functions and a custom configuration.

6 lines (5 loc) 13.3 kB
var D=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var ee=Object.prototype.hasOwnProperty;var te=(r,t)=>{for(var n in t)D(r,n,{get:t[n],enumerable:!0})},re=(r,t,n,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Z(t))!ee.call(r,s)&&s!==n&&D(r,s,{get:()=>t[s],enumerable:!(e=X(t,s))||e.enumerable});return r};var ne=r=>re(D({},"__esModule",{value:!0}),r);var he={};te(he,{ASCII_SYMBOLS:()=>se,DEFAULT_SYMBOLS:()=>M,PostSortMethodPredefined:()=>Y,SortMethodPredefined:()=>H,Type:()=>_,parse:()=>de,parseAsync:()=>ue,parseTree:()=>oe,parseTreeAsync:()=>fe,scan:()=>ae,scanAsync:()=>ce});module.exports=ne(he);var E=require("node:path"),v=require("node:os"),O=require("node:crypto"),S=require("node:fs"),x=require("node:fs/promises"),F=require("minimatch"),_=(n=>(n.DIRECTORY="directory",n.FILE="file",n))(_||{}),H=(s=>(s.ALPHABETICAL="alpha",s.ALPHABETICAL_REVERSE="antialpha",s.ALPHABETICAL_INSENSITIVE="alpha-insensitive",s.ALPHABETICAL_INSENSITIVE_REVERSE="antialpha-insensitive",s))(H||{}),Y=(a=>(a.ALPHABETICAL="alpha",a.ALPHABETICAL_REVERSE="antialpha",a.ALPHABETICAL_INSENSITIVE="alpha-insensitive",a.ALPHABETICAL_INSENSITIVE_REVERSE="antialpha-insensitive",a.FOLDERS_FIRST="folders-first",a.FILES_FIRST="files-first",a))(Y||{}),p={stat:!1,normalize:!1,symbolicLinks:!0,followLinks:!1,sizeInBytes:!0,size:!0,hash:!0,hashAlgorithm:"md5",hashEncoding:"hex",showHidden:!0,depth:void 0,exclude:void 0,matches:void 0,extensions:void 0,emptyDirectory:!1,excludeEmptyDirectories:!1,descendants:!1,descendantsIgnoreDirectories:!1,sorted:!1,postSorted:!1,homeShortcut:!1,skipErrors:!0},M={dirChild:"\u2500> ",fileChild:"\u2500\u2500 ",forkChild:"\u251C",lastChild:"\u2514",linkChild:">>",tabIndent:" ",pipeIndent:"\u2502 "},se={dirChild:"-\\ ",fileChild:"-- ",forkChild:"|",lastChild:"`",linkChild:"->",tabIndent:" ",pipeIndent:"| "},B={symbolicLinks:!0,followLinks:!1,showHidden:!0,depth:void 0,exclude:void 0,extensions:void 0,sorted:!1,postSorted:!1,homeShortcut:!1,symbols:M,skipErrors:!0};function R(r,t){return(0,E.resolve)(t.homeShortcut?r.replace(/^~($|\/|\\)/,(0,v.homedir)()+"$1"):r)}function T(r){return(Array.isArray(r)?r:[r]).map(t=>t instanceof RegExp?t:(0,F.makeRe)(t,{dot:!0})).filter(t=>t instanceof RegExp)}function V(r){let t={};if(r){for(let n in p)t[n]=r[n]!==void 0?r[n]:p[n];t.depth<0&&(t.depth=0)}else t=p;return t}function w(r){let t={};if(r){for(let n in B)t[n]=r[n]!==void 0?r[n]:B[n];t.depth<0&&(t.depth=0)}else t=B;return t}function P(r){let t=["B","KB","MB","GB","TB"],n;for(n=0;n<t.length&&r>1e3;n++)r/=1e3;return Math.round(r*100)/100+" "+t[n]}function k(r,t){return r.localeCompare(t)}function C(r,t){return r.toLowerCase().localeCompare(t.toLowerCase())}function A(r,t){if(!t)return r;if(t===!0)return r.sort(k);if(typeof t=="string")switch(t){case"alpha":return r.sort(k);case"antialpha":return r.sort(k).reverse();case"alpha-insensitive":return r.sort(C);case"antialpha-insensitive":return r.sort(C).reverse();default:return r}else if(typeof t=="function")return r.sort(t)}function z(r,t){return k(r.name,t.name)}function N(r,t){return C(r.name,t.name)}function ie(r,t){return r.type==="directory"&&t.type==="file"?-1:r.type==="file"&&t.type==="directory"?1:0}function le(r,t){return r.type==="file"&&t.type==="directory"?-1:r.type==="directory"&&t.type==="file"?1:0}function $(r,t){if(!t)return r;if(t===!0)return r.sort(z);if(typeof t=="string")switch(t){case"alpha":return r.sort(z);case"antialpha":return r.sort(z).reverse();case"alpha-insensitive":return r.sort(N);case"antialpha-insensitive":return r.sort(N).reverse();case"folders-first":return r.sort(ie);case"files-first":return r.sort(le);default:return r}else if(typeof t=="function")return r.sort(t)}function U(r,t){if(!t)return r;if(t===!0)return r.sort((n,e)=>k(n.relativePath,e.relativePath));if(typeof t=="string")switch(t){case"alpha":return r.sort((n,e)=>k(n.relativePath,e.relativePath));case"antialpha":return r.sort((n,e)=>k(n.relativePath,e.relativePath)).reverse();case"alpha-insensitive":return r.sort((n,e)=>C(n.relativePath,e.relativePath));case"antialpha-insensitive":return r.sort((n,e)=>C(n.relativePath,e.relativePath)).reverse();default:return r}else if(typeof t=="function")return r.sort((n,e)=>t(n.relativePath,e.relativePath))}function q(r,t,n,e,s,o){if(e.depth!==void 0&&n>e.depth)return null;let a=r===t?".":(0,E.relative)(r,t);if(e.exclude&&r!==t&&T(e.exclude).some(g=>g.test(`/${a}`)))return null;let i=(0,E.basename)(t),h;try{h=(0,S.statSync)(t)}catch(c){if(e.skipErrors)return null;throw c}let l;try{l=(0,S.lstatSync)(t)}catch(c){if(e.skipErrors)return null;throw c}let m=l.isSymbolicLink(),I=h.isFile()?"file":"directory";if(!e.showHidden&&i.charAt(0)==="."||!e.symbolicLinks&&m)return null;let b;if(e.hash){let c=e.hashAlgorithm;b=(0,O.createHash)(c),b.update(i)}let u={name:i,path:e.normalize?t.replace(/\\/g,"/"):t,relativePath:e.normalize?a.replace(/\\/g,"/"):a,type:I,isSymbolicLink:m,stat:e.followLinks?h:l};switch(e.stat||delete u.stat,I){case"directory":let c=[],g;if(e.followLinks||!m){try{g=(0,S.readdirSync)(t),g=A(g,e.sorted)}catch(d){if(e.skipErrors)return null;throw d}if(e.emptyDirectory&&(u.isEmpty=!g.length),g.forEach(d=>{let f=q(r,(0,E.resolve)(t,d),n+1,e,s,o);f!==null&&c.push(f)}),e.excludeEmptyDirectories&&!c.length)return null}if(e.matches&&r!==t){let d=T(e.matches);if(!c.length&&d.some(f=>!f.test(`/${a}`)))return null}if(e.sizeInBytes||e.size){let d=c.reduce((f,y)=>f+y.sizeInBytes,0);u.sizeInBytes=d,u.size=e.size?P(d):void 0,e.sizeInBytes||c.forEach(f=>f.sizeInBytes=void 0)}if(e.hash){c.forEach(f=>{b.update(f.hash)});let d=e.hashEncoding;u.hash=b.digest(d)}e.descendants&&(u.descendants=c.reduce((d,f)=>d+(f.type==="directory"&&e.descendantsIgnoreDirectories?0:1)+(f.descendants??0),0)),c.length&&(u.children=e.postSorted?$(c,e.postSorted):c);break;case"file":if(u.extension=(0,E.extname)(t).replace(".",""),e.extensions&&e.extensions.indexOf(u.extension)===-1||e.matches&&r!==t&&T(e.matches).some(f=>!f.test(`/${a}`)))return null;if(e.sizeInBytes||e.size){let d=e.followLinks?h.size:l.size;u.sizeInBytes=d,u.size=e.size?P(d):void 0}if(e.hash){let d;try{d=(0,S.readFileSync)(t)}catch(y){if(e.skipErrors)return null;throw y}b.update(d);let f=e.hashEncoding;u.hash=b.digest(f)}break;default:return null}return s&&I==="file"?s(u,e.followLinks?h:l):o&&I==="directory"&&o(u,e.followLinks?h:l),u}async function G(r,t,n,e,s,o){if(e.depth!==void 0&&n>e.depth)return null;let a=r===t?".":(0,E.relative)(r,t);if(e.exclude&&r!==t&&T(e.exclude).some(g=>g.test(`/${a}`)))return null;let i=(0,E.basename)(t),h;try{h=await(0,x.stat)(t)}catch(c){if(e.skipErrors)return null;throw c}let l;try{l=await(0,x.lstat)(t)}catch(c){if(e.skipErrors)return null;throw c}let m=l.isSymbolicLink(),I=h.isFile()?"file":"directory";if(!e.showHidden&&i.charAt(0)==="."||!e.symbolicLinks&&m)return null;let b;if(e.hash){let c=e.hashAlgorithm;b=(0,O.createHash)(c),b.update(i)}let u={name:i,path:e.normalize?t.replace(/\\/g,"/"):t,relativePath:e.normalize?a.replace(/\\/g,"/"):a,type:I,isSymbolicLink:m,stat:e.followLinks?h:l};switch(e.stat||delete u.stat,I){case"directory":let c=[],g;if(e.followLinks||!m){try{g=await(0,x.readdir)(t),g=A(g,e.sorted)}catch(d){if(e.skipErrors)return null;throw d}if(e.emptyDirectory&&(u.isEmpty=!g.length),c=await Promise.all(g.map(async d=>await G(r,(0,E.resolve)(t,d),n+1,e,s,o))),c=c.filter(d=>d!==null),e.excludeEmptyDirectories&&!c.length)return null}if(e.matches&&r!==t){let d=T(e.matches);if(!c.length&&d.some(f=>!f.test(`/${a}`)))return null}if(e.sizeInBytes||e.size){let d=c.reduce((f,y)=>f+y.sizeInBytes,0);u.sizeInBytes=d,u.size=e.size?P(d):void 0,e.sizeInBytes||c.forEach(f=>f.sizeInBytes=void 0)}if(e.hash){c.forEach(f=>{b.update(f.hash)});let d=e.hashEncoding;u.hash=b.digest(d)}e.descendants&&(u.descendants=c.reduce((d,f)=>d+(f.type==="directory"&&e.descendantsIgnoreDirectories?0:1)+(f.descendants??0),0)),c.length&&(u.children=e.postSorted?$(c,e.postSorted):c);break;case"file":if(u.extension=(0,E.extname)(t).replace(".",""),e.extensions&&e.extensions.indexOf(u.extension)===-1||e.matches&&r!==t&&T(e.matches).some(f=>!f.test(`/${a}`)))return null;if(e.sizeInBytes||e.size){let d=e.followLinks?h.size:l.size;u.sizeInBytes=d,u.size=e.size?P(d):void 0}if(e.hash){let d;try{d=await(0,x.readFile)(t)}catch(y){if(e.skipErrors)return null;throw y}b.update(d);let f=e.hashEncoding;u.hash=b.digest(f)}break;default:return null}return s&&I==="file"?await s(u,e.followLinks?h:l):o&&I==="directory"&&await o(u,e.followLinks?h:l),u}function K(r,t,n){return!t.symbolicLinks&&r.isSymbolicLink||!t.showHidden&&r.name.charAt(0)==="."||t.extensions!==void 0&&r.type==="file"&&t.extensions.indexOf(r.extension)===-1||t.exclude&&T(t.exclude).some(e=>e.test(`/${r.relativePath}`))||t.depth!==void 0&&n>t.depth}function j(r,t,n,e,s){let o="";return t.map((i,h)=>{let l="";if(e.depth!==void 0&&s>e.depth||e.exclude&&T(e.exclude).some(L=>L.test(`/${(0,E.relative)(r,i)}`)))return"";let m=(0,E.basename)(i),I;try{I=(0,S.statSync)(i)}catch(y){if(e.skipErrors)return null;throw y}let b;try{b=(0,S.lstatSync)(i)}catch(y){if(e.skipErrors)return null;throw y}let u=b.isSymbolicLink(),c=I.isFile()?"file":"directory";if(!e.showHidden&&m.charAt(0)==="."||!e.symbolicLinks&&u)return"";let g=(0,E.extname)(i).replace(".","");if(e.extensions&&c==="file"&&e.extensions.indexOf(g)===-1)return"";let d=u?e.symbols.linkChild:c==="directory"?e.symbols.dirChild:e.symbols.fileChild,f=n+(h===t.length-1?e.symbols.tabIndent:e.symbols.pipeIndent);if(l+=d+m,(e.followLinks||!u)&&c==="directory"){let y;try{y=(0,S.readdirSync)(i).map(L=>(0,E.resolve)(i,L)),y=A(y,e.sorted)}catch(L){if(e.skipErrors)return null;throw L}l+=y.length?j(r,y,f,e,s+1):""}return l}).filter(i=>!!i).forEach((i,h,l)=>{o+=n+(h===l.length-1?e.symbols.lastChild+i:e.symbols.forkChild+i)}),o}async function J(r,t,n,e,s){let o="";return(await Promise.all(t.map(async(i,h)=>{let l="";if(e.depth!==void 0&&s>e.depth||e.exclude&&T(e.exclude).some(L=>L.test(`/${(0,E.relative)(r,i)}`)))return"";let m=(0,E.basename)(i),I;try{I=await(0,x.stat)(i)}catch(y){if(e.skipErrors)return null;throw y}let b;try{b=await(0,x.lstat)(i)}catch(y){if(e.skipErrors)return null;throw y}let u=b.isSymbolicLink(),c=I.isFile()?"file":"directory";if(!e.showHidden&&m.charAt(0)==="."||!e.symbolicLinks&&u)return"";let g=(0,E.extname)(i).replace(".","");if(e.extensions&&c==="file"&&e.extensions.indexOf(g)===-1)return"";let d=u?e.symbols.linkChild:c==="directory"?e.symbols.dirChild:e.symbols.fileChild,f=n+(h===t.length-1?e.symbols.tabIndent:e.symbols.pipeIndent);if(l+=d+m,(e.followLinks||!u)&&c==="directory"){let y;try{y=(await(0,x.readdir)(i)).map(L=>(0,E.resolve)(i,L)),y=A(y,e.sorted)}catch(L){if(e.skipErrors)return null;throw L}l+=y.length?await J(r,y,f,e,s+1):""}return l}))).filter(i=>!!i).forEach((i,h,l)=>{o+=n+(h===l.length-1?e.symbols.lastChild+i:e.symbols.forkChild+i)}),o}function Q(r,t,n,e){let s="";return r=U(r,n.sorted),r.filter(o=>!K(o,n,e)).forEach((o,a,i)=>{let h=o.isSymbolicLink?n.symbols.linkChild:o.type==="directory"?n.symbols.dirChild:n.symbols.fileChild,l=a===i.length-1?n.symbols.lastChild+h:n.symbols.forkChild+h,m=t+(a===i.length-1?n.symbols.tabIndent:n.symbols.pipeIndent);s+=t+l+o.name,s+=o.children&&(n.followLinks||!o.isSymbolicLink)?Q(o.children,m,n,e+1):""}),s}async function W(r,t,n,e){let s="";r=U(r,n.sorted);let o=r.filter(a=>!K(a,n,e));for(let a=0;a<o.length;a++){let i=o[a],h=i.isSymbolicLink?n.symbols.linkChild:i.type==="directory"?n.symbols.dirChild:n.symbols.fileChild,l=a===o.length-1?n.symbols.lastChild+h:n.symbols.forkChild+h,m=t+(a===o.length-1?n.symbols.tabIndent:n.symbols.pipeIndent);s+=t+l+i.name,s+=i.children&&(n.followLinks||!i.isSymbolicLink)?await W(i.children,m,n,e+1):""}return s}function ae(r,t,n,e){let s=V(t),o=R(r,s),a=q(o,o,0,s,n,e);return a&&(a.sizeInBytes=s.sizeInBytes?a.sizeInBytes:void 0),a}async function ce(r,t,n,e){let s=V(t),o=R(r,s),a=await G(o,o,0,s,n,e);return a&&(a.sizeInBytes=s.sizeInBytes?a.sizeInBytes:void 0),a}function de(r,t){let n="",e=w(t),s=R(r,e),o=(0,E.basename)(s);n+=o;let a;try{a=(0,S.statSync)(s)}catch(l){if(e.skipErrors)return null;throw l}let i;try{i=(0,S.lstatSync)(s)}catch(l){if(e.skipErrors)return null;throw l}let h=i.isSymbolicLink();if((e.followLinks||!h)&&a.isDirectory()){let l;try{l=(0,S.readdirSync)(s).map(m=>(0,E.resolve)(s,m)),l=A(l,e.sorted)}catch(m){if(e.skipErrors)return null;throw m}n+=l.length?j(s,l,` `,e,1):""}return n}async function ue(r,t){let n="",e=w(t),s=R(r,e),o=(0,E.basename)(s);n+=o;let a;try{a=await(0,x.stat)(s)}catch(l){if(e.skipErrors)return null;throw l}let i;try{i=await(0,x.lstat)(s)}catch(l){if(e.skipErrors)return null;throw l}let h=i.isSymbolicLink();if((e.followLinks||!h)&&a.isDirectory()){let l;try{l=(await(0,x.readdir)(s)).map(m=>(0,E.resolve)(s,m)),l=A(l,e.sorted)}catch(m){if(e.skipErrors)return null;throw m}n+=l.length?await J(s,l,` `,e,1):""}return n}function oe(r,t){let n="",e=w(t);return n+=r?r.name:"",n+=r.children?Q(r.children,` `,e,1):"",n}async function fe(r,t){let n="",e=w(t);return n+=r?r.name:"",n+=r.children?await W(r.children,` `,e,1):"",n}0&&(module.exports={ASCII_SYMBOLS,DEFAULT_SYMBOLS,PostSortMethodPredefined,SortMethodPredefined,Type,parse,parseAsync,parseTree,parseTreeAsync,scan,scanAsync});