@jdeighan/coffee-utils 14.0.15 → 14.0.16

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.
Files changed (3) hide show
  1. package/package.json +3 -3
  2. package/src/fs.coffee +29 -8
  3. package/src/fs.js +31 -6
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "14.0.15",
4
+ "version": "14.0.16",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -49,13 +49,13 @@
49
49
  },
50
50
  "homepage": "https://github.com/johndeighan/coffee-utils#readme",
51
51
  "dependencies": {
52
- "@jdeighan/base-utils": "^4.0.9",
52
+ "@jdeighan/base-utils": "^4.0.10",
53
53
  "cross-env": "^7.0.3",
54
54
  "n-readlines": "^1.0.1",
55
55
  "readline-sync": "^1.4.10",
56
56
  "svelte": "^3.55.1"
57
57
  },
58
58
  "devDependencies": {
59
- "@jdeighan/unit-tester": "^3.0.27"
59
+ "@jdeighan/unit-tester": "^3.0.28"
60
60
  }
61
61
  }
package/src/fs.coffee CHANGED
@@ -8,7 +8,7 @@ import NReadLines from 'n-readlines'
8
8
 
9
9
  import {
10
10
  undef, pass, defined, notdefined, rtrim, isEmpty, nonEmpty,
11
- isString, isArray, isHash, isRegExp, isFunction,
11
+ isString, isArray, isHash, isRegExp, isFunction, isBoolean,
12
12
  OL, toBlock, getOptions,
13
13
  } from '@jdeighan/base-utils'
14
14
  import {assert, croak} from '@jdeighan/base-utils/exceptions'
@@ -131,7 +131,7 @@ export getFullPath = (filepath) =>
131
131
 
132
132
  # ---------------------------------------------------------------------------
133
133
 
134
- export forEachLine = (filepath, func) =>
134
+ export forEachLineInFile = (filepath, func) =>
135
135
 
136
136
  reader = new NReadLines(filepath)
137
137
  nLines = 0
@@ -141,12 +141,33 @@ export forEachLine = (filepath, func) =>
141
141
  # --- text is split on \n chars,
142
142
  # we also need to remove \r chars
143
143
  line = buffer.toString().replace(/\r/g, '')
144
- if func(line, nLines)
144
+ result = func(line, nLines)
145
+ assert isBoolean(result)
146
+ if result
145
147
  reader.close() # allow premature termination
148
+ return
146
149
  return
147
150
 
148
151
  # ---------------------------------------------------------------------------
149
152
 
153
+ export mapEachLineInFile = (filepath, func) =>
154
+
155
+ reader = new NReadLines(filepath)
156
+ nLines = 0
157
+
158
+ lLines = []
159
+ while (buffer = reader.next())
160
+ nLines += 1
161
+ # --- text is split on \n chars,
162
+ # we also need to remove \r chars
163
+ line = buffer.toString().replace(/\r/g, '')
164
+ result = func(line, nLines)
165
+ if defined(result)
166
+ lLines.push result
167
+ return lLines
168
+
169
+ # ---------------------------------------------------------------------------
170
+
150
171
  export forEachBlock = (filepath, func, regexp = /^-{16,}$/) =>
151
172
 
152
173
  lLines = []
@@ -165,9 +186,9 @@ export forEachBlock = (filepath, func, regexp = /^-{16,}$/) =>
165
186
  firstLineNum = lineNum+1
166
187
  else
167
188
  lLines.push line
168
- return
189
+ return false
169
190
 
170
- forEachLine filepath, callback
191
+ forEachLineInFile filepath, callback
171
192
  if ! earlyExit
172
193
  func(lLines.join('\n'), firstLineNum)
173
194
  return
