@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 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) {