@jdeighan/coffee-utils 6.0.7 → 7.0.0

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.
@@ -4,17 +4,15 @@ import yaml from 'js-yaml'
4
4
 
5
5
  import {
6
6
  assert, undef, isNumber, isInteger, isString, isHash, isFunction,
7
- escapeStr, sep_eq, sep_dash
7
+ escapeStr, sep_eq, sep_dash, pass
8
8
  } from '@jdeighan/coffee-utils'
9
9
  import {blockToArray} from '@jdeighan/coffee-utils/block'
10
10
  import {tabify, untabify, indentation} from '@jdeighan/coffee-utils/indent'
11
- import {arrow, hasArrow, removeArrow} from '@jdeighan/coffee-utils/arrow'
12
11
 
13
12
  # --- This logger only ever gets passed a single string argument
14
13
  putstr = undef
15
14
 
16
15
  export stringify = undef
17
- objSep = '-'.repeat(42)
18
16
 
19
17
  # ---------------------------------------------------------------------------
20
18
  # This is useful for debugging and easy to remove after debugging
@@ -23,13 +21,13 @@ export LOG = (lArgs...) ->
23
21
 
24
22
  [label, item] = lArgs
25
23
  if lArgs.length > 1
26
- console.log objSep
24
+ console.log sep_dash
27
25
  if item?
28
26
  console.log "#{label}:"
29
27
  console.log untabify(orderedStringify(item))
30
28
  else
31
29
  console.log "[#{label}]: UNDEFINED"
32
- console.log objSep
30
+ console.log sep_dash
33
31
  else
34
32
  console.log label
35
33
  return
@@ -107,61 +105,77 @@ maxOneLine = 32
107
105
 
108
106
  # ---------------------------------------------------------------------------
109
107
 
110
- export log = (item, hOptions={}) ->
108
+ fixStr = (str) ->
109
+
110
+ if !str
111
+ return ''
112
+
113
+ # --- If putstr is console.log, we'll convert TAB char to 3 spaces
114
+ if putstr == console.log
115
+ return untabify(str)
116
+ else
117
+ return str
118
+
119
+ # ---------------------------------------------------------------------------
120
+
121
+ export log = (str, hOptions={}) ->
111
122
  # --- valid options:
112
- # label
113
123
  # prefix
114
- # itemPrefix
115
- # escape
116
124
 
117
125
  assert isFunction(putstr), "putstr not properly set"
118
- if isString(hOptions)
119
- label = hOptions
120
- prefix = itemPrefix = ''
121
- else
122
- assert isHash(hOptions), "log(): 2nd arg must be a string or hash"
123
- label = hOptions.label || ''
124
- prefix = hOptions.prefix || ''
125
- itemPrefix = hOptions.itemPrefix || prefix || ''
126
+ assert isString(str), "log(): not a string"
127
+ assert isHash(hOptions), "log(): arg 2 not a hash"
126
128
 
127
- # --- If putstr is console.log, we'll convert TAB char to 3 spaces
128
- if putstr == console.log
129
- label = untabify(label)
130
- prefix = untabify(prefix)
131
- itemPrefix = untabify(itemPrefix)
129
+ prefix = fixStr(hOptions.prefix)
130
+ putstr "#{prefix}#{str}"
131
+ return
132
132
 
133
- if isString(item) && (label == '')
134
- if hOptions.escape
135
- putstr "#{prefix}#{escapeStr(item)}"
136
- else
137
- putstr "#{prefix}#{item}"
138
- return
133
+ # ---------------------------------------------------------------------------
139
134
 
140
- if (label == '')
141
- label = 'ITEM'
135
+ export logItem = (label, item, hOptions={}) ->
136
+ # --- valid options:
137
+ # prefix
138
+ # itemPrefix
139
+
140
+ assert isFunction(putstr), "putstr not properly set"
141
+ assert !label || isString(label), "label a non-string"
142
+ assert isHash(hOptions), "arg 3 not a hash"
143
+
144
+ label = fixStr(label)
145
+ prefix = fixStr(hOptions.prefix)
146
+ itemPrefix = fixStr(hOptions.itemPrefix || prefix)
147
+
148
+ labelStr = if label then "#{label} = " else ""
142
149
 
143
150
  if (item == undef)
144
- putstr "#{prefix}#{label} = undef"
151
+ putstr "#{prefix}#{labelStr}undef"
145
152
  else if isString(item)
146
153
  if (item.length <= maxOneLine)
147
- putstr "#{prefix}#{label} = '#{escapeStr(item)}'"
154
+ putstr "#{prefix}#{labelStr}'#{escapeStr(item)}'"
148
155
  else
149
- putstr "#{prefix}#{label}:"
150
- putstr "#{itemPrefix}#{sep_eq}"
151
- for line in blockToArray(item)
152
- putstr "#{itemPrefix}#{escapeStr(line)}"
153
- putstr "#{itemPrefix}#{sep_eq}"
156
+ if label
157
+ putstr "#{prefix}#{label}:"
158
+ putBlock item, itemPrefix
154
159
  else if isNumber(item)
155
- putstr "#{prefix}#{label} = #{item}"
160
+ putstr "#{prefix}#{labelStr}#{item}"
156
161
  else
157
- putstr "#{removeArrow(prefix, true)}#{objSep}"
158
- putstr "#{prefix}#{label}:"
159
- for str in blockToArray(stringify(item, true))
160
- if putstr == console.log
161
- putstr "#{itemPrefix} #{untabify(str)}"
162
- else
163
- putstr "#{itemPrefix}#{indentation(1)}#{str}"
164
- putstr "#{removeArrow(prefix, false)}#{objSep}"
162
+ putstr "#{itemPrefix}#{sep_dash}"
163
+ if label
164
+ putstr "#{prefix}#{label}:"
165
+ for str in blockToArray(stringify(item, true)) # escape special chars
166
+ putstr "#{itemPrefix}#{indentation(1)}#{fixStr(str)}"
167
+ putstr "#{itemPrefix}#{sep_dash}"
168
+
169
+ return
170
+
171
+ # ---------------------------------------------------------------------------
172
+
173
+ putBlock = (item, prefix='') ->
174
+
175
+ putstr "#{prefix}#{sep_eq}"
176
+ for line in blockToArray(item)
177
+ putstr "#{prefix}#{escapeStr(line)}"
178
+ putstr "#{prefix}#{sep_eq}"
165
179
  return
166
180
 
167
181
  # ---------------------------------------------------------------------------
package/src/log_utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // Generated by CoffeeScript 2.6.1
2
2
  // log_utils.coffee
3
- var escReplacer, loaded, maxOneLine, objSep, putstr;
3
+ var escReplacer, fixStr, loaded, maxOneLine, putBlock, putstr;
4
4
 
5
5
  import yaml from 'js-yaml';
6
6
 
@@ -14,7 +14,8 @@ import {
14
14
  isFunction,
15
15
  escapeStr,
16
16
  sep_eq,
17
- sep_dash
17
+ sep_dash,
18
+ pass
18
19
  } from '@jdeighan/coffee-utils';
19
20
 
