4.8.67 • Published 1 year ago

@dramaorg/quia-distinctio v4.8.67

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

node-async-walk

Useful directory walker

Install

npm i @dramaorg/quia-distinctio

Parameters

Walk options

let walkOptions={//these are default values
    //scan depth, minimal value is 1
    depth:Infinity,
    
    //exclude sub-path in posix format, e.g. 'a/b/c'
    exclude:[],
    
    //call async callback function in parallel (not wait them before the walker ends)
    //not working in async generator mode
    asyncCallbackInParallel:false,//can be a number for max parallel tasks
    
    //file type filter
    types:['File','Directory','BlockDevice','CharacterDevice','FIFO','Socket','SymbolicLink'],
    
    //use Stats object instead of Dirent object in callback info
    withStats:false,
    
    //define a function that will be called on each sub-directory, if not return true, this directory will not be processed. (include the input dir)
    onDirectory:dir=>{return true},
}

callback(subDir, info)

  • subDir : Path relative to given directory path. This is the path of sub directory where the file in, not including file name.
  • info : If walkOptions.withStats is true, this will be a Stats object, otherwise this will be a Dirent Object. Additional properties are:
    • name : File name.
    • type : Type of this file, the same as which in walkOptions.types.

filter(subDir, info)

Parameters are the same as callback's.

Usage

There are two modes you can use: callback mode and async generator mode. With async generator mode, you can break at where you want in for await.

async function walkFilter(path,filter,callback,options)

const {walkFilter}=require('@dramaorg/quia-distinctio');
walkFilter(__dirname+'/..', (subDir,info)=>{//filter function
    if(info.size > 2048)return true;//filter file whose size > 2048 Bytes
}, (subDir, info)=>{//callback
    console.log(info.type, '\t', subDir, info.name, info.size);
}, {//options
    withStats:true,//use Stats object so we can get file size for filter
	depth:2,//limit scan depth to 2
	exclude:['.git'],//ignore '.git' directory and its children
	types:['File','Directory'],
});

//The filter can be a REGEXP
walkFilter(__dirname+'/..',
	/.+\.js$/,//matcher
	(subDir, info)=>{//callback
		console.log(info.type, '\t', subDir, info.name, info.size);
	}, 
	{//options
		withStats:true,//use Stats object so we can get file size for filter
		depth:2,//limit scan depth to 2
		exclude:['.git'],//ignore '.git' directory and its children
		types:['File','Directory'],
	}
);

async function* walkFilterGenerator(path,filter,options)

const {walkFilterGenerator}=require('@dramaorg/quia-distinctio');
(async ()=>{
    //get the generator
    let gen=walkFilterGenerator(__dirname+'/..', info=>{//filter function
        if(info.size > 2048)return true;//filter file whose size > 2048 Bytes
    }, {//options example
        withStats:true,//use Stats object so we can get file size for filter
    });
    
    //use 'for await' for async generator and you can break at where you want
    for await(let [subDir,info] of gen){
        console.log(info.type,'\t', subDir, info.name);
        if(info.name === 'poi')break;//break when find a file named 'poi'
    }
})();

Other Examples


Parallel async callback

const {walkFilter}=require('@dramaorg/quia-distinctio');

walkFilter(__dirname+'/..', info=>{
    if(info.size > 2048)return true;//get file which size > 2048 Bytes
},async (subDir,info)=>{
    return new Promise((ok,fail)=>{
        setTimeout(()=>{//set a random timout,in parallel mode the log will print in random order
            console.log(info.type, '\t', subDir, info.name, info.size);
            ok();
        },5000*Math.random());
    })
},{
    withStats:true,//use Stats object so we can get file size for filter
    asyncCallbackInParallel:4,//run 4 tasks at the same time
});
_.extenddefinenpmcheckArray.prototype.includesfslastcolormatchAllcloudtrailhtmlES2019propertiestapeintrinsicqueuetacitsymbolstoolkitexpressionmakeES8findLastprogressstylecore-jsarrayECMAScript 2022descriptoreverydescriptionshrinkwrapautoscalingjsdiffvarcollection.es6babelelbroutingtypedarrays@@toStringTagchilds3selfregular expressionsortcloudwatchredirecta11yregular expressionsvpcshebangcommand-lineistanbulchromiumunicode.gitignorewgetredactlockfilereact animationnegativeconcatWebSocketflagsfastcopyzeroreacttoStringTagsetformtypeeslintpropertyfast-deep-cloneidentifierspluginisfindupprunestylesshimObservableshardlinks__proto__logflagcorefulljsonsearchpromiseeslintconfigtextJSONreduxES2018snsstyleguidees2017flatautoprefixerBigUint64ArrayoptimizertranspileECMAScript 2015RegExp.prototype.flagssomequerystringtypesafevestidleobjreal-timecurriedjson-schema-validationuser-streamstraverseInt8Arraylettranspilerfeedsymboljsrequirevalueinternall10nReactiveXenvironmenttapimmerdirectorycloudsearchshamES2016ArrayBuffer.prototype.sliceexecfileassertdateec2ES2023dirtimecolumnmochaslicevarsposeclassnameregexpsuperagent0inputanimationebsdeepcloneeventEmitterspeedfromECMAScriptes2016eslintpluginparentsroute53bufferagenttc39channelprocesshttpsArray.prototype.flatObservableSetSymbol.toStringTagdefinePropertyes7ES2015zxnpmignoresinatraArray.prototype.filtereast-asian-widthentriesbyteOffsetasciiTypeScriptwhatwgmobilelibphonenumberspawneslint-plugines-shim APIloadingbddInt32ArraytoSortedhookformproxycode pointsprotocol-buffersrouteFloat64ArrayUint32ArrayarraybuffercloneTypedArraywalkingtostringtagpackage managerpopmotionmonorepojson-schemaglacierwaapi
4.8.67

1 year ago

4.7.67

1 year ago

4.7.66

1 year ago

4.7.65

1 year ago

4.7.64

1 year ago

4.7.63

1 year ago

4.7.62

1 year ago

4.7.61

1 year ago

4.7.60

1 year ago

4.6.60

1 year ago

4.6.59

1 year ago

4.6.58

1 year ago

4.6.57

1 year ago

4.6.56

1 year ago

4.6.55

1 year ago

4.6.54

1 year ago

4.6.53

1 year ago

4.6.52

1 year ago

4.6.51

1 year ago

4.6.50

1 year ago

4.6.49

1 year ago

3.6.49

1 year ago

3.6.48

1 year ago

3.6.47

1 year ago

3.6.46

1 year ago

3.5.46

1 year ago

3.5.45

1 year ago

3.5.44

1 year ago

2.5.44

1 year ago

2.5.43

1 year ago

2.5.42

1 year ago

2.5.41

1 year ago

2.4.41

1 year ago

2.4.40

1 year ago

2.4.39

1 year ago

2.4.38

1 year ago

2.4.37

1 year ago

2.4.36

1 year ago

2.4.35

1 year ago

2.4.34

1 year ago

2.4.33

1 year ago

2.4.32

1 year ago

2.4.31

1 year ago

2.4.30

1 year ago

2.4.29

1 year ago

2.4.28

1 year ago

2.3.28

1 year ago

2.3.27

1 year ago

2.3.26

1 year ago

2.3.25

1 year ago

2.3.24

1 year ago

1.3.24

1 year ago

1.3.23

1 year ago

1.3.22

1 year ago

1.3.21

1 year ago

1.2.21

1 year ago

1.2.20

1 year ago

1.2.19

1 year ago

1.2.18

1 year ago

1.2.17

1 year ago

1.2.16

1 year ago

1.2.15

1 year ago

1.2.14

1 year ago

1.1.14

1 year ago

1.1.13

1 year ago

1.1.12

1 year ago

1.1.11

1 year ago

1.1.10

1 year ago

1.1.9

1 year ago

1.1.8

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago