@jdeighan/coffee-utils 7.0.21 → 7.0.24
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/coffee_utils.coffee +25 -1
- package/src/coffee_utils.js +27 -2
- package/src/fs_utils.coffee +36 -14
- package/src/fs_utils.js +42 -14
package/package.json
CHANGED
package/src/coffee_utils.coffee
CHANGED
@@ -202,6 +202,19 @@ export isInteger = (x) ->
|
|
202
202
|
|
203
203
|
# ---------------------------------------------------------------------------
|
204
204
|
|
205
|
+
export isUniqueList = (lItems) ->
|
206
|
+
|
207
|
+
if ! lItems?
|
208
|
+
return true # empty list is unique
|
209
|
+
h = {}
|
210
|
+
for item in lItems
|
211
|
+
if h[item]
|
212
|
+
return false
|
213
|
+
h[item] = 1
|
214
|
+
return true
|
215
|
+
|
216
|
+
# ---------------------------------------------------------------------------
|
217
|
+
|
205
218
|
export uniq = (lItems) ->
|
206
219
|
|
207
220
|
return [...new Set(lItems)]
|
@@ -384,6 +397,17 @@ export strcat = (lItems...) ->
|
|
384
397
|
|
385
398
|
export replaceVars = (line, hVars={}, rx=/__(env\.)?([A-Za-z_]\w*)__/g) ->
|
386
399
|
|
400
|
+
assert isHash(hVars), "replaceVars() hVars is not a hash"
|
401
|
+
|
387
402
|
replacerFunc = (match, prefix, name) =>
|
388
|
-
|
403
|
+
if prefix
|
404
|
+
result = process.env[name]
|
405
|
+
else if ! hVars[name]?
|
406
|
+
result = 'undef'
|
407
|
+
else
|
408
|
+
result = hVars[name]
|
409
|
+
if ! isString(result)
|
410
|
+
result = JSON.stringify(result)
|
411
|
+
return result
|
412
|
+
|
389
413
|
return line.replace(rx, replacerFunc)
|
package/src/coffee_utils.js
CHANGED
@@ -202,6 +202,23 @@ export var isInteger = function(x) {
|
|
202
202
|
}
|
203
203
|
};
|
204
204
|
|
205
|
+
// ---------------------------------------------------------------------------
|
206
|
+
export var isUniqueList = function(lItems) {
|
207
|
+
var h, i, item, len;
|
208
|
+
if (lItems == null) {
|
209
|
+
return true; // empty list is unique
|
210
|
+
}
|
211
|
+
h = {};
|
212
|
+
for (i = 0, len = lItems.length; i < len; i++) {
|
213
|
+
item = lItems[i];
|
214
|
+
if (h[item]) {
|
215
|
+
return false;
|
216
|
+
}
|
217
|
+
h[item] = 1;
|
218
|
+
}
|
219
|
+
return true;
|
220
|
+
};
|
221
|
+
|
205
222
|
// ---------------------------------------------------------------------------
|
206
223
|
export var uniq = function(lItems) {
|
207
224
|
return [...new Set(lItems)];
|
@@ -412,12 +429,20 @@ export var strcat = function(...lItems) {
|
|
412
429
|
// ---------------------------------------------------------------------------
|
413
430
|
export var replaceVars = function(line, hVars = {}, rx = /__(env\.)?([A-Za-z_]\w*)__/g) {
|
414
431
|
var replacerFunc;
|
432
|
+
assert(isHash(hVars), "replaceVars() hVars is not a hash");
|
415
433
|
replacerFunc = (match, prefix, name) => {
|
434
|
+
var result;
|
416
435
|
if (prefix) {
|
417
|
-
|
436
|
+
result = process.env[name];
|
437
|
+
} else if (hVars[name] == null) {
|
438
|
+
result = 'undef';
|
418
439
|
} else {
|
419
|
-
|
440
|
+
result = hVars[name];
|
441
|
+
if (!isString(result)) {
|
442
|
+
result = JSON.stringify(result);
|
443
|
+
}
|
420
444
|
}
|
445
|
+
return result;
|
421
446
|
};
|
422
447
|
return line.replace(rx, replacerFunc);
|
423
448
|
};
|
package/src/fs_utils.coffee
CHANGED
@@ -62,7 +62,12 @@ export isFile = (fullpath) ->
|
|
62
62
|
|
63
63
|
export isDir = (fullpath) ->
|
64
64
|
|
65
|
-
|
65
|
+
try
|
66
|
+
obj = fs.lstatSync(fullpath)
|
67
|
+
if !obj? then return false
|
68
|
+
return obj.isDirectory()
|
69
|
+
catch
|
70
|
+
return false
|
66
71
|
|
67
72
|
# ---------------------------------------------------------------------------
|
68
73
|
|
@@ -73,6 +78,16 @@ export isSimpleFileName = (path) ->
|
|
73
78
|
|
74
79
|
# ---------------------------------------------------------------------------
|
75
80
|
|
81
|
+
export fileStub = (path) ->
|
82
|
+
|
83
|
+
assert isString(path), "fileExt(): path not a string"
|
84
|
+
if lMatches = path.match(/^(.*)\.[A-Za-z0-9_]+$/)
|
85
|
+
return lMatches[1]
|
86
|
+
else
|
87
|
+
return ''
|
88
|
+
|
89
|
+
# ---------------------------------------------------------------------------
|
90
|
+
|
76
91
|
export fileExt = (path) ->
|
77
92
|
|
78
93
|
assert isString(path), "fileExt(): path not a string"
|
@@ -343,6 +358,7 @@ export parseSource = (source) ->
|
|
343
358
|
# --- returns {
|
344
359
|
# dir
|
345
360
|
# filename
|
361
|
+
# fullpath
|
346
362
|
# stub
|
347
363
|
# ext
|
348
364
|
# }
|
@@ -356,22 +372,28 @@ export parseSource = (source) ->
|
|
356
372
|
if source.match(/^file\:\/\//)
|
357
373
|
source = urllib.fileURLToPath(source)
|
358
374
|
|
359
|
-
|
360
|
-
if hInfo.dir
|
361
|
-
dir = mkpath(hInfo.dir) # change \ to /
|
375
|
+
if isDir(source)
|
362
376
|
hSourceInfo = {
|
363
|
-
dir
|
364
|
-
fullpath:
|
365
|
-
filename: hInfo.base
|
366
|
-
stub: hInfo.name
|
367
|
-
ext: hInfo.ext
|
377
|
+
dir: source
|
378
|
+
fullpath: source
|
368
379
|
}
|
369
380
|
else
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
381
|
+
hInfo = pathlib.parse(source)
|
382
|
+
if hInfo.dir
|
383
|
+
dir = mkpath(hInfo.dir) # change \ to /
|
384
|
+
hSourceInfo = {
|
385
|
+
dir
|
386
|
+
fullpath: mkpath(dir, hInfo.base)
|
387
|
+
filename: hInfo.base
|
388
|
+
stub: hInfo.name
|
389
|
+
ext: hInfo.ext
|
390
|
+
}
|
391
|
+
else
|
392
|
+
hSourceInfo = {
|
393
|
+
filename: hInfo.base
|
394
|
+
stub: hInfo.name
|
395
|
+
ext: hInfo.ext
|
396
|
+
}
|
375
397
|
debug "return from parseSource()", hSourceInfo
|
376
398
|
return hSourceInfo
|
377
399
|
|
package/src/fs_utils.js
CHANGED
@@ -85,7 +85,16 @@ export var isFile = function(fullpath) {
|
|
85
85
|
|
86
86
|
// ---------------------------------------------------------------------------
|
87
87
|
export var isDir = function(fullpath) {
|
88
|
-
|
88
|
+
var obj;
|
89
|
+
try {
|
90
|
+
obj = fs.lstatSync(fullpath);
|
91
|
+
if (obj == null) {
|
92
|
+
return false;
|
93
|
+
}
|
94
|
+
return obj.isDirectory();
|
95
|
+
} catch (error1) {
|
96
|
+
return false;
|
97
|
+
}
|
89
98
|
};
|
90
99
|
|
91
100
|
// ---------------------------------------------------------------------------
|
@@ -95,6 +104,17 @@ export var isSimpleFileName = function(path) {
|
|
95
104
|
return !h.root && !h.dir && h.base;
|
96
105
|
};
|
97
106
|
|
107
|
+
// ---------------------------------------------------------------------------
|
108
|
+
export var fileStub = function(path) {
|
109
|
+
var lMatches;
|
110
|
+
assert(isString(path), "fileExt(): path not a string");
|
111
|
+
if (lMatches = path.match(/^(.*)\.[A-Za-z0-9_]+$/)) {
|
112
|
+
return lMatches[1];
|
113
|
+
} else {
|
114
|
+
return '';
|
115
|
+
}
|
116
|
+
};
|
117
|
+
|
98
118
|
// ---------------------------------------------------------------------------
|
99
119
|
export var fileExt = function(path) {
|
100
120
|
var lMatches;
|
@@ -406,6 +426,7 @@ export var parseSource = function(source) {
|
|
406
426
|
// --- returns {
|
407
427
|
// dir
|
408
428
|
// filename
|
429
|
+
// fullpath
|
409
430
|
// stub
|
410
431
|
// ext
|
411
432
|
// }
|
@@ -418,22 +439,29 @@ export var parseSource = function(source) {
|
|
418
439
|
if (source.match(/^file\:\/\//)) {
|
419
440
|
source = urllib.fileURLToPath(source);
|
420
441
|
}
|
421
|
-
|
422
|
-
if (hInfo.dir) {
|
423
|
-
dir = mkpath(hInfo.dir); // change \ to /
|
442
|
+
if (isDir(source)) {
|
424
443
|
hSourceInfo = {
|
425
|
-
dir,
|
426
|
-
fullpath:
|
427
|
-
filename: hInfo.base,
|
428
|
-
stub: hInfo.name,
|
429
|
-
ext: hInfo.ext
|
444
|
+
dir: source,
|
445
|
+
fullpath: source
|
430
446
|
};
|
431
447
|
} else {
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
448
|
+
hInfo = pathlib.parse(source);
|
449
|
+
if (hInfo.dir) {
|
450
|
+
dir = mkpath(hInfo.dir); // change \ to /
|
451
|
+
hSourceInfo = {
|
452
|
+
dir,
|
453
|
+
fullpath: mkpath(dir, hInfo.base),
|
454
|
+
filename: hInfo.base,
|
455
|
+
stub: hInfo.name,
|
456
|
+
ext: hInfo.ext
|
457
|
+
};
|
458
|
+
} else {
|
459
|
+
hSourceInfo = {
|
460
|
+
filename: hInfo.base,
|
461
|
+
stub: hInfo.name,
|
462
|
+
ext: hInfo.ext
|
463
|
+
};
|
464
|
+
}
|
437
465
|
}
|
438
466
|
debug("return from parseSource()", hSourceInfo);
|
439
467
|
return hSourceInfo;
|