@jdeighan/coffee-utils 16.0.13 → 16.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/lib/fs.coffee +24 -74
- package/src/lib/fs.js +26 -74
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@jdeighan/coffee-utils",
|
3
3
|
"type": "module",
|
4
|
-
"version": "16.0.
|
4
|
+
"version": "16.0.14",
|
5
5
|
"description": "A set of utility functions for CoffeeScript",
|
6
6
|
"main": "coffee_utils.js",
|
7
7
|
"exports": {
|
@@ -45,14 +45,14 @@
|
|
45
45
|
},
|
46
46
|
"homepage": "https://github.com/johndeighan/coffee-utils#readme",
|
47
47
|
"dependencies": {
|
48
|
-
"@jdeighan/base-utils": "^8.0.
|
48
|
+
"@jdeighan/base-utils": "^8.0.7",
|
49
49
|
"cross-env": "^7.0.3",
|
50
50
|
"n-readlines": "^1.0.1",
|
51
51
|
"readline-sync": "^1.4.10",
|
52
|
-
"svelte": "^4.
|
52
|
+
"svelte": "^4.1.1"
|
53
53
|
},
|
54
54
|
"devDependencies": {
|
55
|
-
"@jdeighan/unit-tester": "^3.0.
|
55
|
+
"@jdeighan/unit-tester": "^3.0.61",
|
56
56
|
"ava": "^5.3.1"
|
57
57
|
}
|
58
58
|
}
|
package/src/lib/fs.coffee
CHANGED
@@ -8,23 +8,25 @@ import {
|
|
8
8
|
readFile, writeFile, rm, rmdir, # rmSync, rmdirSync,
|
9
9
|
} from 'node:fs/promises'
|
10
10
|
import {execSync} from 'node:child_process'
|
11
|
-
import readline from 'readline'
|
12
|
-
import NReadLines from 'n-readlines'
|
13
11
|
|
14
12
|
import {
|
15
13
|
undef, pass, defined, notdefined, rtrim, isEmpty, nonEmpty,
|
16
14
|
isString, isArray, isHash, isRegExp, isFunction, isBoolean,
|
17
|
-
OL, toBlock, getOptions, isArrayOfStrings,
|
15
|
+
OL, toBlock, getOptions, isArrayOfStrings, deepCopy,
|
18
16
|
} from '@jdeighan/base-utils'
|
19
17
|
import {
|
20
|
-
mkpath, isFile, isDir, rmFileSync, mkdirSync,
|
18
|
+
mkpath, isFile, isDir, rmFileSync, mkdirSync, forEachLineInFile,
|
19
|
+
rmFile, rmDir, rmDirSync,
|
21
20
|
} from '@jdeighan/base-utils/fs'
|
22
21
|
import {assert, croak} from '@jdeighan/base-utils/exceptions'
|
23
22
|
import {LOG, LOGVALUE} from '@jdeighan/base-utils/log'
|
24
23
|
import {dbg, dbgEnter, dbgReturn} from '@jdeighan/base-utils/debug'
|
25
24
|
import {fromTAML} from '@jdeighan/base-utils/taml'
|
26
25
|
|
27
|
-
export {
|
26
|
+
export {
|
27
|
+
mkpath, isFile, isDir, rmFileSync, mkdirSync,
|
28
|
+
forEachLineInFile, rmDir, rmDirSync, rmFile,
|
29
|
+
}
|
28
30
|
|
29
31
|
fix = true
|
30
32
|
|
@@ -35,27 +37,6 @@ export doFixOutput = (flag=true) =>
|
|
35
37
|
fix = flag
|
36
38
|
return
|
37
39
|
|
38
|
-
# ---------------------------------------------------------------------------
|
39
|
-
|
40
|
-
export rmDir = (dirpath) =>
|
41
|
-
|
42
|
-
await rmdir dirpath, {recursive: true}
|
43
|
-
return
|
44
|
-
|
45
|
-
# ---------------------------------------------------------------------------
|
46
|
-
|
47
|
-
export rmDirSync = (dirpath) =>
|
48
|
-
|
49
|
-
fs.rmdirSync dirpath, {recursive: true}
|
50
|
-
return
|
51
|
-
|
52
|
-
# ---------------------------------------------------------------------------
|
53
|
-
|
54
|
-
export rmFile = (filepath) =>
|
55
|
-
|
56
|
-
await rm filepath
|
57
|
-
return
|
58
|
-
|
59
40
|
# --------------------------------------------------------------------------
|
60
41
|
|
61
42
|
export fixOutput = (contents) =>
|
@@ -212,44 +193,6 @@ export getFullPath = (filepath) =>
|
|
212
193
|
|
213
194
|
# ---------------------------------------------------------------------------
|
214
195
|
|
215
|
-
export forEachLineInFile = (filepath, func) =>
|
216
|
-
# --- func gets (line, lineNum, filepath) - lineNum starts at 1
|
217
|
-
|
218
|
-
reader = new NReadLines(filepath)
|
219
|
-
nLines = 0
|
220
|
-
|
221
|
-
while (buffer = reader.next())
|
222
|
-
nLines += 1
|
223
|
-
# --- text is split on \n chars,
|
224
|
-
# we also need to remove \r chars
|
225
|
-
line = buffer.toString().replace(/\r/g, '')
|
226
|
-
result = func(line, nLines, filepath)
|
227
|
-
assert isBoolean(result)
|
228
|
-
if result
|
229
|
-
reader.close() # allow premature termination
|
230
|
-
return
|
231
|
-
return
|
232
|
-
|
233
|
-
# ---------------------------------------------------------------------------
|
234
|
-
|
235
|
-
export mapEachLineInFile = (filepath, func) =>
|
236
|
-
|
237
|
-
reader = new NReadLines(filepath)
|
238
|
-
nLines = 0
|
239
|
-
|
240
|
-
lLines = []
|
241
|
-
while (buffer = reader.next())
|
242
|
-
nLines += 1
|
243
|
-
# --- text is split on \n chars,
|
244
|
-
# we also need to remove \r chars
|
245
|
-
line = buffer.toString().replace(/\r/g, '')
|
246
|
-
result = func(line, nLines)
|
247
|
-
if defined(result)
|
248
|
-
lLines.push result
|
249
|
-
return lLines
|
250
|
-
|
251
|
-
# ---------------------------------------------------------------------------
|
252
|
-
|
253
196
|
export forEachBlock = (filepath, func, regexp = /^-{16,}$/) =>
|
254
197
|
|
255
198
|
lLines = []
|
@@ -277,25 +220,28 @@ export forEachBlock = (filepath, func, regexp = /^-{16,}$/) =>
|
|
277
220
|
|
278
221
|
# ---------------------------------------------------------------------------
|
279
222
|
|
280
|
-
export forEachSetOfBlocks = (filepath, func,
|
281
|
-
block_regexp = /^-{16,}$/,
|
282
|
-
set_regexp = /^={16,}$/)
|
223
|
+
export forEachSetOfBlocks = (filepath, func, \
|
224
|
+
block_regexp = /^-{16,}$/, \
|
225
|
+
set_regexp = /^={16,}$/) \
|
226
|
+
=>
|
283
227
|
|
228
|
+
dbgEnter 'forEachSetOfBlocks', filepath
|
284
229
|
lBlocks = []
|
285
230
|
lLines = []
|
286
231
|
firstLineNum = 1
|
287
232
|
earlyExit = false
|
288
233
|
|
289
|
-
callback = (line,
|
234
|
+
callback = (line, hContext) ->
|
235
|
+
dbgEnter 'callback', line, hContext.lineNum
|
236
|
+
lineNum = hContext.lineNum
|
290
237
|
if (line.match(set_regexp))
|
291
238
|
lBlocks.push(lLines.join('\n'))
|
292
239
|
lLines = []
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
croak "forEachSetOfBlocks() - callback returned '#{result}'"
|
240
|
+
result = func(deepCopy(lBlocks), firstLineNum, line)
|
241
|
+
if (result == true)
|
242
|
+
earlyExit = true
|
243
|
+
dbgReturn 'callback', true
|
244
|
+
return true
|
299
245
|
lBlocks = []
|
300
246
|
firstLineNum = lineNum+1
|
301
247
|
else if (line.match(block_regexp))
|
@@ -303,12 +249,14 @@ export forEachSetOfBlocks = (filepath, func,
|
|
303
249
|
lLines = []
|
304
250
|
else
|
305
251
|
lLines.push line
|
252
|
+
dbgReturn 'callback', false
|
306
253
|
return false
|
307
254
|
|
308
255
|
forEachLineInFile filepath, callback
|
309
256
|
if ! earlyExit
|
310
257
|
lBlocks.push(lLines.join('\n'))
|
311
258
|
func(lBlocks, firstLineNum)
|
259
|
+
dbgReturn 'forEachSetOfBlocks'
|
312
260
|
return
|
313
261
|
|
314
262
|
# ---------------------------------------------------------------------------
|
@@ -544,3 +492,5 @@ export parseSource = (source) =>
|
|
544
492
|
hSourceInfo.purpose = lMatches[1]
|
545
493
|
dbgReturn "parseSource", hSourceInfo
|
546
494
|
return hSourceInfo
|
495
|
+
|
496
|
+
# ---------------------------------------------------------------------------
|
package/src/lib/fs.js
CHANGED
@@ -21,10 +21,6 @@ import {
|
|
21
21
|
execSync
|
22
22
|
} from 'node:child_process';
|
23
23
|
|
24
|
-
import readline from 'readline';
|
25
|
-
|
26
|
-
import NReadLines from 'n-readlines';
|
27
|
-
|
28
24
|
import {
|
29
25
|
undef,
|
30
26
|
pass,
|
@@ -42,7 +38,8 @@ import {
|
|
42
38
|
OL,
|
43
39
|
toBlock,
|
44
40
|
getOptions,
|
45
|
-
isArrayOfStrings
|
41
|
+
isArrayOfStrings,
|
42
|
+
deepCopy
|
46
43
|
} from '@jdeighan/base-utils';
|
47
44
|
|
48
45
|
import {
|
@@ -50,7 +47,11 @@ import {
|
|
50
47
|
isFile,
|
51
48
|
isDir,
|
52
49
|
rmFileSync,
|
53
|
-
mkdirSync
|
50
|
+
mkdirSync,
|
51
|
+
forEachLineInFile,
|
52
|
+
rmFile,
|
53
|
+
rmDir,
|
54
|
+
rmDirSync
|
54
55
|
} from '@jdeighan/base-utils/fs';
|
55
56
|
|
56
57
|
import {
|
@@ -78,7 +79,11 @@ export {
|
|
78
79
|
isFile,
|
79
80
|
isDir,
|
80
81
|
rmFileSync,
|
81
|
-
mkdirSync
|
82
|
+
mkdirSync,
|
83
|
+
forEachLineInFile,
|
84
|
+
rmDir,
|
85
|
+
rmDirSync,
|
86
|
+
rmFile
|
82
87
|
};
|
83
88
|
|
84
89
|
fix = true;
|
@@ -88,25 +93,6 @@ export var doFixOutput = (flag = true) => {
|
|
88
93
|
fix = flag;
|
89
94
|
};
|
90
95
|
|
91
|
-
// ---------------------------------------------------------------------------
|
92
|
-
export var rmDir = async(dirpath) => {
|
93
|
-
await rmdir(dirpath, {
|
94
|
-
recursive: true
|
95
|
-
});
|
96
|
-
};
|
97
|
-
|
98
|
-
// ---------------------------------------------------------------------------
|
99
|
-
export var rmDirSync = (dirpath) => {
|
100
|
-
fs.rmdirSync(dirpath, {
|
101
|
-
recursive: true
|
102
|
-
});
|
103
|
-
};
|
104
|
-
|
105
|
-
// ---------------------------------------------------------------------------
|
106
|
-
export var rmFile = async(filepath) => {
|
107
|
-
await rm(filepath);
|
108
|
-
};
|
109
|
-
|
110
96
|
// --------------------------------------------------------------------------
|
111
97
|
export var fixOutput = (contents) => {
|
112
98
|
if (fix && isString(contents)) {
|
@@ -273,45 +259,6 @@ export var getFullPath = (filepath) => {
|
|
273
259
|
return mkpath(pathlib.resolve(filepath));
|
274
260
|
};
|
275
261
|
|
276
|
-
// ---------------------------------------------------------------------------
|
277
|
-
export var forEachLineInFile = (filepath, func) => {
|
278
|
-
var buffer, line, nLines, reader, result;
|
279
|
-
// --- func gets (line, lineNum, filepath) - lineNum starts at 1
|
280
|
-
reader = new NReadLines(filepath);
|
281
|
-
nLines = 0;
|
282
|
-
while ((buffer = reader.next())) {
|
283
|
-
nLines += 1;
|
284
|
-
// --- text is split on \n chars,
|
285
|
-
// we also need to remove \r chars
|
286
|
-
line = buffer.toString().replace(/\r/g, '');
|
287
|
-
result = func(line, nLines, filepath);
|
288
|
-
assert(isBoolean(result));
|
289
|
-
if (result) {
|
290
|
-
reader.close(); // allow premature termination
|
291
|
-
return;
|
292
|
-
}
|
293
|
-
}
|
294
|
-
};
|
295
|
-
|
296
|
-
// ---------------------------------------------------------------------------
|
297
|
-
export var mapEachLineInFile = (filepath, func) => {
|
298
|
-
var buffer, lLines, line, nLines, reader, result;
|
299
|
-
reader = new NReadLines(filepath);
|
300
|
-
nLines = 0;
|
301
|
-
lLines = [];
|
302
|
-
while ((buffer = reader.next())) {
|
303
|
-
nLines += 1;
|
304
|
-
// --- text is split on \n chars,
|
305
|
-
// we also need to remove \r chars
|
306
|
-
line = buffer.toString().replace(/\r/g, '');
|
307
|
-
result = func(line, nLines);
|
308
|
-
if (defined(result)) {
|
309
|
-
lLines.push(result);
|
310
|
-
}
|
311
|
-
}
|
312
|
-
return lLines;
|
313
|
-
};
|
314
|
-
|
315
262
|
// ---------------------------------------------------------------------------
|
316
263
|
export var forEachBlock = (filepath, func, regexp = /^-{16,}$/) => {
|
317
264
|
var callback, earlyExit, firstLineNum, lLines;
|
@@ -345,22 +292,23 @@ export var forEachBlock = (filepath, func, regexp = /^-{16,}$/) => {
|
|
345
292
|
// ---------------------------------------------------------------------------
|
346
293
|
export var forEachSetOfBlocks = (filepath, func, block_regexp = /^-{16,}$/, set_regexp = /^={16,}$/) => {
|
347
294
|
var callback, earlyExit, firstLineNum, lBlocks, lLines;
|
295
|
+
dbgEnter('forEachSetOfBlocks', filepath);
|
348
296
|
lBlocks = [];
|
349
297
|
lLines = [];
|
350
298
|
firstLineNum = 1;
|
351
299
|
earlyExit = false;
|
352
|
-
callback = function(line,
|
353
|
-
var result;
|
300
|
+
callback = function(line, hContext) {
|
301
|
+
var lineNum, result;
|
302
|
+
dbgEnter('callback', line, hContext.lineNum);
|
303
|
+
lineNum = hContext.lineNum;
|
354
304
|
if (line.match(set_regexp)) {
|
355
305
|
lBlocks.push(lLines.join('\n'));
|
356
306
|
lLines = [];
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
croak(`forEachSetOfBlocks() - callback returned '${result}'`);
|
363
|
-
}
|
307
|
+
result = func(deepCopy(lBlocks), firstLineNum, line);
|
308
|
+
if (result === true) {
|
309
|
+
earlyExit = true;
|
310
|
+
dbgReturn('callback', true);
|
311
|
+
return true;
|
364
312
|
}
|
365
313
|
lBlocks = [];
|
366
314
|
firstLineNum = lineNum + 1;
|
@@ -370,6 +318,7 @@ export var forEachSetOfBlocks = (filepath, func, block_regexp = /^-{16,}$/, set_
|
|
370
318
|
} else {
|
371
319
|
lLines.push(line);
|
372
320
|
}
|
321
|
+
dbgReturn('callback', false);
|
373
322
|
return false;
|
374
323
|
};
|
375
324
|
forEachLineInFile(filepath, callback);
|
@@ -377,6 +326,7 @@ export var forEachSetOfBlocks = (filepath, func, block_regexp = /^-{16,}$/, set_
|
|
377
326
|
lBlocks.push(lLines.join('\n'));
|
378
327
|
func(lBlocks, firstLineNum);
|
379
328
|
}
|
329
|
+
dbgReturn('forEachSetOfBlocks');
|
380
330
|
};
|
381
331
|
|
382
332
|
// ---------------------------------------------------------------------------
|
@@ -644,3 +594,5 @@ export var parseSource = (source) => {
|
|
644
594
|
dbgReturn("parseSource", hSourceInfo);
|
645
595
|
return hSourceInfo;
|
646
596
|
};
|
597
|
+
|
598
|
+
// ---------------------------------------------------------------------------
|