@jdeighan/coffee-utils 7.0.17 → 7.0.20
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 +1 -1
- package/src/debug_utils.coffee +3 -2
- package/src/debug_utils.js +2 -2
- package/src/fs_utils.coffee +77 -58
- package/src/fs_utils.js +82 -64
package/package.json
CHANGED
package/src/debug_utils.coffee
CHANGED
|
@@ -150,7 +150,7 @@ adjustStack = (str) ->
|
|
|
150
150
|
export debug = (lArgs...) ->
|
|
151
151
|
|
|
152
152
|
# --- We want to allow item to be undef. Therefore, we need to
|
|
153
|
-
# distinguish between 1 arg sent vs. 2
|
|
153
|
+
# distinguish between 1 arg sent vs. 2 args sent
|
|
154
154
|
nArgs = lArgs.length
|
|
155
155
|
assert (nArgs==1) || (nArgs==2), "debug(): #{nArgs} args"
|
|
156
156
|
[label, item] = lArgs
|
|
@@ -172,6 +172,7 @@ export debug = (lArgs...) ->
|
|
|
172
172
|
prefix: mainPre
|
|
173
173
|
itemPrefix: auxPre
|
|
174
174
|
}
|
|
175
|
+
|
|
175
176
|
switch type
|
|
176
177
|
when 'enter'
|
|
177
178
|
log label, hOptions
|
|
@@ -184,7 +185,7 @@ export debug = (lArgs...) ->
|
|
|
184
185
|
# --- don't repeat the label
|
|
185
186
|
logItem undef, item, hOptions
|
|
186
187
|
when 'string'
|
|
187
|
-
if
|
|
188
|
+
if (nArgs==2)
|
|
188
189
|
logItem label, item, hOptions
|
|
189
190
|
else
|
|
190
191
|
log label, hOptions
|
package/src/debug_utils.js
CHANGED
|
@@ -163,7 +163,7 @@ adjustStack = function(str) {
|
|
|
163
163
|
export var debug = function(...lArgs) {
|
|
164
164
|
var auxPre, hEnv, hOptions, item, label, mainPre, nArgs, orgDebugging, trans, type;
|
|
165
165
|
// --- We want to allow item to be undef. Therefore, we need to
|
|
166
|
-
// distinguish between 1 arg sent vs. 2
|
|
166
|
+
// distinguish between 1 arg sent vs. 2 args sent
|
|
167
167
|
nArgs = lArgs.length;
|
|
168
168
|
assert((nArgs === 1) || (nArgs === 2), `debug(): ${nArgs} args`);
|
|
169
169
|
[label, item] = lArgs;
|
|
@@ -199,7 +199,7 @@ export var debug = function(...lArgs) {
|
|
|
199
199
|
}
|
|
200
200
|
break;
|
|
201
201
|
case 'string':
|
|
202
|
-
if (
|
|
202
|
+
if (nArgs === 2) {
|
|
203
203
|
logItem(label, item, hOptions);
|
|
204
204
|
} else {
|
|
205
205
|
log(label, hOptions);
|
package/src/fs_utils.coffee
CHANGED
|
@@ -14,7 +14,7 @@ import {debug} from '@jdeighan/coffee-utils/debug'
|
|
|
14
14
|
import {arrayToBlock} from '@jdeighan/coffee-utils/block'
|
|
15
15
|
|
|
16
16
|
# ---------------------------------------------------------------------------
|
|
17
|
-
# mydir() - pass argument
|
|
17
|
+
# mydir() - pass argument import.meta.url and it will return
|
|
18
18
|
# the directory your file is in
|
|
19
19
|
|
|
20
20
|
export mydir = (url) ->
|
|
@@ -28,6 +28,30 @@ export mydir = (url) ->
|
|
|
28
28
|
debug "final = #{final}"
|
|
29
29
|
return final
|
|
30
30
|
|
|
31
|
+
# ---------------------------------------------------------------------------
|
|
32
|
+
# myfile() - pass argument import.meta.url and it will return
|
|
33
|
+
# the name of your file
|
|
34
|
+
|
|
35
|
+
export myfile = (url) ->
|
|
36
|
+
|
|
37
|
+
debug "url = #{url}"
|
|
38
|
+
path = urllib.fileURLToPath(url)
|
|
39
|
+
debug "path = #{path}"
|
|
40
|
+
filename = pathlib.parse(path).base
|
|
41
|
+
debug "filename = #{filename}"
|
|
42
|
+
return filename
|
|
43
|
+
|
|
44
|
+
# ---------------------------------------------------------------------------
|
|
45
|
+
# myfullpath() - pass argument import.meta.url and it will return
|
|
46
|
+
# the full path to your file
|
|
47
|
+
|
|
48
|
+
export myfullpath = (url) ->
|
|
49
|
+
|
|
50
|
+
debug "url = #{url}"
|
|
51
|
+
path = urllib.fileURLToPath(url)
|
|
52
|
+
debug "path = #{path}"
|
|
53
|
+
return mkpath(path)
|
|
54
|
+
|
|
31
55
|
# ---------------------------------------------------------------------------
|
|
32
56
|
|
|
33
57
|
export isFile = (fullpath) ->
|
|
@@ -80,26 +104,6 @@ export getFullPath = (filepath) ->
|
|
|
80
104
|
|
|
81
105
|
return mkpath(pathlib.resolve(filepath))
|
|
82
106
|
|
|
83
|
-
# ---------------------------------------------------------------------------
|
|
84
|
-
# backup - back up a file
|
|
85
|
-
|
|
86
|
-
# --- If report is true, missing source files are not an error
|
|
87
|
-
# but both missing source files and successful copies
|
|
88
|
-
# are reported via LOG
|
|
89
|
-
|
|
90
|
-
export backup = (file, from, to, report=false) ->
|
|
91
|
-
src = mkpath(from, file)
|
|
92
|
-
dest = mkpath(to, file)
|
|
93
|
-
|
|
94
|
-
if report
|
|
95
|
-
if fs.existsSync(src)
|
|
96
|
-
LOG "OK #{file}"
|
|
97
|
-
fs.copyFileSync(src, dest)
|
|
98
|
-
else
|
|
99
|
-
LOG "MISSING #{src}"
|
|
100
|
-
else
|
|
101
|
-
fs.copyFileSync(src, dest)
|
|
102
|
-
|
|
103
107
|
# ---------------------------------------------------------------------------
|
|
104
108
|
|
|
105
109
|
export forEachLineInFile = (filepath, func) ->
|
|
@@ -249,25 +253,27 @@ export forEachFile = (dir, cb, filt=undef, level=0) ->
|
|
|
249
253
|
|
|
250
254
|
# ---------------------------------------------------------------------------
|
|
251
255
|
|
|
252
|
-
export pathTo = (fname,
|
|
256
|
+
export pathTo = (fname, searchDir, direction="down") ->
|
|
253
257
|
|
|
254
|
-
debug "enter pathTo('#{fname}','#{
|
|
255
|
-
|
|
256
|
-
|
|
258
|
+
debug "enter pathTo('#{fname}','#{searchDir}','#{direction}')"
|
|
259
|
+
if ! searchDir
|
|
260
|
+
searchDir = process.cwd()
|
|
261
|
+
assert fs.existsSync(searchDir), "Directory #{searchDir} does not exist"
|
|
262
|
+
filepath = mkpath(searchDir, fname)
|
|
257
263
|
if fs.existsSync(filepath)
|
|
258
264
|
debug "return from pathTo: #{filepath} - file exists"
|
|
259
265
|
return filepath
|
|
260
266
|
else if (direction == 'down')
|
|
261
267
|
# --- Search all directories in this directory
|
|
262
268
|
# getSubDirs() returns dirs sorted alphabetically
|
|
263
|
-
for subdir in getSubDirs(
|
|
264
|
-
dirpath = mkpath(
|
|
269
|
+
for subdir in getSubDirs(searchDir)
|
|
270
|
+
dirpath = mkpath(searchDir, subdir)
|
|
265
271
|
debug "check #{dirpath}"
|
|
266
272
|
if fpath = pathTo(fname, dirpath)
|
|
267
273
|
debug "return from pathTo: #{fpath}"
|
|
268
274
|
return fpath
|
|
269
275
|
else if (direction == 'up')
|
|
270
|
-
while dirpath = getParentDir(
|
|
276
|
+
while dirpath = getParentDir(searchDir)
|
|
271
277
|
debug "check #{dirpath}"
|
|
272
278
|
filepath = mkpath(dirpath, fname)
|
|
273
279
|
if fs.existsSync(filepath)
|
|
@@ -283,6 +289,8 @@ export pathTo = (fname, dir, direction="down") ->
|
|
|
283
289
|
export allPathsTo = (fname, searchDir) ->
|
|
284
290
|
# --- Only searches upward
|
|
285
291
|
|
|
292
|
+
if ! searchDir
|
|
293
|
+
searchDir = process.cwd()
|
|
286
294
|
path = pathTo(fname, searchDir, "up")
|
|
287
295
|
if path?
|
|
288
296
|
lPaths = [path] # --- build an array of paths
|
|
@@ -334,43 +342,54 @@ export shortenPath = (path) ->
|
|
|
334
342
|
export parseSource = (source) ->
|
|
335
343
|
# --- returns {
|
|
336
344
|
# dir
|
|
337
|
-
# filename
|
|
345
|
+
# filename
|
|
338
346
|
# stub
|
|
339
347
|
# ext
|
|
340
348
|
# }
|
|
349
|
+
# --- NOTE: source may be a file URL, e.g. import.meta.url
|
|
341
350
|
|
|
342
351
|
debug "enter parseSource()"
|
|
352
|
+
assert isString(source), "parseSource(): source not a string"
|
|
343
353
|
if source == 'unit test'
|
|
354
|
+
croak "A source of 'unit test' is deprecated"
|
|
355
|
+
if source.match(/^file\:\/\//)
|
|
356
|
+
source = urllib.fileURLToPath(source)
|
|
357
|
+
|
|
358
|
+
hInfo = pathlib.parse(source)
|
|
359
|
+
if hInfo.dir
|
|
360
|
+
dir = mkpath(hInfo.dir) # change \ to /
|
|
344
361
|
hSourceInfo = {
|
|
345
|
-
|
|
346
|
-
|
|
362
|
+
dir
|
|
363
|
+
fullpath: mkpath(dir, hInfo.base)
|
|
364
|
+
filename: hInfo.base
|
|
365
|
+
stub: hInfo.name
|
|
366
|
+
ext: hInfo.ext
|
|
347
367
|
}
|
|
348
|
-
|
|
349
|
-
return hSourceInfo
|
|
350
|
-
try
|
|
351
|
-
hInfo = pathlib.parse(source)
|
|
352
|
-
if hInfo.dir
|
|
353
|
-
dir = mkpath(hInfo.dir) # change \ to /
|
|
354
|
-
hSourceInfo = {
|
|
355
|
-
dir
|
|
356
|
-
fullpath: mkpath(dir, hInfo.base)
|
|
357
|
-
filename: hInfo.base
|
|
358
|
-
stub: hInfo.name
|
|
359
|
-
ext: hInfo.ext
|
|
360
|
-
}
|
|
361
|
-
else
|
|
362
|
-
hSourceInfo = {
|
|
363
|
-
filename: hInfo.base
|
|
364
|
-
stub: hInfo.name
|
|
365
|
-
ext: hInfo.ext
|
|
366
|
-
}
|
|
367
|
-
debug "return from parseSource()", hSourceInfo
|
|
368
|
-
return hSourceInfo
|
|
369
|
-
catch err
|
|
368
|
+
else
|
|
370
369
|
hSourceInfo = {
|
|
371
|
-
filename:
|
|
372
|
-
stub:
|
|
373
|
-
|
|
370
|
+
filename: hInfo.base
|
|
371
|
+
stub: hInfo.name
|
|
372
|
+
ext: hInfo.ext
|
|
374
373
|
}
|
|
375
|
-
|
|
376
|
-
|
|
374
|
+
debug "return from parseSource()", hSourceInfo
|
|
375
|
+
return hSourceInfo
|
|
376
|
+
|
|
377
|
+
# ---------------------------------------------------------------------------
|
|
378
|
+
# backup - back up a file
|
|
379
|
+
|
|
380
|
+
# --- If report is true, missing source files are not an error
|
|
381
|
+
# but both missing source files and successful copies
|
|
382
|
+
# are reported via LOG
|
|
383
|
+
|
|
384
|
+
export backup = (file, from, to, report=false) ->
|
|
385
|
+
src = mkpath(from, file)
|
|
386
|
+
dest = mkpath(to, file)
|
|
387
|
+
|
|
388
|
+
if report
|
|
389
|
+
if fs.existsSync(src)
|
|
390
|
+
LOG "OK #{file}"
|
|
391
|
+
fs.copyFileSync(src, dest)
|
|
392
|
+
else
|
|
393
|
+
LOG "MISSING #{src}"
|
|
394
|
+
else
|
|
395
|
+
fs.copyFileSync(src, dest)
|
package/src/fs_utils.js
CHANGED
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
} from '@jdeighan/coffee-utils/block';
|
|
40
40
|
|
|
41
41
|
// ---------------------------------------------------------------------------
|
|
42
|
-
// mydir() - pass argument
|
|
42
|
+
// mydir() - pass argument import.meta.url and it will return
|
|
43
43
|
// the directory your file is in
|
|
44
44
|
export var mydir = function(url) {
|
|
45
45
|
var dir, final, path;
|
|
@@ -53,6 +53,30 @@ export var mydir = function(url) {
|
|
|
53
53
|
return final;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// myfile() - pass argument import.meta.url and it will return
|
|
58
|
+
// the name of your file
|
|
59
|
+
export var myfile = function(url) {
|
|
60
|
+
var filename, path;
|
|
61
|
+
debug(`url = ${url}`);
|
|
62
|
+
path = urllib.fileURLToPath(url);
|
|
63
|
+
debug(`path = ${path}`);
|
|
64
|
+
filename = pathlib.parse(path).base;
|
|
65
|
+
debug(`filename = ${filename}`);
|
|
66
|
+
return filename;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// myfullpath() - pass argument import.meta.url and it will return
|
|
71
|
+
// the full path to your file
|
|
72
|
+
export var myfullpath = function(url) {
|
|
73
|
+
var path;
|
|
74
|
+
debug(`url = ${url}`);
|
|
75
|
+
path = urllib.fileURLToPath(url);
|
|
76
|
+
debug(`path = ${path}`);
|
|
77
|
+
return mkpath(path);
|
|
78
|
+
};
|
|
79
|
+
|
|
56
80
|
// ---------------------------------------------------------------------------
|
|
57
81
|
export var isFile = function(fullpath) {
|
|
58
82
|
return fs.lstatSync(fullpath).isFile();
|
|
@@ -106,28 +130,6 @@ export var getFullPath = function(filepath) {
|
|
|
106
130
|
return mkpath(pathlib.resolve(filepath));
|
|
107
131
|
};
|
|
108
132
|
|
|
109
|
-
// ---------------------------------------------------------------------------
|
|
110
|
-
// backup - back up a file
|
|
111
|
-
|
|
112
|
-
// --- If report is true, missing source files are not an error
|
|
113
|
-
// but both missing source files and successful copies
|
|
114
|
-
// are reported via LOG
|
|
115
|
-
export var backup = function(file, from, to, report = false) {
|
|
116
|
-
var dest, src;
|
|
117
|
-
src = mkpath(from, file);
|
|
118
|
-
dest = mkpath(to, file);
|
|
119
|
-
if (report) {
|
|
120
|
-
if (fs.existsSync(src)) {
|
|
121
|
-
LOG(`OK ${file}`);
|
|
122
|
-
return fs.copyFileSync(src, dest);
|
|
123
|
-
} else {
|
|
124
|
-
return LOG(`MISSING ${src}`);
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
return fs.copyFileSync(src, dest);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
|
|
131
133
|
// ---------------------------------------------------------------------------
|
|
132
134
|
export var forEachLineInFile = function(filepath, func) {
|
|
133
135
|
var buffer, line, nLines, reader;
|
|
@@ -302,21 +304,24 @@ export var forEachFile = function(dir, cb, filt = undef, level = 0) {
|
|
|
302
304
|
};
|
|
303
305
|
|
|
304
306
|
// ---------------------------------------------------------------------------
|
|
305
|
-
export var pathTo = function(fname,
|
|
307
|
+
export var pathTo = function(fname, searchDir, direction = "down") {
|
|
306
308
|
var dirpath, filepath, fpath, i, len, ref, subdir;
|
|
307
|
-
debug(`enter pathTo('${fname}','${
|
|
308
|
-
|
|
309
|
-
|
|
309
|
+
debug(`enter pathTo('${fname}','${searchDir}','${direction}')`);
|
|
310
|
+
if (!searchDir) {
|
|
311
|
+
searchDir = process.cwd();
|
|
312
|
+
}
|
|
313
|
+
assert(fs.existsSync(searchDir), `Directory ${searchDir} does not exist`);
|
|
314
|
+
filepath = mkpath(searchDir, fname);
|
|
310
315
|
if (fs.existsSync(filepath)) {
|
|
311
316
|
debug(`return from pathTo: ${filepath} - file exists`);
|
|
312
317
|
return filepath;
|
|
313
318
|
} else if (direction === 'down') {
|
|
314
|
-
ref = getSubDirs(
|
|
319
|
+
ref = getSubDirs(searchDir);
|
|
315
320
|
// --- Search all directories in this directory
|
|
316
321
|
// getSubDirs() returns dirs sorted alphabetically
|
|
317
322
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
318
323
|
subdir = ref[i];
|
|
319
|
-
dirpath = mkpath(
|
|
324
|
+
dirpath = mkpath(searchDir, subdir);
|
|
320
325
|
debug(`check ${dirpath}`);
|
|
321
326
|
if (fpath = pathTo(fname, dirpath)) {
|
|
322
327
|
debug(`return from pathTo: ${fpath}`);
|
|
@@ -324,7 +329,7 @@ export var pathTo = function(fname, dir, direction = "down") {
|
|
|
324
329
|
}
|
|
325
330
|
}
|
|
326
331
|
} else if (direction === 'up') {
|
|
327
|
-
while (dirpath = getParentDir(
|
|
332
|
+
while (dirpath = getParentDir(searchDir)) {
|
|
328
333
|
debug(`check ${dirpath}`);
|
|
329
334
|
filepath = mkpath(dirpath, fname);
|
|
330
335
|
if (fs.existsSync(filepath)) {
|
|
@@ -342,7 +347,9 @@ export var pathTo = function(fname, dir, direction = "down") {
|
|
|
342
347
|
// ---------------------------------------------------------------------------
|
|
343
348
|
export var allPathsTo = function(fname, searchDir) {
|
|
344
349
|
var h, lPaths, path;
|
|
345
|
-
|
|
350
|
+
if (!searchDir) {
|
|
351
|
+
searchDir = process.cwd();
|
|
352
|
+
}
|
|
346
353
|
path = pathTo(fname, searchDir, "up");
|
|
347
354
|
if (path != null) {
|
|
348
355
|
lPaths = [path]; // --- build an array of paths
|
|
@@ -394,50 +401,61 @@ export var shortenPath = function(path) {
|
|
|
394
401
|
|
|
395
402
|
// ---------------------------------------------------------------------------
|
|
396
403
|
export var parseSource = function(source) {
|
|
397
|
-
var dir,
|
|
404
|
+
var dir, hInfo, hSourceInfo;
|
|
398
405
|
// --- returns {
|
|
399
406
|
// dir
|
|
400
|
-
// filename
|
|
407
|
+
// filename
|
|
401
408
|
// stub
|
|
402
409
|
// ext
|
|
403
410
|
// }
|
|
411
|
+
// --- NOTE: source may be a file URL, e.g. import.meta.url
|
|
404
412
|
debug("enter parseSource()");
|
|
413
|
+
assert(isString(source), "parseSource(): source not a string");
|
|
405
414
|
if (source === 'unit test') {
|
|
415
|
+
croak("A source of 'unit test' is deprecated");
|
|
416
|
+
}
|
|
417
|
+
if (source.match(/^file\:\/\//)) {
|
|
418
|
+
source = urllib.fileURLToPath(source);
|
|
419
|
+
}
|
|
420
|
+
hInfo = pathlib.parse(source);
|
|
421
|
+
if (hInfo.dir) {
|
|
422
|
+
dir = mkpath(hInfo.dir); // change \ to /
|
|
423
|
+
hSourceInfo = {
|
|
424
|
+
dir,
|
|
425
|
+
fullpath: mkpath(dir, hInfo.base),
|
|
426
|
+
filename: hInfo.base,
|
|
427
|
+
stub: hInfo.name,
|
|
428
|
+
ext: hInfo.ext
|
|
429
|
+
};
|
|
430
|
+
} else {
|
|
406
431
|
hSourceInfo = {
|
|
407
|
-
filename:
|
|
408
|
-
stub:
|
|
432
|
+
filename: hInfo.base,
|
|
433
|
+
stub: hInfo.name,
|
|
434
|
+
ext: hInfo.ext
|
|
409
435
|
};
|
|
410
|
-
debug("return from parseSource()", hSourceInfo);
|
|
411
|
-
return hSourceInfo;
|
|
412
436
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
437
|
+
debug("return from parseSource()", hSourceInfo);
|
|
438
|
+
return hSourceInfo;
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
// ---------------------------------------------------------------------------
|
|
442
|
+
// backup - back up a file
|
|
443
|
+
|
|
444
|
+
// --- If report is true, missing source files are not an error
|
|
445
|
+
// but both missing source files and successful copies
|
|
446
|
+
// are reported via LOG
|
|
447
|
+
export var backup = function(file, from, to, report = false) {
|
|
448
|
+
var dest, src;
|
|
449
|
+
src = mkpath(from, file);
|
|
450
|
+
dest = mkpath(to, file);
|
|
451
|
+
if (report) {
|
|
452
|
+
if (fs.existsSync(src)) {
|
|
453
|
+
LOG(`OK ${file}`);
|
|
454
|
+
return fs.copyFileSync(src, dest);
|
|
424
455
|
} else {
|
|
425
|
-
|
|
426
|
-
filename: hInfo.base,
|
|
427
|
-
stub: hInfo.name,
|
|
428
|
-
ext: hInfo.ext
|
|
429
|
-
};
|
|
456
|
+
return LOG(`MISSING ${src}`);
|
|
430
457
|
}
|
|
431
|
-
|
|
432
|
-
return
|
|
433
|
-
} catch (error1) {
|
|
434
|
-
err = error1;
|
|
435
|
-
hSourceInfo = {
|
|
436
|
-
filename: source,
|
|
437
|
-
stub: source,
|
|
438
|
-
error: err.message
|
|
439
|
-
};
|
|
440
|
-
debug(`return '${err.message} from parseSource()`, hSourceInfo);
|
|
441
|
-
return hSourceInfo;
|
|
458
|
+
} else {
|
|
459
|
+
return fs.copyFileSync(src, dest);
|
|
442
460
|
}
|
|
443
461
|
};
|