@jdeighan/coffee-utils 10.0.12 → 10.0.15

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