@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.
- package/package.json +1 -1
- package/src/DataStores.coffee +0 -1
- package/src/DataStores.js +0 -4
- package/src/arrow.coffee +21 -31
- package/src/arrow.js +29 -31
- package/src/call_stack.coffee +68 -21
- package/src/call_stack.js +71 -25
- package/src/coffee_utils.coffee +3 -2
- package/src/coffee_utils.js +8 -3
- package/src/debug_utils.coffee +109 -101
- package/src/debug_utils.js +95 -95
- package/src/fs_utils.coffee +3 -3
- package/src/fs_utils.js +3 -3
- package/src/log_utils.coffee +60 -46
- package/src/log_utils.js +66 -63
- package/src/taml.coffee +30 -4
- package/src/taml.js +35 -8
package/src/log_utils.coffee
CHANGED
@@ -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
|
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
|
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
|
-
|
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
|
-
|
119
|
-
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
prefix = untabify(prefix)
|
131
|
-
itemPrefix = untabify(itemPrefix)
|
129
|
+
prefix = fixStr(hOptions.prefix)
|
130
|
+
putstr "#{prefix}#{str}"
|
131
|
+
return
|
132
132
|
|
133
|
-
|
134
|
-
if hOptions.escape
|
135
|
-
putstr "#{prefix}#{escapeStr(item)}"
|
136
|
-
else
|
137
|
-
putstr "#{prefix}#{item}"
|
138
|
-
return
|
133
|
+
# ---------------------------------------------------------------------------
|
139
134
|
|
140
|
-
|
141
|
-
|
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}#{
|
151
|
+
putstr "#{prefix}#{labelStr}undef"
|
145
152
|
else if isString(item)
|
146
153
|
if (item.length <= maxOneLine)
|
147
|
-
putstr "#{prefix}#{
|
154
|
+
putstr "#{prefix}#{labelStr}'#{escapeStr(item)}'"
|
148
155
|
else
|
149
|
-
|
150
|
-
|
151
|
-
|
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}#{
|
160
|
+
putstr "#{prefix}#{labelStr}#{item}"
|
156
161
|
else
|
157
|
-
putstr "#{
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
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,
|
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(
|
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(
|
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
|
-
|
136
|
-
|
137
|
-
|
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
|
-
|
155
|
-
|
156
|
-
|
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}${
|
166
|
+
putstr(`${prefix}${labelStr}undef`);
|
171
167
|
} else if (isString(item)) {
|
172
168
|
if (item.length <= maxOneLine) {
|
173
|
-
putstr(`${prefix}${
|
169
|
+
putstr(`${prefix}${labelStr}'${escapeStr(item)}'`);
|
174
170
|
} else {
|
175
|
-
|
176
|
-
|
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
|
-
|
174
|
+
putBlock(item, itemPrefix);
|
183
175
|
}
|
184
176
|
} else if (isNumber(item)) {
|
185
|
-
putstr(`${prefix}${
|
177
|
+
putstr(`${prefix}${labelStr}${item}`);
|
186
178
|
} else {
|
187
|
-
putstr(`${
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
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(`${
|
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 {
|
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(
|
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(
|
77
|
+
return yaml.load(arrayToBlock(lLines), {
|
51
78
|
skipInvalid: true
|
52
79
|
});
|
53
80
|
};
|