@@ -200,9 +221,9 @@ export forEachSetOfBlocks = (filepath, func,
200
221
  lLines = []
201
222
  else
202
223
  lLines.push line
203
- return
224
+ return false
204
225
 
205
- forEachLine filepath, callback
226
+ forEachLineInFile filepath, callback
206
227
  if ! earlyExit
207
228
  lBlocks.push(lLines.join('\n'))
208
229
  func(lBlocks, firstLineNum)
@@ -215,7 +236,7 @@ export slurp = (filepath, maxLines=undef) =>
215
236
 
216
237
  if defined(maxLines)
217
238
  lLines = []
218
- forEachLine filepath, (line, nLines) ->
239
+ forEachLineInFile filepath, (line, nLines) ->
219
240
  lLines.push line
220
241
  return (nLines >= maxLines)
221
242
  contents = toBlock(lLines)
package/src/fs.js CHANGED
@@ -25,6 +25,7 @@ import {
25
25
  isHash,
26
26
  isRegExp,
27
27
  isFunction,
28
+ isBoolean,
28
29
  OL,
29
30
  toBlock,
30
31
  getOptions
@@ -167,8 +168,8 @@ export var getFullPath = (filepath) => {
167
168
  };
168
169
 
169
170
  // ---------------------------------------------------------------------------
170
- export var forEachLine = (filepath, func) => {
171
- var buffer, line, nLines, reader;
171
+ export var forEachLineInFile = (filepath, func) => {
172
+ var buffer, line, nLines, reader, result;
172
173
  reader = new NReadLines(filepath);
173
174
  nLines = 0;
174
175
  while ((buffer = reader.next())) {
@@ -176,12 +177,34 @@ export var forEachLine = (filepath, func) => {
176
177
  // --- text is split on \n chars,
177
178
  // we also need to remove \r chars
178
179
  line = buffer.toString().replace(/\r/g, '');
179
- if (func(line, nLines)) {
180
+ result = func(line, nLines);
181
+ assert(isBoolean(result));
182
+ if (result) {
180
183
  reader.close(); // allow premature termination
184
+ return;
181
185
  }
182
186
  }
183
187
  };
184
188
 
189
+ // ---------------------------------------------------------------------------
190
+ export var mapEachLineInFile = (filepath, func) => {
191
+ var buffer, lLines, line, nLines, reader, result;
192
+ reader = new NReadLines(filepath);
193
+ nLines = 0;
194
+ lLines = [];
195
+ while ((buffer = reader.next())) {
196
+ nLines += 1;
197
+ // --- text is split on \n chars,
198
+ // we also need to remove \r chars
199
+ line = buffer.toString().replace(/\r/g, '');
200
+ result = func(line, nLines);
201
+ if (defined(result)) {
202
+ lLines.push(result);
203
+ }
204
+ }
205
+ return lLines;
206
+ };
207
+
185
208
  // ---------------------------------------------------------------------------
186
209
  export var forEachBlock = (filepath, func, regexp = /^-{16,}$/) => {
187
210
  var callback, earlyExit, firstLineNum, lLines;
@@ -204,8 +227,9 @@ export var forEachBlock = (filepath, func, regexp = /^-{16,}$/) => {
204
227
  } else {
205
228
  lLines.push(line);
206
229
  }
230
+ return false;
207
231
  };
208
- forEachLine(filepath, callback);
232
+ forEachLineInFile(filepath, callback);
209
233
  if (!earlyExit) {
210
234
  func(lLines.join('\n'), firstLineNum);
211
235
  }
@@ -239,8 +263,9 @@ export var forEachSetOfBlocks = (filepath, func, block_regexp = /^-{16,}$/, set_
239
263
  } else {
240
264
  lLines.push(line);
241
265
  }
266
+ return false;
242
267
  };
243
- forEachLine(filepath, callback);
268
+ forEachLineInFile(filepath, callback);
244
269
  if (!earlyExit) {
245
270
  lBlocks.push(lLines.join('\n'));
246
271
  func(lBlocks, firstLineNum);
@@ -253,7 +278,7 @@ export var slurp = (filepath, maxLines = undef) => {
253
278
  var contents, lLines;
254
279
  if (defined(maxLines)) {
255
280
  lLines = [];
256
- forEachLine(filepath, function(line, nLines) {
281
+ forEachLineInFile(filepath, function(line, nLines) {
257
282
  lLines.push(line);
258
283
  return nLines >= maxLines;
259
284
  });