@jdeighan/coffee-utils 10.0.12 → 10.0.15
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 +3 -3
- package/src/coffee_utils.coffee +30 -0
- package/src/coffee_utils.js +53 -20
- package/src/taml.coffee +14 -1
- package/src/taml.js +17 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jdeighan/coffee-utils",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "10.0.
|
|
4
|
+
"version": "10.0.15",
|
|
5
5
|
"description": "A set of utility functions for CoffeeScript",
|
|
6
6
|
"main": "coffee_utils.js",
|
|
7
7
|
"exports": {
|
|
@@ -54,9 +54,9 @@
|
|
|
54
54
|
"js-yaml": "^4.1.0",
|
|
55
55
|
"n-readlines": "^1.0.1",
|
|
56
56
|
"readline-sync": "^1.4.10",
|
|
57
|
-
"svelte": "^3.
|
|
57
|
+
"svelte": "^3.50.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@jdeighan/unit-tester": "^2.0.
|
|
60
|
+
"@jdeighan/unit-tester": "^2.0.24"
|
|
61
61
|
}
|
|
62
62
|
}
|
package/src/coffee_utils.coffee
CHANGED
|
@@ -21,6 +21,30 @@ export isComment = (line) ->
|
|
|
21
21
|
|
|
22
22
|
# ---------------------------------------------------------------------------
|
|
23
23
|
|
|
24
|
+
export chomp = (str) ->
|
|
25
|
+
|
|
26
|
+
len = str.length
|
|
27
|
+
if (len == 0)
|
|
28
|
+
return ''
|
|
29
|
+
else if (len == 1)
|
|
30
|
+
if (str == "\r") || (str == "\n")
|
|
31
|
+
return ''
|
|
32
|
+
else
|
|
33
|
+
return str
|
|
34
|
+
else
|
|
35
|
+
# --- check the last 2 characters
|
|
36
|
+
tail = str.substring(len-2)
|
|
37
|
+
if (tail == "\r\n")
|
|
38
|
+
return str.substring(0, len-2)
|
|
39
|
+
else
|
|
40
|
+
tail = str.substring(len-1)
|
|
41
|
+
if (tail == "\n")
|
|
42
|
+
return str.substring(0, len-1)
|
|
43
|
+
else
|
|
44
|
+
return str
|
|
45
|
+
|
|
46
|
+
# ---------------------------------------------------------------------------
|
|
47
|
+
|
|
24
48
|
export isSubclassOf = (subClass, superClass) ->
|
|
25
49
|
|
|
26
50
|
return (subClass == superClass) \
|
|
@@ -61,6 +85,12 @@ export charCount = (str, ch) ->
|
|
|
61
85
|
|
|
62
86
|
# ---------------------------------------------------------------------------
|
|
63
87
|
|
|
88
|
+
export oneof = (word, lWords...) ->
|
|
89
|
+
|
|
90
|
+
return (lWords.indexOf(word) >= 0)
|
|
91
|
+
|
|
92
|
+
# ---------------------------------------------------------------------------
|
|
93
|
+
|
|
64
94
|
export isConstructor = (f) ->
|
|
65
95
|
|
|
66
96
|
try
|
package/src/coffee_utils.js
CHANGED
|
@@ -27,6 +27,34 @@ export var isComment = function(line) {
|
|
|
27
27
|
return defined(lMatches);
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export var chomp = function(str) {
|
|
32
|
+
var len, tail;
|
|
33
|
+
len = str.length;
|
|
34
|
+
if (len === 0) {
|
|
35
|
+
return '';
|
|
36
|
+
} else if (len === 1) {
|
|
37
|
+
if ((str === "\r") || (str === "\n")) {
|
|
38
|
+
return '';
|
|
39
|
+
} else {
|
|
40
|
+
return str;
|
|
41
|
+
}
|
|
42
|
+
} else {
|
|
43
|
+
// --- check the last 2 characters
|
|
44
|
+
tail = str.substring(len - 2);
|
|
45
|
+
if (tail === "\r\n") {
|
|
46
|
+
return str.substring(0, len - 2);
|
|
47
|
+
} else {
|
|
48
|
+
tail = str.substring(len - 1);
|
|
49
|
+
if (tail === "\n") {
|
|
50
|
+
return str.substring(0, len - 1);
|
|
51
|
+
} else {
|
|
52
|
+
return str;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
30
58
|
// ---------------------------------------------------------------------------
|
|
31
59
|
export var isSubclassOf = function(subClass, superClass) {
|
|
32
60
|
return (subClass === superClass) || (subClass.prototype instanceof superClass);
|
|
@@ -65,6 +93,11 @@ export var charCount = function(str, ch) {
|
|
|
65
93
|
return count;
|
|
66
94
|
};
|
|
67
95
|
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
export var oneof = function(word, ...lWords) {
|
|
98
|
+
return lWords.indexOf(word) >= 0;
|
|
99
|
+
};
|
|
100
|
+
|
|
68
101
|
// ---------------------------------------------------------------------------
|
|
69
102
|
export var isConstructor = function(f) {
|
|
70
103
|
var err;
|
|
@@ -168,13 +201,13 @@ export var isNonEmptyArray = function(x) {
|
|
|
168
201
|
|
|
169
202
|
// ---------------------------------------------------------------------------
|
|
170
203
|
export var isHash = function(x, lKeys) {
|
|
171
|
-
var i, key,
|
|
204
|
+
var i, key, len1;
|
|
172
205
|
if (!x || (getClassName(x) !== 'Object')) {
|
|
173
206
|
return false;
|
|
174
207
|
}
|
|
175
208
|
if (defined(lKeys)) {
|
|
176
209
|
assert(isArray(lKeys), "isHash(): lKeys not an array");
|
|
177
|
-
for (i = 0,
|
|
210
|
+
for (i = 0, len1 = lKeys.length; i < len1; i++) {
|
|
178
211
|
key = lKeys[i];
|
|
179
212
|
if (!x.hasOwnProperty(key)) {
|
|
180
213
|
return false;
|
|
@@ -262,11 +295,11 @@ export var words = function(str) {
|
|
|
262
295
|
|
|
263
296
|
// ---------------------------------------------------------------------------
|
|
264
297
|
export var isArrayOfHashes = function(lItems) {
|
|
265
|
-
var i, item,
|
|
298
|
+
var i, item, len1;
|
|
266
299
|
if (!isArray(lItems)) {
|
|
267
300
|
return false;
|
|
268
301
|
}
|
|
269
|
-
for (i = 0,
|
|
302
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
|
270
303
|
item = lItems[i];
|
|
271
304
|
if (!isHash(item)) {
|
|
272
305
|
return false;
|
|
@@ -277,11 +310,11 @@ export var isArrayOfHashes = function(lItems) {
|
|
|
277
310
|
|
|
278
311
|
// ---------------------------------------------------------------------------
|
|
279
312
|
export var isArrayOfStrings = function(lItems) {
|
|
280
|
-
var i, item,
|
|
313
|
+
var i, item, len1;
|
|
281
314
|
if (!isArray(lItems)) {
|
|
282
315
|
return false;
|
|
283
316
|
}
|
|
284
|
-
for (i = 0,
|
|
317
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
|
285
318
|
item = lItems[i];
|
|
286
319
|
if (!isString(item)) {
|
|
287
320
|
return false;
|
|
@@ -340,7 +373,7 @@ export var isInteger = function(x, hOptions = {}) {
|
|
|
340
373
|
|
|
341
374
|
// ---------------------------------------------------------------------------
|
|
342
375
|
export var isUniqueList = function(lItems, func = undef) {
|
|
343
|
-
var h, i, item,
|
|
376
|
+
var h, i, item, len1;
|
|
344
377
|
if (lItems == null) {
|
|
345
378
|
return true; // empty list is unique
|
|
346
379
|
}
|
|
@@ -348,7 +381,7 @@ export var isUniqueList = function(lItems, func = undef) {
|
|
|
348
381
|
assert(isFunction(func), `Not a function: ${OL(func)}`);
|
|
349
382
|
}
|
|
350
383
|
h = {};
|
|
351
|
-
for (i = 0,
|
|
384
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
|
352
385
|
item = lItems[i];
|
|
353
386
|
if (defined(func) && !func(item)) {
|
|
354
387
|
return false;
|
|
@@ -363,14 +396,14 @@ export var isUniqueList = function(lItems, func = undef) {
|
|
|
363
396
|
|
|
364
397
|
// ---------------------------------------------------------------------------
|
|
365
398
|
export var isUniqueTree = function(lItems, func = undef, hFound = {}) {
|
|
366
|
-
var i, item,
|
|
399
|
+
var i, item, len1;
|
|
367
400
|
if (isEmpty(lItems)) {
|
|
368
401
|
return true; // empty list is unique
|
|
369
402
|
}
|
|
370
403
|
if (defined(func)) {
|
|
371
404
|
assert(isFunction(func), `Not a function: ${OL(func)}`);
|
|
372
405
|
}
|
|
373
|
-
for (i = 0,
|
|
406
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
|
374
407
|
item = lItems[i];
|
|
375
408
|
if (isArray(item)) {
|
|
376
409
|
if (!isUniqueTree(item, func, hFound)) {
|
|
@@ -487,10 +520,10 @@ export var escapeStr = function(str, hEscape = hDefEsc) {
|
|
|
487
520
|
var ch, lParts;
|
|
488
521
|
assert(isString(str), "escapeStr(): not a string");
|
|
489
522
|
lParts = (function() {
|
|
490
|
-
var i,
|
|
523
|
+
var i, len1, ref, results;
|
|
491
524
|
ref = str.split('');
|
|
492
525
|
results = [];
|
|
493
|
-
for (i = 0,
|
|
526
|
+
for (i = 0, len1 = ref.length; i < len1; i++) {
|
|
494
527
|
ch = ref[i];
|
|
495
528
|
if (hEscape[ch] != null) {
|
|
496
529
|
results.push(hEscape[ch]);
|
|
@@ -534,9 +567,9 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
|
534
567
|
var lConverted, lStrings, str;
|
|
535
568
|
lStrings = [...line.matchAll(regexp)];
|
|
536
569
|
lStrings = (function() {
|
|
537
|
-
var i,
|
|
570
|
+
var i, len1, results;
|
|
538
571
|
results = [];
|
|
539
|
-
for (i = 0,
|
|
572
|
+
for (i = 0, len1 = lStrings.length; i < len1; i++) {
|
|
540
573
|
str = lStrings[i];
|
|
541
574
|
results.push(str[0]);
|
|
542
575
|
}
|
|
@@ -544,9 +577,9 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
|
544
577
|
})();
|
|
545
578
|
if (convertFunc != null) {
|
|
546
579
|
lConverted = (function() {
|
|
547
|
-
var i,
|
|
580
|
+
var i, len1, results;
|
|
548
581
|
results = [];
|
|
549
|
-
for (i = 0,
|
|
582
|
+
for (i = 0, len1 = lStrings.length; i < len1; i++) {
|
|
550
583
|
str = lStrings[i];
|
|
551
584
|
results.push(convertFunc(str));
|
|
552
585
|
}
|
|
@@ -560,14 +593,14 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
|
560
593
|
|
|
561
594
|
// ---------------------------------------------------------------------------
|
|
562
595
|
export var envVarsWithPrefix = function(prefix, hOptions = {}) {
|
|
563
|
-
var h, i, key,
|
|
596
|
+
var h, i, key, len1, plen, ref;
|
|
564
597
|
// --- valid options:
|
|
565
598
|
// stripPrefix
|
|
566
599
|
assert(prefix, "envVarsWithPrefix: empty prefix!");
|
|
567
600
|
plen = prefix.length;
|
|
568
601
|
h = {};
|
|
569
602
|
ref = Object.keys(process.env);
|
|
570
|
-
for (i = 0,
|
|
603
|
+
for (i = 0, len1 = ref.length; i < len1; i++) {
|
|
571
604
|
key = ref[i];
|
|
572
605
|
if (key.indexOf(prefix) === 0) {
|
|
573
606
|
if (hOptions.stripPrefix) {
|
|
@@ -598,9 +631,9 @@ export var getDateStr = function(date = undef) {
|
|
|
598
631
|
|
|
599
632
|
// ---------------------------------------------------------------------------
|
|
600
633
|
export var strcat = function(...lItems) {
|
|
601
|
-
var i, item,
|
|
634
|
+
var i, item, len1, str;
|
|
602
635
|
str = '';
|
|
603
|
-
for (i = 0,
|
|
636
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
|
604
637
|
item = lItems[i];
|
|
605
638
|
str += item.toString();
|
|
606
639
|
}
|
package/src/taml.coffee
CHANGED
|
@@ -4,7 +4,7 @@ import yaml from 'js-yaml'
|
|
|
4
4
|
|
|
5
5
|
import {assert, error, croak} from '@jdeighan/unit-tester/utils'
|
|
6
6
|
import {
|
|
7
|
-
undef, oneline, isString,
|
|
7
|
+
undef, oneline, isString, chomp,
|
|
8
8
|
} from '@jdeighan/coffee-utils'
|
|
9
9
|
import {untabify, tabify, splitLine} from '@jdeighan/coffee-utils/indent'
|
|
10
10
|
import {slurp} from '@jdeighan/coffee-utils/fs'
|
|
@@ -58,6 +58,19 @@ export taml = (text) ->
|
|
|
58
58
|
debug "return from taml()"
|
|
59
59
|
return yaml.load(arrayToBlock(lLines), {skipInvalid: true})
|
|
60
60
|
|
|
61
|
+
# ---------------------------------------------------------------------------
|
|
62
|
+
|
|
63
|
+
export fromTAML = taml
|
|
64
|
+
|
|
65
|
+
# ---------------------------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
export toTAML = (x, useTabs=false) ->
|
|
68
|
+
|
|
69
|
+
str = yaml.dump(x, {indent:3})
|
|
70
|
+
if useTabs
|
|
71
|
+
str = str.replace(/ /g, "\t")
|
|
72
|
+
return "---\n" + chomp(str)
|
|
73
|
+
|
|
61
74
|
# ---------------------------------------------------------------------------
|
|
62
75
|
# slurpTAML - read TAML from a file
|
|
63
76
|
|
package/src/taml.js
CHANGED
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
undef,
|
|
15
15
|
oneline,
|
|
16
|
-
isString
|
|
16
|
+
isString,
|
|
17
|
+
chomp
|
|
17
18
|
} from '@jdeighan/coffee-utils';
|
|
18
19
|
|
|
19
20
|
import {
|
|
@@ -84,6 +85,21 @@ export var taml = function(text) {
|
|
|
84
85
|
});
|
|
85
86
|
};
|
|
86
87
|
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
export var fromTAML = taml;
|
|
90
|
+
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
export var toTAML = function(x, useTabs = false) {
|
|
93
|
+
var str;
|
|
94
|
+
str = yaml.dump(x, {
|
|
95
|
+
indent: 3
|
|
96
|
+
});
|
|
97
|
+
if (useTabs) {
|
|
98
|
+
str = str.replace(/ /g, "\t");
|
|
99
|
+
}
|
|
100
|
+
return "---\n" + chomp(str);
|
|
101
|
+
};
|
|
102
|
+
|
|
87
103
|
// ---------------------------------------------------------------------------
|
|
88
104
|
// slurpTAML - read TAML from a file
|
|
89
105
|
export var slurpTAML = function(filepath) {
|