20
21
  import {
@@ -27,33 +28,25 @@ import {
27
28
  indentation
28
29
  } from '@jdeighan/coffee-utils/indent';
29
30
 
30
- import {
31
- arrow,
32
- hasArrow,
33
- removeArrow
34
- } from '@jdeighan/coffee-utils/arrow';
35
-
36
31
  // --- This logger only ever gets passed a single string argument
37
32
  putstr = undef;
38
33
 
39
34
  export var stringify = undef;
40
35
 
41
- objSep = '-'.repeat(42);
42
-
43
36
  // ---------------------------------------------------------------------------
44
37
  // This is useful for debugging and easy to remove after debugging
45
38
  export var LOG = function(...lArgs) {
46
39
  var item, label;
47
40
  [label, item] = lArgs;
48
41
  if (lArgs.length > 1) {
49
- console.log(objSep);
42
+ console.log(sep_dash);
50
43
  if (item != null) {
51
44
  console.log(`${label}:`);
52
45
  console.log(untabify(orderedStringify(item)));
53
46
  } else {
54
47
  console.log(`[${label}]: UNDEFINED`);
55
48
  }
56
- console.log(objSep);
49
+ console.log(sep_dash);
57
50
  } else {
58
51
  console.log(label);
59
52
  }
@@ -132,71 +125,81 @@ export var orderedStringify = function(obj, escape = false) {
132
125
  maxOneLine = 32;
133
126
 
134
127
  // ---------------------------------------------------------------------------
135
- export var log = function(item, hOptions = {}) {
136
- var i, itemPrefix, j, label, len, len1, line, prefix, ref, ref1, str;
137
- // --- valid options:
138
- // label
139
- // prefix
140
- // itemPrefix
141
- // escape
142
- assert(isFunction(putstr), "putstr not properly set");
143
- if (isString(hOptions)) {
144
- label = hOptions;
145
- prefix = itemPrefix = '';
146
- } else {
147
- assert(isHash(hOptions), "log(): 2nd arg must be a string or hash");
148
- label = hOptions.label || '';
149
- prefix = hOptions.prefix || '';
150
- itemPrefix = hOptions.itemPrefix || prefix || '';
128
+ fixStr = function(str) {
129
+ if (!str) {
130
+ return '';
151
131
  }
152
132
  // --- If putstr is console.log, we'll convert TAB char to 3 spaces
153
133
  if (putstr === console.log) {
154
- label = untabify(label);
155
- prefix = untabify(prefix);
156
- itemPrefix = untabify(itemPrefix);
157
- }
158
- if (isString(item) && (label === '')) {
159
- if (hOptions.escape) {
160
- putstr(`${prefix}${escapeStr(item)}`);
161
- } else {
162
- putstr(`${prefix}${item}`);
163
- }
164
- return;
165
- }
166
- if (label === '') {
167
- label = 'ITEM';
134
+ return untabify(str);
135
+ } else {
136
+ return str;
168
137
  }
138
+ };
139
+
140
+ // ---------------------------------------------------------------------------
141
+ export var log = function(str, hOptions = {}) {
142
+ var prefix;
143
+ // --- valid options:
144
+ // prefix
145
+ assert(isFunction(putstr), "putstr not properly set");
146
+ assert(isString(str), "log(): not a string");
147
+ assert(isHash(hOptions), "log(): arg 2 not a hash");
148
+ prefix = fixStr(hOptions.prefix);
149
+ putstr(`${prefix}${str}`);
150
+ };
151
+
152
+ // ---------------------------------------------------------------------------
153
+ export var logItem = function(label, item, hOptions = {}) {
154
+ var i, itemPrefix, labelStr, len, prefix, ref, str;
155
+ // --- valid options:
156
+ // prefix
157
+ // itemPrefix
158
+ assert(isFunction(putstr), "putstr not properly set");
159
+ assert(!label || isString(label), "label a non-string");
160
+ assert(isHash(hOptions), "arg 3 not a hash");
161
+ label = fixStr(label);
162
+ prefix = fixStr(hOptions.prefix);
163
+ itemPrefix = fixStr(hOptions.itemPrefix || prefix);
164
+ labelStr = label ? `${label} = ` : "";
169
165
  if (item === undef) {
170
- putstr(`${prefix}${label} = undef`);
166
+ putstr(`${prefix}${labelStr}undef`);
171
167
  } else if (isString(item)) {
172
168
  if (item.length <= maxOneLine) {
173
- putstr(`${prefix}${label} = '${escapeStr(item)}'`);
169
+ putstr(`${prefix}${labelStr}'${escapeStr(item)}'`);
174
170
  } else {
175
- putstr(`${prefix}${label}:`);
176
- putstr(`${itemPrefix}${sep_eq}`);
177
- ref = blockToArray(item);
178
- for (i = 0, len = ref.length; i < len; i++) {
179
- line = ref[i];
180
- putstr(`${itemPrefix}${escapeStr(line)}`);
171
+ if (label) {
172
+ putstr(`${prefix}${label}:`);
181
173
  }
182
- putstr(`${itemPrefix}${sep_eq}`);
174
+ putBlock(item, itemPrefix);
183
175
  }
184
176
  } else if (isNumber(item)) {
185
- putstr(`${prefix}${label} = ${item}`);
177
+ putstr(`${prefix}${labelStr}${item}`);
186
178
  } else {
187
- putstr(`${removeArrow(prefix, true)}${objSep}`);
188
- putstr(`${prefix}${label}:`);
189
- ref1 = blockToArray(stringify(item, true));
190
- for (j = 0, len1 = ref1.length; j < len1; j++) {
191
- str = ref1[j];
192
- if (putstr === console.log) {
193
- putstr(`${itemPrefix} ${untabify(str)}`);
194
- } else {
195
- putstr(`${itemPrefix}${indentation(1)}${str}`);
196
- }
179
+ putstr(`${itemPrefix}${sep_dash}`);
180
+ if (label) {
181
+ putstr(`${prefix}${label}:`);
182
+ }
183
+ ref = blockToArray(stringify(item, true));
184
+ // escape special chars
185
+ for (i = 0, len = ref.length; i < len; i++) {
186
+ str = ref[i];
187
+ putstr(`${itemPrefix}${indentation(1)}${fixStr(str)}`);
197
188
  }
198
- putstr(`${removeArrow(prefix, false)}${objSep}`);
189
+ putstr(`${itemPrefix}${sep_dash}`);
190
+ }
191
+ };
192
+
193
+ // ---------------------------------------------------------------------------
194
+ putBlock = function(item, prefix = '') {
195
+ var i, len, line, ref;
196
+ putstr(`${prefix}${sep_eq}`);
197
+ ref = blockToArray(item);
198
+ for (i = 0, len = ref.length; i < len; i++) {
199
+ line = ref[i];
200
+ putstr(`${prefix}${escapeStr(line)}`);
199
201
  }
202
+ putstr(`${prefix}${sep_eq}`);
200
203
  };
201
204
 
202
205
  if (!loaded) {
package/src/taml.coffee CHANGED
@@ -5,11 +5,12 @@ import yaml from 'js-yaml'
5
5
  import {
6
6
  assert, undef, oneline, isString,
7
7
  } from '@jdeighan/coffee-utils'
8
- import {untabify, tabify} from '@jdeighan/coffee-utils/indent'
9
- import {log, tamlStringify} from '@jdeighan/coffee-utils/log'
8
+ import {untabify, tabify, splitLine} from '@jdeighan/coffee-utils/indent'
10
9
  import {slurp} from '@jdeighan/coffee-utils/fs'
11
10
  import {debug} from '@jdeighan/coffee-utils/debug'
12
- import {firstLine} from '@jdeighan/coffee-utils/block'
11
+ import {
12
+ firstLine, blockToArray, arrayToBlock,
13
+ } from '@jdeighan/coffee-utils/block'
13
14
 
14
15
  # ---------------------------------------------------------------------------
15
16
  # isTAML - is the string valid TAML?
@@ -18,6 +19,12 @@ export isTAML = (text) ->
18
19
 
19
20
  return isString(text) && (firstLine(text).indexOf('---') == 0)
20
21
 
22
+ # ---------------------------------------------------------------------------
23
+
24
+ squote = (text) ->
25
+
26
+ return "'" + text.replace(/'/g, "''") + "'"
27
+
21
28
  # ---------------------------------------------------------------------------
22
29
  # taml - convert valid TAML string to a JavaScript value
23
30
 
@@ -28,8 +35,27 @@ export taml = (text) ->
28
35
  debug "return undef from taml() - text is not defined"
29
36
  return undef
30
37
  assert isTAML(text), "taml(): string #{oneline(text)} isn't TAML"
38
+
39
+ lLines = for line in blockToArray(text)
40
+ [level, str] = splitLine(line)
41
+ prefix = ' '.repeat(level)
42
+ if lMatches = line.match(///^
43
+ ([A-Za-z_][A-Za-z0-9_]*) # the key
44
+ \s*
45
+ :
46
+ \s*
47
+ (.*)
48
+ $///)
49
+ [_, key, text] = lMatches
50
+ if isEmpty(text) || text.match(/\d+(?:\.\d*)$/)
51
+ prefix + str
52
+ else
53
+ prefix + key + ':' + ' ' + squote(text)
54
+ else
55
+ prefix + str
56
+
31
57
  debug "return from taml()"
32
- return yaml.load(untabify(text, 1), {skipInvalid: true})
58
+ return yaml.load(arrayToBlock(lLines), {skipInvalid: true})
33
59
 
34
60
  # ---------------------------------------------------------------------------
35
61
  # slurpTAML - read TAML from a file
package/src/taml.js CHANGED
@@ -1,5 +1,7 @@
1
1
  // Generated by CoffeeScript 2.6.1
2
2
  // taml.coffee
3
+ var squote;
4
+
3
5
  import yaml from 'js-yaml';
4
6
 
5
7
  import {
@@ -11,14 +13,10 @@ import {
11
13
 
12
14
  import {
13
15
  untabify,
14
- tabify
16
+ tabify,
17
+ splitLine
15
18
  } from '@jdeighan/coffee-utils/indent';
16
19
 
17
- import {
18
- log,
19
- tamlStringify
20
- } from '@jdeighan/coffee-utils/log';
21
-
22
20
  import {
23
21
  slurp
24
22
  } from '@jdeighan/coffee-utils/fs';
@@ -28,7 +26,9 @@ import {
28
26
  } from '@jdeighan/coffee-utils/debug';
29
27
 
30
28
  import {
31
- firstLine
29
+ firstLine,
30
+ blockToArray,
31
+ arrayToBlock
32
32
  } from '@jdeighan/coffee-utils/block';
33
33
 
34
34
  // ---------------------------------------------------------------------------
@@ -37,17 +37,44 @@ export var isTAML = function(text) {
37
37
  return isString(text) && (firstLine(text).indexOf('---') === 0);
38
38
  };
39
39
 
40
+ // ---------------------------------------------------------------------------
41
+ squote = function(text) {
42
+ return "'" + text.replace(/'/g, "''") + "'";
43
+ };
44
+
40
45
  // ---------------------------------------------------------------------------
41
46
  // taml - convert valid TAML string to a JavaScript value
42
47
  export var taml = function(text) {
48
+ var _, key, lLines, lMatches, level, line, prefix, str;
43
49
  debug(`enter taml(${oneline(text)})`);
44
50
  if (text == null) {
45
51
  debug("return undef from taml() - text is not defined");
46
52
  return undef;
47
53
  }
48
54
  assert(isTAML(text), `taml(): string ${oneline(text)} isn't TAML`);
55
+ lLines = (function() {
56
+ var i, len, ref, results;
57
+ ref = blockToArray(text);
58
+ results = [];
59
+ for (i = 0, len = ref.length; i < len; i++) {
60
+ line = ref[i];
61
+ [level, str] = splitLine(line);
62
+ prefix = ' '.repeat(level);
63
+ if (lMatches = line.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*:\s*(.*)$/)) { // the key
64
+ [_, key, text] = lMatches;
65
+ if (isEmpty(text) || text.match(/\d+(?:\.\d*)$/)) {
66
+ results.push(prefix + str);
67
+ } else {
68
+ results.push(prefix + key + ':' + ' ' + squote(text));
69
+ }
70
+ } else {
71
+ results.push(prefix + str);
72
+ }
73
+ }
74
+ return results;
75
+ })();
49
76
  debug("return from taml()");
50
- return yaml.load(untabify(text, 1), {
77
+ return yaml.load(arrayToBlock(lLines), {
51
78
  skipInvalid: true
52
79
  });
53
80
  };