@jdeighan/coffee-utils 10.0.4 → 10.0.7

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.4",
4
+ "version": "10.0.7",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -10,6 +10,7 @@ import {arrayToBlock} from '@jdeighan/coffee-utils/block'
10
10
  import {indented} from '@jdeighan/coffee-utils/indent'
11
11
  import {LOG} from '@jdeighan/coffee-utils/log'
12
12
  import {debug} from '@jdeighan/coffee-utils/debug'
13
+ import {isTAML, taml} from '@jdeighan/coffee-utils/taml'
13
14
  import {Section} from '@jdeighan/coffee-utils/section'
14
15
 
15
16
  # ---------------------------------------------------------------------------
@@ -32,6 +33,10 @@ export class SectionMap
32
33
  # --- lSectionTree is a tree of section/set names
33
34
 
34
35
  debug "enter SectionMap()", @lSectionTree
36
+
37
+ if isTAML(@lSectionTree)
38
+ @SectionTree = taml(@lSectionTree)
39
+
35
40
  assert isArray(@lSectionTree), "not an array"
36
41
 
37
42
  # --- keys are section names, values are Section objects
package/src/SectionMap.js CHANGED
@@ -40,6 +40,11 @@ import {
40
40
  debug
41
41
  } from '@jdeighan/coffee-utils/debug';
42
42
 
43
+ import {
44
+ isTAML,
45
+ taml
46
+ } from '@jdeighan/coffee-utils/taml';
47
+
43
48
  import {
44
49
  Section
45
50
  } from '@jdeighan/coffee-utils/section';
