@jdeighan/coffee-utils 10.0.13 → 10.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 +1 -1
- package/src/coffee_utils.coffee +24 -0
- package/src/coffee_utils.js +48 -20
- package/src/taml.coffee +14 -1
- package/src/taml.js +17 -1
package/package.json
CHANGED
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) \
|
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);
|
@@ -173,13 +201,13 @@ export var isNonEmptyArray = function(x) {
|
|
173
201
|
|
174
202
|
// ---------------------------------------------------------------------------
|
175
203
|
export var isHash = function(x, lKeys) {
|
176
|
-
var i, key,
|
204
|
+
var i, key, len1;
|
177
205
|
if (!x || (getClassName(x) !== 'Object')) {
|
178
206
|
return false;
|
179
207
|
}
|
180
208
|
if (defined(lKeys)) {
|
181
209
|
assert(isArray(lKeys), "isHash(): lKeys not an array");
|
182
|
-
for (i = 0,
|
210
|
+
for (i = 0, len1 = lKeys.length; i < len1; i++) {
|
183
211
|
key = lKeys[i];
|
184
212
|
if (!x.hasOwnProperty(key)) {
|
185
213
|
return false;
|
@@ -267,11 +295,11 @@ export var words = function(str) {
|
|
267
295
|
|
268
296
|
// ---------------------------------------------------------------------------
|
269
297
|
export var isArrayOfHashes = function(lItems) {
|
270
|
-
var i, item,
|
298
|
+
var i, item, len1;
|
271
299
|
if (!isArray(lItems)) {
|
272
300
|
return false;
|
273
301
|
}
|
274
|
-
for (i = 0,
|
302
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
275
303
|
item = lItems[i];
|
276
304
|
if (!isHash(item)) {
|
277
305
|
return false;
|
@@ -282,11 +310,11 @@ export var isArrayOfHashes = function(lItems) {
|
|
282
310
|
|
283
311
|
// ---------------------------------------------------------------------------
|
284
312
|
export var isArrayOfStrings = function(lItems) {
|
285
|
-
var i, item,
|
313
|
+
var i, item, len1;
|
286
314
|
if (!isArray(lItems)) {
|
287
315
|
return false;
|
288
316
|
}
|
289
|
-
for (i = 0,
|
317
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
290
318
|
item = lItems[i];
|
291
319
|
if (!isString(item)) {
|
292
320
|
return false;
|
@@ -345,7 +373,7 @@ export var isInteger = function(x, hOptions = {}) {
|
|
345
373
|
|
346
374
|
// ---------------------------------------------------------------------------
|
347
375
|
export var isUniqueList = function(lItems, func = undef) {
|
348
|
-
var h, i, item,
|
376
|
+
var h, i, item, len1;
|
349
377
|
if (lItems == null) {
|
350
378
|
return true; // empty list is unique
|
351
379
|
}
|
@@ -353,7 +381,7 @@ export var isUniqueList = function(lItems, func = undef) {
|
|
353
381
|
assert(isFunction(func), `Not a function: ${OL(func)}`);
|
354
382
|
}
|
355
383
|
h = {};
|
356
|
-
for (i = 0,
|
384
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
357
385
|
item = lItems[i];
|
358
386
|
if (defined(func) && !func(item)) {
|
359
387
|
return false;
|
@@ -368,14 +396,14 @@ export var isUniqueList = function(lItems, func = undef) {
|
|
368
396
|
|
369
397
|
// ---------------------------------------------------------------------------
|
370
398
|
export var isUniqueTree = function(lItems, func = undef, hFound = {}) {
|
371
|
-
var i, item,
|
399
|
+
var i, item, len1;
|
372
400
|
if (isEmpty(lItems)) {
|
373
401
|
return true; // empty list is unique
|
374
402
|
}
|
375
403
|
if (defined(func)) {
|
376
404
|
assert(isFunction(func), `Not a function: ${OL(func)}`);
|
377
405
|
}
|
378
|
-
for (i = 0,
|
406
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
379
407
|
item = lItems[i];
|
380
408
|
if (isArray(item)) {
|
381
409
|
if (!isUniqueTree(item, func, hFound)) {
|
@@ -492,10 +520,10 @@ export var escapeStr = function(str, hEscape = hDefEsc) {
|
|
492
520
|
var ch, lParts;
|
493
521
|
assert(isString(str), "escapeStr(): not a string");
|
494
522
|
lParts = (function() {
|
495
|
-
var i,
|
523
|
+
var i, len1, ref, results;
|
496
524
|
ref = str.split('');
|
497
525
|
results = [];
|
498
|
-
for (i = 0,
|
526
|
+
for (i = 0, len1 = ref.length; i < len1; i++) {
|
499
527
|
ch = ref[i];
|
500
528
|
if (hEscape[ch] != null) {
|
501
529
|
results.push(hEscape[ch]);
|
@@ -539,9 +567,9 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
539
567
|
var lConverted, lStrings, str;
|
540
568
|
lStrings = [...line.matchAll(regexp)];
|
541
569
|
lStrings = (function() {
|
542
|
-
var i,
|
570
|
+
var i, len1, results;
|
543
571
|
results = [];
|
544
|
-
for (i = 0,
|
572
|
+
for (i = 0, len1 = lStrings.length; i < len1; i++) {
|
545
573
|
str = lStrings[i];
|
546
574
|
results.push(str[0]);
|
547
575
|
}
|
@@ -549,9 +577,9 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
549
577
|
})();
|
550
578
|
if (convertFunc != null) {
|
551
579
|
lConverted = (function() {
|
552
|
-
var i,
|
580
|
+
var i, len1, results;
|
553
581
|
results = [];
|
554
|
-
for (i = 0,
|
582
|
+
for (i = 0, len1 = lStrings.length; i < len1; i++) {
|
555
583
|
str = lStrings[i];
|
556
584
|
results.push(convertFunc(str));
|
557
585
|
}
|
@@ -565,14 +593,14 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
565
593
|
|
566
594
|
// ---------------------------------------------------------------------------
|
567
595
|
export var envVarsWithPrefix = function(prefix, hOptions = {}) {
|
568
|
-
var h, i, key,
|
596
|
+
var h, i, key, len1, plen, ref;
|
569
597
|
// --- valid options:
|
570
598
|
// stripPrefix
|
571
599
|
assert(prefix, "envVarsWithPrefix: empty prefix!");
|
572
600
|
plen = prefix.length;
|
573
601
|
h = {};
|
574
602
|
ref = Object.keys(process.env);
|
575
|
-
for (i = 0,
|
603
|
+
for (i = 0, len1 = ref.length; i < len1; i++) {
|
576
604
|
key = ref[i];
|
577
605
|
if (key.indexOf(prefix) === 0) {
|
578
606
|
if (hOptions.stripPrefix) {
|
@@ -603,9 +631,9 @@ export var getDateStr = function(date = undef) {
|
|
603
631
|
|
604
632
|
// ---------------------------------------------------------------------------
|
605
633
|
export var strcat = function(...lItems) {
|
606
|
-
var i, item,
|
634
|
+
var i, item, len1, str;
|
607
635
|
str = '';
|
608
|
-
for (i = 0,
|
636
|
+
for (i = 0, len1 = lItems.length; i < len1; i++) {
|
609
637
|
item = lItems[i];
|
610
638
|
str += item.toString();
|
611
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) {
|