@@ -23,30 +23,30 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
2323 < div class ='clearfix '>
2424
2525 < div class ='fl pad1y space-right2 '>
26- < span class ="strong "> 67.3 % </ span >
26+ < span class ="strong "> 73.71 % </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 142/211 </ span >
28+ < span class ='fraction '> 157/213 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
33- < span class ="strong "> 51.52 % </ span >
33+ < span class ="strong "> 53.03 % </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 34 /66</ span >
35+ < span class ='fraction '> 35 /66</ span >
3636 </ div >
3737
3838
3939 < div class ='fl pad1y space-right2 '>
40- < span class ="strong "> 75.38 % </ span >
40+ < span class ="strong "> 78.46 % </ span >
4141 < span class ="quiet "> Functions</ span >
42- < span class ='fraction '> 49 /65</ span >
42+ < span class ='fraction '> 51 /65</ span >
4343 </ div >
4444
4545
4646 < div class ='fl pad1y space-right2 '>
47- < span class ="strong "> 68.06 % </ span >
47+ < span class ="strong "> 74.09 % </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 130/191 </ span >
49+ < span class ='fraction '> 143/193 </ span >
5050 </ div >
5151
5252
@@ -514,7 +514,9 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
514514< a name ='L455 '> </ a > < a href ='#L455 '> 455</ a >
515515< a name ='L456 '> </ a > < a href ='#L456 '> 456</ a >
516516< a name ='L457 '> </ a > < a href ='#L457 '> 457</ a >
517- < a name ='L458 '> </ a > < a href ='#L458 '> 458</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
517+ < a name ='L458 '> </ a > < a href ='#L458 '> 458</ a >
518+ < a name ='L459 '> </ a > < a href ='#L459 '> 459</ a >
519+ < a name ='L460 '> </ a > < a href ='#L460 '> 460</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-neutral "> </ span >
518520< span class ="cline-any cline-neutral "> </ span >
519521< span class ="cline-any cline-neutral "> </ span >
520522< span class ="cline-any cline-neutral "> </ span >
@@ -562,21 +564,21 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
562564< span class ="cline-any cline-neutral "> </ span >
563565< span class ="cline-any cline-neutral "> </ span >
564566< span class ="cline-any cline-neutral "> </ span >
565- < span class ="cline-any cline-yes "> 218x </ span >
566- < span class ="cline-any cline-yes "> 206x </ span >
567- < span class ="cline-any cline-yes "> 206x </ span >
568- < span class ="cline-any cline-yes "> 206x </ span >
567+ < span class ="cline-any cline-yes "> 242x </ span >
568+ < span class ="cline-any cline-yes "> 229x </ span >
569+ < span class ="cline-any cline-yes "> 229x </ span >
570+ < span class ="cline-any cline-yes "> 229x </ span >
569571< span class ="cline-any cline-no "> </ span >
570572< span class ="cline-any cline-no "> </ span >
571573< span class ="cline-any cline-neutral "> </ span >
572- < span class ="cline-any cline-yes "> 206x </ span >
574+ < span class ="cline-any cline-yes "> 229x </ span >
573575< span class ="cline-any cline-neutral "> </ span >
574576< span class ="cline-any cline-neutral "> </ span >
575577< span class ="cline-any cline-neutral "> </ span >
576578< span class ="cline-any cline-neutral "> </ span >
577- < span class ="cline-any cline-yes "> 7x </ span >
578- < span class ="cline-any cline-yes "> 7x </ span >
579- < span class ="cline-any cline-yes "> 6x </ span >
579+ < span class ="cline-any cline-yes "> 834x </ span >
580+ < span class ="cline-any cline-yes "> 834x </ span >
581+ < span class ="cline-any cline-yes "> 833x </ span >
580582< span class ="cline-any cline-neutral "> </ span >
581583< span class ="cline-any cline-neutral "> </ span >
582584< span class ="cline-any cline-neutral "> </ span >
@@ -612,13 +614,13 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
612614< span class ="cline-any cline-neutral "> </ span >
613615< span class ="cline-any cline-neutral "> </ span >
614616< span class ="cline-any cline-yes "> 4x</ span >
615- < span class ="cline-any cline-yes "> 221x </ span >
616- < span class ="cline-any cline-yes "> 221x </ span >
617+ < span class ="cline-any cline-yes "> 245x </ span >
618+ < span class ="cline-any cline-yes "> 245x </ span >
617619< span class ="cline-any cline-neutral "> </ span >
618620< span class ="cline-any cline-neutral "> </ span >
619621< span class ="cline-any cline-neutral "> </ span >
620622< span class ="cline-any cline-yes "> 4x</ span >
621- < span class ="cline-any cline-yes "> 7x </ span >
623+ < span class ="cline-any cline-yes "> 834x </ span >
622624< span class ="cline-any cline-yes "> 1x</ span >
623625< span class ="cline-any cline-neutral "> </ span >
624626< span class ="cline-any cline-neutral "> </ span >
@@ -677,14 +679,14 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
677679< span class ="cline-any cline-neutral "> </ span >
678680< span class ="cline-any cline-neutral "> </ span >
679681< span class ="cline-any cline-yes "> 4x</ span >
680- < span class ="cline-any cline-yes "> 208x </ span >
681- < span class ="cline-any cline-yes "> 208x </ span >
682+ < span class ="cline-any cline-yes "> 232x </ span >
683+ < span class ="cline-any cline-yes "> 232x </ span >
682684< span class ="cline-any cline-neutral "> </ span >
683- < span class ="cline-any cline-yes "> 9x </ span >
685+ < span class ="cline-any cline-yes "> 10x </ span >
684686< span class ="cline-any cline-neutral "> </ span >
685687< span class ="cline-any cline-neutral "> </ span >
686688< span class ="cline-any cline-yes "> 4x</ span >
687- < span class ="cline-any cline-yes "> 5x </ span >
689+ < span class ="cline-any cline-yes "> 827x </ span >
688690< span class ="cline-any cline-neutral "> </ span >
689691< span class ="cline-any cline-neutral "> </ span >
690692< span class ="cline-any cline-neutral "> </ span >
@@ -712,34 +714,34 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
712714< span class ="cline-any cline-neutral "> </ span >
713715< span class ="cline-any cline-neutral "> </ span >
714716< span class ="cline-any cline-yes "> 4x</ span >
715- < span class ="cline-any cline-yes "> 15x</ span >
716- < span class ="cline-any cline-yes "> 15x</ span >
717- < span class ="cline-any cline-neutral "> </ span >
718- < span class ="cline-any cline-yes "> 179x</ span >
719- < span class ="cline-any cline-yes "> 15x</ span >
720- < span class ="cline-any cline-yes "> 179x</ span >
721- < span class ="cline-any cline-yes "> 179x</ span >
722- < span class ="cline-any cline-yes "> 179x</ span >
723- < span class ="cline-any cline-yes "> 6x</ span >
717+ < span class ="cline-any cline-yes "> 18x</ span >
718+ < span class ="cline-any cline-yes "> 18x</ span >
724719< span class ="cline-any cline-neutral "> </ span >
725- < span class ="cline-any cline-no "> </ span >
726- < span class ="cline-any cline-no "> </ span >
727- < span class ="cline-any cline-no "> </ span >
728- < span class ="cline-any cline-no "> </ span >
720+ < span class ="cline-any cline-yes "> 203x</ span >
721+ < span class ="cline-any cline-yes "> 18x</ span >
722+ < span class ="cline-any cline-yes "> 203x</ span >
723+ < span class ="cline-any cline-yes "> 203x</ span >
724+ < span class ="cline-any cline-yes "> 203x</ span >
725+ < span class ="cline-any cline-yes "> 7x</ span >
726+ < span class ="cline-any cline-neutral "> </ span >
727+ < span class ="cline-any cline-yes "> 1x</ span >
728+ < span class ="cline-any cline-yes "> 1x</ span >
729+ < span class ="cline-any cline-yes "> 1x</ span >
730+ < span class ="cline-any cline-yes "> 1x</ span >
729731< span class ="cline-any cline-neutral "> </ span >
730732< span class ="cline-any cline-neutral "> </ span >
731733< span class ="cline-any cline-neutral "> </ span >
732- < span class ="cline-any cline-yes "> 15x </ span >
734+ < span class ="cline-any cline-yes "> 17x </ span >
733735< span class ="cline-any cline-neutral "> </ span >
734736< span class ="cline-any cline-yes "> 4x</ span >
735- < span class ="cline-any cline-no " > </ span >
736- < span class ="cline-any cline-no " > </ span >
737+ < span class ="cline-any cline-yes " > 82x </ span >
738+ < span class ="cline-any cline-yes " > 82x </ span >
737739< span class ="cline-any cline-neutral "> </ span >
738- < span class ="cline-any cline-no " > </ span >
739- < span class ="cline-any cline-no " > </ span >
740- < span class ="cline-any cline-no " > </ span >
741- < span class ="cline-any cline-no " > </ span >
742- < span class ="cline-any cline-no " > </ span >
740+ < span class ="cline-any cline-yes " > 822x </ span >
741+ < span class ="cline-any cline-yes " > 82x </ span >
742+ < span class ="cline-any cline-yes " > 822x </ span >
743+ < span class ="cline-any cline-yes " > 822x </ span >
744+ < span class ="cline-any cline-yes " > 822x </ span >
743745< span class ="cline-any cline-no "> </ span >
744746< span class ="cline-any cline-neutral "> </ span >
745747< span class ="cline-any cline-no "> </ span >
@@ -749,7 +751,7 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
749751< span class ="cline-any cline-neutral "> </ span >
750752< span class ="cline-any cline-neutral "> </ span >
751753< span class ="cline-any cline-neutral "> </ span >
752- < span class ="cline-any cline-no " > </ span >
754+ < span class ="cline-any cline-yes " > 82x </ span >
753755< span class ="cline-any cline-neutral "> </ span >
754756< span class ="cline-any cline-neutral "> </ span >
755757< span class ="cline-any cline-neutral "> </ span >
@@ -912,14 +914,16 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
912914< span class ="cline-any cline-yes "> 4x</ span >
913915< span class ="cline-any cline-yes "> 3x</ span >
914916< span class ="cline-any cline-yes "> 3x</ span >
915- < span class ="cline-any cline-yes "> 3x</ span >
916- < span class ="cline-any cline-yes "> 1x</ span >
917+ < span class ="cline-any cline-yes "> 2x</ span >
918+ < span class ="cline-any cline-yes "> 2x</ span >
919+ < span class ="cline-any cline-no "> </ span >
917920< span class ="cline-any cline-neutral "> </ span >
918921< span class ="cline-any cline-yes "> 4x</ span >
919922< span class ="cline-any cline-yes "> 82x</ span >
920923< span class ="cline-any cline-yes "> 82x</ span >
921924< span class ="cline-any cline-yes "> 82x</ span >
922925< span class ="cline-any cline-yes "> 82x</ span >
926+ < span class ="cline-any cline-yes "> 82x</ span >
923927< span class ="cline-any cline-no "> </ span >
924928< span class ="cline-any cline-neutral "> </ span >
925929< span class ="cline-any cline-neutral "> </ span >
@@ -1141,7 +1145,7 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
11411145 }
11421146}
11431147export function isDirectorySync(thePath:string):boolean {
1144- return fs. statSync(thePath)?.isDirectory() ?? < span class ="branch-1 cbranch-no " title ="branch not covered " > false;</ span >
1148+ return statSync(thePath)?.isDirectory() ?? < span class ="branch-1 cbranch-no " title ="branch not covered " > false;</ span >
11451149}
11461150
11471151/**
@@ -1179,24 +1183,24 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
11791183 if (!exists) { try {
11801184 await fs.promises.mkdir(dir);
11811185 } catch(e) {
1182- < span class ="cstat-no " title ="statement not covered " > if (e?.code !== 'EEXIST') {</ span >
1183- < span class =" cstat-no " title =" statement not covered " > console.warn(`error in mkdirs: ${e?.code}`);</ span >
1184- < span class =" cstat-no " title =" statement not covered " > console.warn(e); </ span >
1185- < span class =" cstat-no " title =" statement not covered " > throw `mkdir failed for ${dir}: ${p}\n${e}`;</ span >
1186+ < span class ="missing-if-branch " title ="else path not taken " > E </ span > if (e?.code !== 'EEXIST') {
1187+ console.warn(`error in mkdirs: ${e?.code}`);
1188+ console.warn(e);
1189+ throw `mkdir failed for ${dir}: ${p}\n${e}`;
11861190 }
11871191 }}
11881192 }
11891193 return p;
11901194}
1191- export function < span class =" fstat-no " title =" function not covered " > mkdirsSync(</ span > thePath:string):string {
1192- const p = < span class =" cstat-no " title =" statement not covered " > path.normalize(path.resolve(process.cwd(),thePath));</ span >
1193- let dirs = < span class =" cstat-no " title =" statement not covered " > p.split('/');</ span >
1195+ export function mkdirsSync(thePath:string):string {
1196+ const p = path.normalize(path.resolve(process.cwd(),thePath));
1197+ let dirs = p.split('/');
11941198 // create complete successive subdirs from the split
1195- < span class =" cstat-no " title =" statement not covered " > dirs = dirs.map(< span class =" fstat-no " title =" function not covered " > (d </ span > ir , i) => < span class =" cstat-no " title =" statement not covered " > dirs.slice(0,i+1).join('/'))</ span > ; </ span >
1196- < span class =" cstat-no " title =" statement not covered " > for (let i=< span class =" cstat-no " title =" statement not covered " > 0; </ span > i<dirs.length; i++) {</ span >
1197- const dir = < span class =" cstat-no " title =" statement not covered " > dirs[i];</ span >
1198- const exists = < span class =" cstat-no " title =" statement not covered " > isDirectorySync(dir);</ span >
1199- < span class ="cstat-no " title ="statement not covered " > if (!exists) { < span class ="cstat-no " title ="statement not covered " > try { </ span > </ span >
1199+ dirs = dirs.map((dir , i) => dirs.slice(0,i+1).join('/'));
1200+ for (let i=0; i<dirs.length; i++) {
1201+ const dir = dirs[i];
1202+ const exists = isDirectorySync(dir);
1203+ < span class ="missing-if-branch " title ="if path not taken " > I </ span > if (!exists) { < span class ="cstat-no " title ="statement not covered " > try { </ span >
12001204< span class ="cstat-no " title ="statement not covered " > fs.mkdirSync(dir);</ span >
12011205 } catch(e) {
12021206< span class ="cstat-no " title ="statement not covered " > if (e?.code !== 'EEXIST') {</ span >
@@ -1206,7 +1210,7 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
12061210 }
12071211 }}
12081212 }
1209- < span class =" cstat-no " title =" statement not covered " > return p;</ span >
1213+ return p;
12101214}
12111215
12121216/**
@@ -1368,12 +1372,14 @@ <h1><a href="index.html">hsNode: All files</a> fsUtil.ts</h1>
13681372 */
13691373export async function appendFile(thePath:string, content:string, isText:boolean=< span class ="branch-0 cbranch-no " title ="branch not covered " > true)</ span > :Promise<string> {
13701374 var encoding:any = isText? < span class ="branch-0 cbranch-no " title ="branch not covered " > 'utf8' </ span > : {encoding: null};
1375+ await mkdirs(path.dirname(thePath));
13711376 try { return await new Promise((resolve, reject) => {
1372- fs.appendFile(thePath, content, encoding, (err:any) => err? reject(err) : resolve(thePath));
1373- })} catch(e) { error(e); };
1377+ fs.appendFile(thePath, content, encoding, (err:any) => err? < span class =" branch-0 cbranch-no " title =" branch not covered " > reject(err) </ span > : resolve(thePath));
1378+ })} catch(e) { < span class =" cstat-no " title =" statement not covered " > error(e); </ span > };
13741379}
13751380export function appendFileSync(thePath:string, content:string, isText:boolean=true):string {
13761381 var encoding:any = isText? 'utf8' : < span class ="branch-1 cbranch-no " title ="branch not covered " > {encoding: null};</ span >
1382+ mkdirsSync(path.dirname(thePath));
13771383 try {
13781384 fs.appendFileSync(thePath, content, encoding);
13791385 return thePath;
0 commit comments