@@ -60,6 +65,9 @@ export var SectionMap = class SectionMap {
60
65
  this.lSectionTree = lSectionTree;
61
66
  // --- lSectionTree is a tree of section/set names
62
67
  debug("enter SectionMap()", this.lSectionTree);
68
+ if (isTAML(this.lSectionTree)) {
69
+ this.SectionTree = taml(this.lSectionTree);
70
+ }
63
71
  assert(isArray(this.lSectionTree), "not an array");
64
72
  // --- keys are section names, values are Section objects
65
73
  this.hSections = {};
@@ -21,6 +21,13 @@ export isComment = (line) ->
21
21
 
22
22
  # ---------------------------------------------------------------------------
23
23
 
24
+ export isSubclassOf = (subClass, superClass) ->
25
+
26
+ return (subClass == superClass) \
27
+ || (subClass.prototype instanceof superClass)
28
+
29
+ # ---------------------------------------------------------------------------
30
+
24
31
  export eval_expr = (str) ->
25
32
 
26
33
  str = str.replace(/\bundef\b/g, 'undefined')
@@ -33,14 +40,6 @@ export pass = () ->
33
40
 
34
41
  # ---------------------------------------------------------------------------
35
42
 
36
- export getClassName = (obj) ->
37
-
38
- if (typeof obj != 'object')
39
- return undef
40
- return obj.constructor.name
41
-
42
- # ---------------------------------------------------------------------------
43
-
44
43
  export patchStr = (bigstr, pos, str) ->
45
44
 
46
45
  endpos = pos + str.length
@@ -62,6 +61,55 @@ export charCount = (str, ch) ->
62
61
 
63
62
  # ---------------------------------------------------------------------------
64
63
 
64
+ export isConstructor = (f) ->
65
+
66
+ try
67
+ new f()
68
+ catch err
69
+ if (err.message.indexOf('is not a constructor') >= 0)
70
+ return false;
71
+ return true;
72
+
73
+ # ---------------------------------------------------------------------------
74
+
75
+ export jsType = (x) ->
76
+
77
+ if notdefined(x)
78
+ return [undef, undef]
79
+ else if isString(x)
80
+ if x.match(/^\s*$/)
81
+ return ['string', 'empty']
82
+ else
83
+ return ['string', undef]
84
+ else if isNumber(x)
85
+ if Number.isInteger(x)
86
+ return ['number', 'integer']
87
+ else
88
+ return ['number', undef]
89
+ else if isBoolean(x)
90
+ return ['boolean', undef]
91
+ else if isHash(x)
92
+ lKeys = Object.keys(x);
93
+ if (lKeys.length == 0)
94
+ return ['hash', 'empty']
95
+ else
96
+ return ['hash', undef]
97
+ else if isArray(x)
98
+ if (x.length == 0)
99
+ return ['array', 'empty']
100
+ else
101
+ return ['array', undef]
102
+ else if isConstructor(x)
103
+ return ['function', 'constructor']
104
+ else if isFunction(x)
105
+ return ['function', undef]
106
+ else if isObject(x)
107
+ return ['object', undef]
108
+ else
109
+ croak "Unknown type: #{OL(x)}"
110
+
111
+ # ---------------------------------------------------------------------------
112
+
65
113
  export isString = (x) ->
66
114
 
67
115
  return (typeof x == 'string') || (x instanceof String)
@@ -94,6 +142,14 @@ export isObject = (x) ->
94
142
 
95
143
  # ---------------------------------------------------------------------------
96
144
 
145
+ export getClassName = (obj) ->
146
+
147
+ if (typeof obj != 'object')
148
+ return undef
149
+ return obj.constructor.name
150
+
151
+ # ---------------------------------------------------------------------------
152
+
97
153
  export isArray = (x) ->
98
154
 
99
155
  return Array.isArray(x)
@@ -207,13 +263,15 @@ export isRegExp = (x) ->
207
263
 
208
264
  # ---------------------------------------------------------------------------
209
265
 
210
- export isNumber = (x, hOptions={}) ->
266
+ export isNumber = (x, hOptions=undef) ->
211
267
 
212
268
  result = (typeof x == 'number') || (x instanceof Number)
213
- if result
214
- if defined(hOptions.min) && (x < hOptions.min)
269
+ if result && defined(hOptions)
270
+ assert isHash(hOptions), "2nd arg not a hash: #{OL(hOptions)}"
271
+ {min, max} = hOptions
272
+ if defined(min) && (x < min)
215
273
  result = false
216
- if defined(hOptions.max) && (x > hOptions.max)
274
+ if defined(max) && (x > max)
217
275
  result = false
218
276
  return result
219
277
 
@@ -27,6 +27,11 @@ export var isComment = function(line) {
27
27
  return defined(lMatches);
28
28
  };
29
29
 
30
+ // ---------------------------------------------------------------------------
31
+ export var isSubclassOf = function(subClass, superClass) {
32
+ return (subClass === superClass) || (subClass.prototype instanceof superClass);
33
+ };
34
+
30
35
  // ---------------------------------------------------------------------------
31
36
  export var eval_expr = function(str) {
32
37
  str = str.replace(/\bundef\b/g, 'undefined');
@@ -37,14 +42,6 @@ export var eval_expr = function(str) {
37
42
  // pass - do nothing
38
43
  export var pass = function() {};
39
44
 
40
- // ---------------------------------------------------------------------------
41
- export var getClassName = function(obj) {
42
- if (typeof obj !== 'object') {
43
- return undef;
44
- }
45
- return obj.constructor.name;
46
- };
47
-
48
45
  // ---------------------------------------------------------------------------
49
46
  export var patchStr = function(bigstr, pos, str) {
50
47
  var endpos;
@@ -68,6 +65,63 @@ export var charCount = function(str, ch) {
68
65
  return count;
69
66
  };
70
67
 
68
+ // ---------------------------------------------------------------------------
69
+ export var isConstructor = function(f) {
70
+ var err;
71
+ try {
72
+ new f();
73
+ } catch (error1) {
74
+ err = error1;
75
+ if (err.message.indexOf('is not a constructor') >= 0) {
76
+ return false;
77
+ }
78
+ }
79
+ return true;
80
+ };
81
+
82
+ // ---------------------------------------------------------------------------
83
+ export var jsType = function(x) {
84
+ var lKeys;
85
+ if (notdefined(x)) {
86
+ return [undef, undef];
87
+ } else if (isString(x)) {
88
+ if (x.match(/^\s*$/)) {
89
+ return ['string', 'empty'];
90
+ } else {
91
+ return ['string', undef];
92
+ }
93
+ } else if (isNumber(x)) {
94
+ if (Number.isInteger(x)) {
95
+ return ['number', 'integer'];
96
+ } else {
97
+ return ['number', undef];
98
+ }
99
+ } else if (isBoolean(x)) {
100
+ return ['boolean', undef];
101
+ } else if (isHash(x)) {
102
+ lKeys = Object.keys(x);
103
+ if (lKeys.length === 0) {
104
+ return ['hash', 'empty'];
105
+ } else {
106
+ return ['hash', undef];
107
+ }
108
+ } else if (isArray(x)) {
109
+ if (x.length === 0) {
110
+ return ['array', 'empty'];
111
+ } else {
112
+ return ['array', undef];
113
+ }
114
+ } else if (isConstructor(x)) {
115
+ return ['function', 'constructor'];
116
+ } else if (isFunction(x)) {
117
+ return ['function', undef];
118
+ } else if (isObject(x)) {
119
+ return ['object', undef];
120
+ } else {
121
+ return croak(`Unknown type: ${OL(x)}`);
122
+ }
123
+ };
124
+
71
125
  // ---------------------------------------------------------------------------
72
126
  export var isString = function(x) {
73
127
  return (typeof x === 'string') || (x instanceof String);
@@ -94,6 +148,14 @@ export var isObject = function(x) {
94
148
  return (typeof x === 'object') && !isString(x) && !isArray(x) && !isHash(x) && !isNumber(x);
95
149
  };
96
150
 
151
+ // ---------------------------------------------------------------------------
152
+ export var getClassName = function(obj) {
153
+ if (typeof obj !== 'object') {
154
+ return undef;
155
+ }
156
+ return obj.constructor.name;
157
+ };
158
+
97
159
  // ---------------------------------------------------------------------------
98
160
  export var isArray = function(x) {
99
161
  return Array.isArray(x);
@@ -220,14 +282,16 @@ export var isRegExp = function(x) {
220
282
  };
221
283
 
222
284
  // ---------------------------------------------------------------------------
223
- export var isNumber = function(x, hOptions = {}) {
224
- var result;
285
+ export var isNumber = function(x, hOptions = undef) {
286
+ var max, min, result;
225
287
  result = (typeof x === 'number') || (x instanceof Number);
226
- if (result) {
227
- if (defined(hOptions.min) && (x < hOptions.min)) {
288
+ if (result && defined(hOptions)) {
289
+ assert(isHash(hOptions), `2nd arg not a hash: ${OL(hOptions)}`);
290
+ ({min, max} = hOptions);
291
+ if (defined(min) && (x < min)) {
228
292
  result = false;
229
293
  }
230
- if (defined(hOptions.max) && (x > hOptions.max)) {
294
+ if (defined(max) && (x > max)) {
231
295
  result = false;
232
296
  }
233
297
  }
@@ -99,7 +99,10 @@ export undented = (input, level=undef, oneIndent="\t") ->
99
99
 
100
100
  lLines = toArray(input)
101
101
  if (lLines.length == 0)
102
- return ''
102
+ if isString(input)
103
+ return ''
104
+ else
105
+ return []
103
106
 
104
107
  # --- determine what to remove from beginning of each line
105
108
  if defined(level)
@@ -118,7 +118,11 @@ export var undented = function(input, level = undef, oneIndent = "\t") {
118
118
  }
119
119
  lLines = toArray(input);
120
120
  if (lLines.length === 0) {
121
- return '';
121
+ if (isString(input)) {
122
+ return '';
123
+ } else {
124
+ return [];
125
+ }
122
126
  }
123
127
  // --- determine what to remove from beginning of each line
124
128
  if (defined(level)) {