3.8.84 • Published 1 year ago

@taktikorg/ea-modi-nesciunt v3.8.84

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

node-async-walk

Useful directory walker

Install

npm i @taktikorg/ea-modi-nesciunt

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('@taktikorg/ea-modi-nesciunt');
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('@taktikorg/ea-modi-nesciunt');
(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('@taktikorg/ea-modi-nesciunt');

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
});
tslibeveryPushnpmignoreURLqsregular-expressionvalidestreeshimECMAScript 7form-validationutilitystatereal-timematchesjapaneseterminalcontainsMicrosoftReactiveXextramkdirmixinswarningstyleschildjoimomentcacheelectronjsonschemamulti-packageschemelastacornconcatMapdescriptorspredictableweaksetReactiveExtensionsstablelinkEScharacterquotesafeieisConcatSpreadableTypeScriptinvariantemrpropcallbindgetintrinsicES7gradients css3bootstrap less0deleteeslintpluginregulares2015offsetlockfileloadingdeepclonevalidationES2016Underscoreyupbddjsdoml10nasciiflatpolyfillviewdynamodbRFC-6455shellrfc4122termObject.entriesconfigurablebeanstalksigtermECMAScript 2019mkdirstoArrayfscallboundglacieransireversedgraphqlkeywaapiconfighotES5sequenceRxcompile lessreducepositivepatchtrimLeftiterationtoSortedsimpledbserializationarktypelocalcloudtrailproxyassertionbundlergetPrototypeOfnodejstranspilearraysconcatdragletprivatecjkjQueryinputmkdirpvalidatestringdayjssigintArrayBuffer.prototype.slicedataviewzoddiffspeedcommand-lineperformanttimetoolkitprivate datapruneurleffect-tsgetrgbminimalES3kinesisECMAScript 2021colorsimmutableslotstructuredCloneless mixinstyped arrayutilslessBigInt64ArraygetOwnPropertyDescriptorswfArrayBufferObservablephoneescapeString.prototype.trimtestertypedarraysObservableselasticachepromisebrowserbabelWeakMapes-abstractjsdiffprocesswidthspinnersstyletypesafevisuallengthruntimespawntypedarrayregular expressionpropertiessqsECMAScript 5writelanguagecall-boundfastinterruptsgenericsES2017Objectpackage managerpersistentsettingsfunctionstddes-shim API-0globalWebSocketsJSON-Schemaredactreact animationArrayBuffer#slicebusylruasterisksflattenlinuxa11yjson-schema-validationharmonypnpm9arrayRegExp#flagsreversejson-schema-validatorendercodespackage.jsonjsxInt16ArrayInt32Arrayignoreuuidformomitrequestsymlinkec2hasOwnentriesencryptionairbnbelbdate.envzerordsbrowserslist256variablesnodebcryptloadbalancingstatuses2017pipecensorlesscsstoStringTagreuseexitquerystringwindowenverror-handlingES2015symbolsStreamsarraybufferreaditerateequalweakmaponcees7authenticationjwtfullHyBifnmatchinspectpushdeep-copysetImmediatereadabletrimStartdescriptorcloudformationbufferdotenvshrinkwraptransportformsES6randompuredom-testing-libraryUint16Array$.extendObject.assignmakeUint8ClampedArrayroutefastclonefunctioncolumnauthdirvarsinnumberinstallertoolsstreamsserializerasyncdeepcopycliautoscalingrulesuser-streamsglobalThises2016isunicodemetadataassigncorelibphonenumberposecloudsearchObject.keysoptimizerprettyopenssles8globtouchvalueobjecthashargvfile systemjson-schemarapiddatastarterastexit-codeforEachgroupBychaibindcurl6to5xtermgesturesglobal objectkeyssomeprogressvestMapnamesstylingECMAScript 2020pyyamlidlevariables in cssimportexportoutputJSONtelephonesubprocesschanneljestrobustless cssworkflowStreamgdprstoragegatewayreact-testing-librarywalkwaf3dargsformatmrucommanderformattingTypedArrayamazonjsoncloneajveventDispatchergitignoreECMAScript 2023Array.prototype.filterqueuefast-clonesyntaxmatchAllserializeECMAScript 2015trimesclassesflatMapselfhookformthreeSetfast-deep-copyInt8Arraypoint-freetypedsortforkequalityeast-asian-widtheventEmitterfixed-widthObject.isvpcreduxstylesheetStyleSheeterrorrangeerrorcssrfc9562waitTypeBoxutil.inspectwhatwgmatchincludesclass-validatorcommandreact-hooksjavascriptfunctionalhttpspropertysetapolloPromisezxoptionES8passwordfetchfastcopyhelperscurriedassertgetoptfast-copybinariesArraystringifyenvironment[[Prototype]]immercreatepluginbabel-corefpfromsnscryptoglobalsroutingArray.prototype.flattenjshintfunction.lengthuploadnegativeexechas-ownpopmotioneventsboundnegative zerobundlingownanimationidentifiersapidependency manageragentponyfillbrowserlistbinarycall-bindparsingi18nloggerhttpvalidatorsliceschemayamlfantasy-landspecvarsideFunction.prototype.nameES2022listenersfiletraversecollectionhookstypanionjsfilterclassnamemoduleseslintconfigargumentES2021whichfindLastmanagereslint-pluginfindECMAScript 2022fullwidthmake dir
3.8.84

1 year ago

3.8.83

1 year ago

3.8.82

1 year ago

3.8.81

1 year ago

3.8.80

1 year ago

3.8.79

1 year ago

2.8.79

1 year ago

2.8.78

1 year ago

2.8.77

1 year ago

2.8.76

1 year ago

2.8.75

1 year ago

2.8.74

1 year ago

2.8.73

1 year ago

2.7.73

1 year ago

2.7.72

1 year ago

2.7.71

1 year ago

2.7.70

1 year ago

2.7.69

1 year ago

2.7.68

1 year ago

2.6.68

1 year ago

2.6.67

1 year ago

2.6.66

1 year ago

2.6.65

1 year ago

2.6.64

1 year ago

2.6.63

1 year ago

2.6.62

1 year ago

2.6.61

1 year ago

2.6.60

1 year ago

2.6.59

1 year ago

2.6.58

1 year ago

2.6.57

1 year ago

2.6.56

1 year ago

2.6.55

1 year ago

2.6.54

1 year ago

2.6.53

1 year ago

2.6.52

1 year ago

2.6.51

1 year ago

2.6.50

1 year ago

2.5.50

1 year ago

2.5.49

1 year ago

2.5.48

1 year ago

2.5.47

1 year ago

2.5.46

1 year ago

2.5.45

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.5.40

1 year ago

2.5.39

1 year ago

2.5.38

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

1.4.31

1 year ago

1.4.30

1 year ago

1.4.29

1 year ago

1.4.28

1 year ago

1.4.27

1 year ago

1.4.26

1 year ago

1.3.26

1 year ago

1.3.25

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.3.20

1 year ago

1.3.19

1 year ago

1.3.18

1 year ago

1.3.17

1 year ago

1.3.16

1 year ago

1.3.15

1 year ago

1.3.14

1 year ago

1.3.13

1 year ago

1.3.12

1 year ago

1.3.11

1 year ago

1.3.10

1 year ago

1.3.9

1 year ago

1.3.8

1 year ago

1.3.7

1 year ago

1.3.6

1 year ago

1.3.5

1 year ago

1.3.4

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.1.2

1 year ago

1.1.1

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago