@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "10.0.12",
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.49.0"
57
+ "svelte": "^3.50.1"
58
58
  },
59
59
  "devDependencies": {
60
- "@jdeighan/unit-tester": "^2.0.23"
60
+ "@jdeighan/unit-tester": "^2.0.24"
61
61
  }
62
62
  }
@@ -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
@@ -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, len;
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, len = lKeys.length; i < len; i++) {
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, len;
298
+ var i, item, len1;
266
299
  if (!isArray(lItems)) {
267
300
  return false;
268
301
  }
269
- for (i = 0, len = lItems.length; i < len; i++) {
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, len;
313
+ var i, item, len1;
281
314
  if (!isArray(lItems)) {
282
315
  return false;
283
316
  }
284
- for (i = 0, len = lItems.length; i < len; i++) {
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, len;
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, len = lItems.length; i < len; i++) {
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, len;
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, len = lItems.length; i < len; i++) {
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, len, ref, results;
523
+ var i, len1, ref, results;
491
524
  ref = str.split('');
492
525
  results = [];
493
- for (i = 0, len = ref.length; i < len; i++) {
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, len, results;
570
+ var i, len1, results;
538
571
  results = [];
539
- for (i = 0, len = lStrings.length; i < len; i++) {
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, len, results;
580
+ var i, len1, results;
548
581
  results = [];
549
- for (i = 0, len = lStrings.length; i < len; i++) {
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, len, plen, ref;
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, len = ref.length; i < len; i++) {
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, len, str;
634
+ var i, item, len1, str;
602
635
  str = '';
603
- for (i = 0, len = lItems.length; i < len; i++) {
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) {