@jdeighan/coffee-utils 5.0.5 → 6.0.2
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 +2 -1
- package/src/debug_utils.coffee +20 -16
- package/src/debug_utils.js +24 -18
- package/src/fs_utils.coffee +27 -4
- package/src/fs_utils.js +36 -5
- package/src/log_utils.coffee +4 -3
- package/src/log_utils.js +4 -3
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@jdeighan/coffee-utils",
|
3
3
|
"type": "module",
|
4
|
-
"version": "
|
4
|
+
"version": "6.0.2",
|
5
5
|
"description": "A set of utility functions for CoffeeScript",
|
6
6
|
"main": "coffee_utils.js",
|
7
7
|
"exports": {
|
@@ -46,6 +46,7 @@
|
|
46
46
|
"dependencies": {
|
47
47
|
"cross-env": "^7.0.3",
|
48
48
|
"js-yaml": "^4.1.0",
|
49
|
+
"n-readlines": "^1.0.1",
|
49
50
|
"readline-sync": "^1.4.10",
|
50
51
|
"svelte": "^3.46.4"
|
51
52
|
},
|
package/src/debug_utils.coffee
CHANGED
@@ -28,6 +28,15 @@ export debugging = false
|
|
28
28
|
shouldDebug = shouldLog = undef
|
29
29
|
|
30
30
|
stack = new CallStack()
|
31
|
+
DEBUGDEBUG = false
|
32
|
+
|
33
|
+
# ---------------------------------------------------------------------------
|
34
|
+
|
35
|
+
export setDEBUGDEBUG = (flag=true) ->
|
36
|
+
|
37
|
+
DEBUGDEBUG = flag
|
38
|
+
console.log "DEBUGDEBUG = #{flag}"
|
39
|
+
return
|
31
40
|
|
32
41
|
# ---------------------------------------------------------------------------
|
33
42
|
|
@@ -36,8 +45,8 @@ export resetDebugging = (funcDoDebug=undef, funcDoLog=undef) ->
|
|
36
45
|
debugging = false
|
37
46
|
debugLevel = 0
|
38
47
|
stack.reset()
|
39
|
-
shouldDebug = (funcName
|
40
|
-
shouldLog = (str) -> debugging
|
48
|
+
shouldDebug = (funcName) -> debugging
|
49
|
+
shouldLog = (str) -> debugging
|
41
50
|
if funcDoDebug
|
42
51
|
setDebugging funcDoDebug, funcDoLog
|
43
52
|
return
|
@@ -47,15 +56,21 @@ export resetDebugging = (funcDoDebug=undef, funcDoLog=undef) ->
|
|
47
56
|
export setDebugging = (funcDoDebug=undef, funcDoLog=undef) ->
|
48
57
|
|
49
58
|
if isBoolean(funcDoDebug)
|
59
|
+
if DEBUGDEBUG
|
60
|
+
console.log "setDebugging #{funcDoDebug}"
|
50
61
|
debugging = funcDoDebug
|
51
62
|
else if isString(funcDoDebug)
|
52
63
|
debugging = false
|
53
64
|
lFuncNames = words(funcDoDebug)
|
54
65
|
assert isArray(lFuncNames), "words('#{funcDoDebug}') returned non-array"
|
55
|
-
shouldDebug = (funcName
|
56
|
-
|
66
|
+
shouldDebug = (funcName) ->
|
67
|
+
funcMatch(funcName, lFuncNames)
|
68
|
+
if DEBUGDEBUG
|
69
|
+
console.log "setDebugging FUNCS: #{lFuncNames.join(',')}"
|
57
70
|
else if isFunction(funcDoDebug)
|
58
71
|
shouldDebug = funcDoDebug
|
72
|
+
if DEBUGDEBUG
|
73
|
+
console.log "setDebugging to custom func"
|
59
74
|
else
|
60
75
|
croak "setDebugging(): bad parameter #{oneline(funcDoDebug)}"
|
61
76
|
|
@@ -114,17 +129,6 @@ getPrefix = (level) ->
|
|
114
129
|
|
115
130
|
# ---------------------------------------------------------------------------
|
116
131
|
|
117
|
-
envSaysDebug = (curFunc) ->
|
118
|
-
|
119
|
-
if process.env.DEBUG_FUNC?
|
120
|
-
return curFunc == process.env.DEBUG_FUNC
|
121
|
-
else if process.env.DEBUG_FUNCS?
|
122
|
-
return process.env.DEBUG_FUNCS.split(',').indexOf(curFunc) > -1
|
123
|
-
else
|
124
|
-
return false
|
125
|
-
|
126
|
-
# ---------------------------------------------------------------------------
|
127
|
-
|
128
132
|
export debug = (lArgs...) ->
|
129
133
|
# --- either 1 or 2 args
|
130
134
|
|
@@ -157,7 +161,7 @@ export debug = (lArgs...) ->
|
|
157
161
|
entering = true
|
158
162
|
curFunc = lMatches[1]
|
159
163
|
stack.call(curFunc, curEnv())
|
160
|
-
debugging =
|
164
|
+
debugging = shouldDebug(curFunc)
|
161
165
|
else if (lMatches = str.match(///^
|
162
166
|
\s*
|
163
167
|
return
|
package/src/debug_utils.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
// Generated by CoffeeScript 2.6.1
|
2
2
|
// debug_utils.coffee
|
3
|
-
var arrow, arrowhead, corner, curEnv, debugLevel,
|
3
|
+
var DEBUGDEBUG, arrow, arrowhead, corner, curEnv, debugLevel, getPrefix, hbar, indent, logger, reMethod, setEnv, shouldDebug, shouldLog, stack, undef, vbar;
|
4
4
|
|
5
5
|
import {
|
6
6
|
assert,
|
@@ -63,16 +63,24 @@ shouldDebug = shouldLog = undef;
|
|
63
63
|
|
64
64
|
stack = new CallStack();
|
65
65
|
|
66
|
+
DEBUGDEBUG = false;
|
67
|
+
|
68
|
+
// ---------------------------------------------------------------------------
|
69
|
+
export var setDEBUGDEBUG = function(flag = true) {
|
70
|
+
DEBUGDEBUG = flag;
|
71
|
+
console.log(`DEBUGDEBUG = ${flag}`);
|
72
|
+
};
|
73
|
+
|
66
74
|
// ---------------------------------------------------------------------------
|
67
75
|
export var resetDebugging = function(funcDoDebug = undef, funcDoLog = undef) {
|
68
76
|
debugging = false;
|
69
77
|
debugLevel = 0;
|
70
78
|
stack.reset();
|
71
|
-
shouldDebug = function(funcName
|
72
|
-
return
|
79
|
+
shouldDebug = function(funcName) {
|
80
|
+
return debugging;
|
73
81
|
};
|
74
82
|
shouldLog = function(str) {
|
75
|
-
return debugging
|
83
|
+
return debugging;
|
76
84
|
};
|
77
85
|
if (funcDoDebug) {
|
78
86
|
setDebugging(funcDoDebug, funcDoLog);
|
@@ -83,16 +91,25 @@ export var resetDebugging = function(funcDoDebug = undef, funcDoLog = undef) {
|
|
83
91
|
export var setDebugging = function(funcDoDebug = undef, funcDoLog = undef) {
|
84
92
|
var lFuncNames;
|
85
93
|
if (isBoolean(funcDoDebug)) {
|
94
|
+
if (DEBUGDEBUG) {
|
95
|
+
console.log(`setDebugging ${funcDoDebug}`);
|
96
|
+
}
|
86
97
|
debugging = funcDoDebug;
|
87
98
|
} else if (isString(funcDoDebug)) {
|
88
99
|
debugging = false;
|
89
100
|
lFuncNames = words(funcDoDebug);
|
90
101
|
assert(isArray(lFuncNames), `words('${funcDoDebug}') returned non-array`);
|
91
|
-
shouldDebug = function(funcName
|
92
|
-
return
|
102
|
+
shouldDebug = function(funcName) {
|
103
|
+
return funcMatch(funcName, lFuncNames);
|
93
104
|
};
|
105
|
+
if (DEBUGDEBUG) {
|
106
|
+
console.log(`setDebugging FUNCS: ${lFuncNames.join(',')}`);
|
107
|
+
}
|
94
108
|
} else if (isFunction(funcDoDebug)) {
|
95
109
|
shouldDebug = funcDoDebug;
|
110
|
+
if (DEBUGDEBUG) {
|
111
|
+
console.log("setDebugging to custom func");
|
112
|
+
}
|
96
113
|
} else {
|
97
114
|
croak(`setDebugging(): bad parameter ${oneline(funcDoDebug)}`);
|
98
115
|
}
|
@@ -144,17 +161,6 @@ getPrefix = function(level) {
|
|
144
161
|
return ' '.repeat(level);
|
145
162
|
};
|
146
163
|
|
147
|
-
// ---------------------------------------------------------------------------
|
148
|
-
envSaysDebug = function(curFunc) {
|
149
|
-
if (process.env.DEBUG_FUNC != null) {
|
150
|
-
return curFunc === process.env.DEBUG_FUNC;
|
151
|
-
} else if (process.env.DEBUG_FUNCS != null) {
|
152
|
-
return process.env.DEBUG_FUNCS.split(',').indexOf(curFunc) > -1;
|
153
|
-
} else {
|
154
|
-
return false;
|
155
|
-
}
|
156
|
-
};
|
157
|
-
|
158
164
|
// ---------------------------------------------------------------------------
|
159
165
|
export var debug = function(...lArgs) {
|
160
166
|
var curFunc, entering, hInfo, item, itemPrefix, lMatches, nArgs, prefix, returning, str;
|
@@ -179,7 +185,7 @@ export var debug = function(...lArgs) {
|
|
179
185
|
entering = true;
|
180
186
|
curFunc = lMatches[1];
|
181
187
|
stack.call(curFunc, curEnv());
|
182
|
-
debugging =
|
188
|
+
debugging = shouldDebug(curFunc);
|
183
189
|
} else if ((lMatches = str.match(/^\s*return.+from\s+([A-Za-z_][A-Za-z0-9_\.]*)/))) {
|
184
190
|
returning = true;
|
185
191
|
curFunc = lMatches[1];
|
package/src/fs_utils.coffee
CHANGED
@@ -3,12 +3,13 @@
|
|
3
3
|
import pathlib from 'path'
|
4
4
|
import urllib from 'url'
|
5
5
|
import fs from 'fs'
|
6
|
+
import NReadLines from 'n-readlines'
|
6
7
|
|
7
8
|
import {
|
8
9
|
assert, undef, pass, rtrim, error, nonEmpty,
|
9
10
|
isString, isRegExp, isFunction, croak,
|
10
11
|
} from '@jdeighan/coffee-utils'
|
11
|
-
import {log} from '@jdeighan/coffee-utils/log'
|
12
|
+
import {log, LOG} from '@jdeighan/coffee-utils/log'
|
12
13
|
import {debug} from '@jdeighan/coffee-utils/debug'
|
13
14
|
|
14
15
|
# ---------------------------------------------------------------------------
|
@@ -98,14 +99,36 @@ export backup = (file, from, to, report=false) ->
|
|
98
99
|
else
|
99
100
|
fs.copyFileSync(src, dest)
|
100
101
|
|
102
|
+
# ---------------------------------------------------------------------------
|
103
|
+
|
104
|
+
export forEachLineInFile = (filepath, func) ->
|
105
|
+
|
106
|
+
reader = new NReadLines(filepath)
|
107
|
+
nLines = 0
|
108
|
+
|
109
|
+
while (buffer = reader.next())
|
110
|
+
nLines += 1
|
111
|
+
# --- text is split on \n chars, we also need to remove \r chars
|
112
|
+
line = buffer.toString().replace(/\r/g, '')
|
113
|
+
if func(line, nLines) == 'EOF'
|
114
|
+
reader.close() # allow premature termination
|
115
|
+
return
|
116
|
+
|
101
117
|
# ---------------------------------------------------------------------------
|
102
118
|
# slurp - read an entire file into a string
|
103
119
|
|
104
|
-
export slurp = (filepath) ->
|
120
|
+
export slurp = (filepath, maxLines=undef) ->
|
105
121
|
|
106
122
|
debug "enter slurp('#{filepath}')"
|
107
|
-
|
108
|
-
|
123
|
+
if maxLines?
|
124
|
+
lLines = []
|
125
|
+
forEachLineInFile filepath, (line, nLines) ->
|
126
|
+
lLines.push line
|
127
|
+
return if nLines >= maxLines then 'EOF' else undef
|
128
|
+
contents = lLines.join("\n")
|
129
|
+
else
|
130
|
+
filepath = filepath.replace(/\//g, "\\")
|
131
|
+
contents = fs.readFileSync(filepath, 'utf8').toString()
|
109
132
|
debug "return from slurp()", contents
|
110
133
|
return contents
|
111
134
|
|
package/src/fs_utils.js
CHANGED
@@ -6,6 +6,8 @@ import urllib from 'url';
|
|
6
6
|
|
7
7
|
import fs from 'fs';
|
8
8
|
|
9
|
+
import NReadLines from 'n-readlines';
|
10
|
+
|
9
11
|
import {
|
10
12
|
assert,
|
11
13
|
undef,
|
@@ -20,7 +22,8 @@ import {
|
|
20
22
|
} from '@jdeighan/coffee-utils';
|
21
23
|
|
22
24
|
import {
|
23
|
-
log
|
25
|
+
log,
|
26
|
+
LOG
|
24
27
|
} from '@jdeighan/coffee-utils/log';
|
25
28
|
|
26
29
|
import {
|
@@ -117,13 +120,41 @@ export var backup = function(file, from, to, report = false) {
|
|
117
120
|
}
|
118
121
|
};
|
119
122
|
|
123
|
+
// ---------------------------------------------------------------------------
|
124
|
+
export var forEachLineInFile = function(filepath, func) {
|
125
|
+
var buffer, line, nLines, reader;
|
126
|
+
reader = new NReadLines(filepath);
|
127
|
+
nLines = 0;
|
128
|
+
while ((buffer = reader.next())) {
|
129
|
+
nLines += 1;
|
130
|
+
// --- text is split on \n chars, we also need to remove \r chars
|
131
|
+
line = buffer.toString().replace(/\r/g, '');
|
132
|
+
if (func(line, nLines) === 'EOF') {
|
133
|
+
reader.close(); // allow premature termination
|
134
|
+
}
|
135
|
+
}
|
136
|
+
};
|
137
|
+
|
120
138
|
// ---------------------------------------------------------------------------
|
121
139
|
// slurp - read an entire file into a string
|
122
|
-
export var slurp = function(filepath) {
|
123
|
-
var contents;
|
140
|
+
export var slurp = function(filepath, maxLines = undef) {
|
141
|
+
var contents, lLines;
|
124
142
|
debug(`enter slurp('${filepath}')`);
|
125
|
-
|
126
|
-
|
143
|
+
if (maxLines != null) {
|
144
|
+
lLines = [];
|
145
|
+
forEachLineInFile(filepath, function(line, nLines) {
|
146
|
+
lLines.push(line);
|
147
|
+
if (nLines >= maxLines) {
|
148
|
+
return 'EOF';
|
149
|
+
} else {
|
150
|
+
return undef;
|
151
|
+
}
|
152
|
+
});
|
153
|
+
contents = lLines.join("\n");
|
154
|
+
} else {
|
155
|
+
filepath = filepath.replace(/\//g, "\\");
|
156
|
+
contents = fs.readFileSync(filepath, 'utf8').toString();
|
157
|
+
}
|
127
158
|
debug("return from slurp()", contents);
|
128
159
|
return contents;
|
129
160
|
};
|
package/src/log_utils.coffee
CHANGED
@@ -17,14 +17,15 @@ export id = 42
|
|
17
17
|
# ---------------------------------------------------------------------------
|
18
18
|
# This is useful for debugging and easy to remove after debugging
|
19
19
|
|
20
|
-
export LOG = (
|
20
|
+
export LOG = (label, item, ch='=') ->
|
21
21
|
|
22
|
-
if
|
22
|
+
if item
|
23
23
|
console.log ch.repeat(42)
|
24
24
|
console.log "[#{label}]:"
|
25
25
|
console.log untabify(orderedStringify(item))
|
26
|
+
console.log ch.repeat(42)
|
26
27
|
else
|
27
|
-
console.log
|
28
|
+
console.log label
|
28
29
|
return
|
29
30
|
|
30
31
|
# ---------------------------------------------------------------------------
|
package/src/log_utils.js
CHANGED
@@ -35,13 +35,14 @@ export var id = 42;
|
|
35
35
|
|
36
36
|
// ---------------------------------------------------------------------------
|
37
37
|
// This is useful for debugging and easy to remove after debugging
|
38
|
-
export var LOG = function(
|
39
|
-
if (
|
38
|
+
export var LOG = function(label, item, ch = '=') {
|
39
|
+
if (item) {
|
40
40
|
console.log(ch.repeat(42));
|
41
41
|
console.log(`[${label}]:`);
|
42
42
|
console.log(untabify(orderedStringify(item)));
|
43
|
+
console.log(ch.repeat(42));
|
43
44
|
} else {
|
44
|
-
console.log(
|
45
|
+
console.log(label);
|
45
46
|
}
|
46
47
|
};
|
47
48
|
|