@jdeighan/coffee-utils 10.0.13 → 10.0.14

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "10.0.13",
4
+ "version": "10.0.14",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -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) \
@@ -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, len;
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, len = lKeys.length; i < len; i++) {
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, len;
298
+ var i, item, len1;
271
299
  if (!isArray(lItems)) {
272
300
  return false;
273
301
  }
274
- for (i = 0, len = lItems.length; i < len; i++) {
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, len;
313
+ var i, item, len1;
286
314
  if (!isArray(lItems)) {
287
315
  return false;
288
316
  }
289
- for (i = 0, len = lItems.length; i < len; i++) {
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, len;
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, len = lItems.length; i < len; i++) {
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, len;
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, len = lItems.length; i < len; i++) {
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, len, ref, results;
523
+ var i, len1, ref, results;
496
524
  ref = str.split('');
497
525
  results = [];
498
- for (i = 0, len = ref.length; i < len; i++) {
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, len, results;
570
+ var i, len1, results;
543
571
  results = [];
544
- for (i = 0, len = lStrings.length; i < len; i++) {
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, len, results;
580
+ var i, len1, results;
553
581
  results = [];
554
- for (i = 0, len = lStrings.length; i < len; i++) {
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, len, plen, ref;
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, len = ref.length; i < len; i++) {
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, len, str;
634
+ var i, item, len1, str;
607
635
  str = '';
608
- for (i = 0, len = lItems.length; i < len; i++) {
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) {