@jdeighan/coffee-utils 5.0.4 → 6.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +2 -1
- package/src/fs_utils.coffee +27 -4
- package/src/fs_utils.js +36 -5
- package/src/log_utils.coffee +9 -3
- package/src/log_utils.js +11 -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.1",
|
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/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
@@ -4,7 +4,7 @@ import yaml from 'js-yaml'
|
|
4
4
|
|
5
5
|
import {
|
6
6
|
assert, undef, isNumber, isInteger, isString, isHash, isFunction,
|
7
|
-
escapeStr, sep_eq,
|
7
|
+
escapeStr, sep_eq, sep_dash
|
8
8
|
} from '@jdeighan/coffee-utils'
|
9
9
|
import {blockToArray} from '@jdeighan/coffee-utils/block'
|
10
10
|
import {tabify, untabify} from '@jdeighan/coffee-utils/indent'
|
@@ -17,9 +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
|
-
|
22
|
+
if item
|
23
|
+
console.log ch.repeat(42)
|
24
|
+
console.log "[#{label}]:"
|
25
|
+
console.log untabify(orderedStringify(item))
|
26
|
+
console.log ch.repeat(42)
|
27
|
+
else
|
28
|
+
console.log label
|
23
29
|
return
|
24
30
|
|
25
31
|
# ---------------------------------------------------------------------------
|
package/src/log_utils.js
CHANGED
@@ -13,7 +13,8 @@ import {
|
|
13
13
|
isHash,
|
14
14
|
isFunction,
|
15
15
|
escapeStr,
|
16
|
-
sep_eq
|
16
|
+
sep_eq,
|
17
|
+
sep_dash
|
17
18
|
} from '@jdeighan/coffee-utils';
|
18
19
|
|
19
20
|
import {
|
@@ -34,8 +35,15 @@ export var id = 42;
|
|
34
35
|
|
35
36
|
// ---------------------------------------------------------------------------
|
36
37
|
// This is useful for debugging and easy to remove after debugging
|
37
|
-
export var LOG = function(
|
38
|
-
|
38
|
+
export var LOG = function(label, item, ch = '=') {
|
39
|
+
if (item) {
|
40
|
+
console.log(ch.repeat(42));
|
41
|
+
console.log(`[${label}]:`);
|
42
|
+
console.log(untabify(orderedStringify(item)));
|
43
|
+
console.log(ch.repeat(42));
|
44
|
+
} else {
|
45
|
+
console.log(label);
|
46
|
+
}
|
39
47
|
};
|
40
48
|
|
41
49
|
// ---------------------------------------------------------------------------
|