@jdeighan/coffee-utils 4.1.6 → 4.1.10
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 +3 -3
- package/src/block_utils.coffee +1 -0
- package/src/block_utils.js +1 -0
- package/src/coffee_utils.coffee +28 -0
- package/src/coffee_utils.js +31 -0
- package/src/debug_utils.coffee +1 -0
- package/src/debug_utils.js +1 -0
- package/src/fs_utils.coffee +29 -3
- package/src/fs_utils.js +33 -3
- package/src/indent_utils.coffee +4 -1
- package/src/indent_utils.js +9 -4
- package/temp.js +19 -9
- package/.save/block.test.coffee +0 -185
- package/.save/block.test.js +0 -129
- package/.save/block2.test.coffee +0 -47
- package/.save/block2.test.js +0 -64
- package/.save/debug.test.coffee +0 -290
- package/.save/debug.test.js +0 -242
- package/.save/fs.test.coffee +0 -148
- package/.save/fs.test.js +0 -191
- package/.save/indent.test.coffee +0 -130
- package/.save/indent.test.js +0 -136
- package/.save/log.test.coffee +0 -315
- package/.save/log.test.js +0 -336
- package/.save/privenv.test.coffee +0 -38
- package/.save/privenv.test.js +0 -54
- package/.save/temp.coffee +0 -19
- package/.save/temp.js +0 -28
- package/.save/tester.test.coffee +0 -75
- package/.save/tester.test.js +0 -93
- package/.save/utils.test.coffee +0 -214
- package/.save/utils.test.js +0 -319
- package/src/private_env.coffee +0 -52
- package/src/private_env.js +0 -63
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@jdeighan/coffee-utils",
|
3
3
|
"type": "module",
|
4
|
-
"version": "4.1.
|
4
|
+
"version": "4.1.10",
|
5
5
|
"description": "A set of utility functions for CoffeeScript",
|
6
6
|
"main": "coffee_utils.js",
|
7
7
|
"exports": {
|
@@ -13,7 +13,6 @@
|
|
13
13
|
"./debug": "./src/debug_utils.js",
|
14
14
|
"./svelte": "./src/svelte_utils.js",
|
15
15
|
"./test": "./src/UnitTester.js",
|
16
|
-
"./privenv": "./src/private_env.js",
|
17
16
|
"./package.json": "./package.json"
|
18
17
|
},
|
19
18
|
"engines": {
|
@@ -21,7 +20,8 @@
|
|
21
20
|
},
|
22
21
|
"scripts": {
|
23
22
|
"build": "cls && rm -f ./src/*.js && coffee -c ./src",
|
24
|
-
"
|
23
|
+
"old_pretest": "npm run build && rm -f ./test/*.js && rm -f ./test/*.coffee && cielo -fq ./test",
|
24
|
+
"pretest": "cls && coffee -c .",
|
25
25
|
"test": "ava ./test/*.test.js",
|
26
26
|
"prefinaltest": "npm run pretest",
|
27
27
|
"finaltest": "cross-env FINALTEST=yes ava ./test/*.test.js"
|
package/src/block_utils.coffee
CHANGED
package/src/block_utils.js
CHANGED
@@ -110,6 +110,7 @@ export var joinBlocks = function(...lBlocks) {
|
|
110
110
|
lNonEmptyBlocks = [];
|
111
111
|
for (i = 0, len1 = lBlocks.length; i < len1; i++) {
|
112
112
|
block = lBlocks[i];
|
113
|
+
assert(isString(block), `joinBlocks(): block ${block} is not a string`);
|
113
114
|
if (nonEmpty(block)) {
|
114
115
|
lNonEmptyBlocks.push(block);
|
115
116
|
}
|
package/src/coffee_utils.coffee
CHANGED
@@ -100,6 +100,14 @@ export isHash = (x) ->
|
|
100
100
|
|
101
101
|
return (getClassName(x) == 'Object')
|
102
102
|
|
103
|
+
# ---------------------------------------------------------------------------
|
104
|
+
|
105
|
+
export hashHasKey = (x, key) ->
|
106
|
+
|
107
|
+
assert isHash(x), "hashHasKey(): not a hash"
|
108
|
+
assert isString(key), "hashHasKey(): key not a string"
|
109
|
+
return x.hasOwnProperty(key)
|
110
|
+
|
103
111
|
# ---------------------------------------------------------------------------
|
104
112
|
# isEmpty
|
105
113
|
# - string is whitespace, array has no elements, hash has no keys
|
@@ -149,6 +157,7 @@ export setCommentRegexp = (regexp) ->
|
|
149
157
|
|
150
158
|
export isComment = (str) ->
|
151
159
|
|
160
|
+
assert isString(str), "isComment(): not a string"
|
152
161
|
return if str.match(commentRegExp) then true else false
|
153
162
|
|
154
163
|
# ---------------------------------------------------------------------------
|
@@ -264,6 +273,7 @@ export titleLine = (title, char='=', padding=2, linelen=42) ->
|
|
264
273
|
|
265
274
|
export rtrim = (line) ->
|
266
275
|
|
276
|
+
assert isString(line), "rtrim(): line is not a string"
|
267
277
|
lMatches = line.match(/\s+$/)
|
268
278
|
if lMatches?
|
269
279
|
n = lMatches[0].length # num chars to remove
|
@@ -357,3 +367,21 @@ export extractMatches = (line, regexp, convertFunc=undef) ->
|
|
357
367
|
return lStrings
|
358
368
|
|
359
369
|
# ---------------------------------------------------------------------------
|
370
|
+
|
371
|
+
export envVarsWithPrefix = (prefix, hOptions={}) ->
|
372
|
+
# --- valid options:
|
373
|
+
# stripPrefix
|
374
|
+
|
375
|
+
assert prefix, "envVarsWithPrefix: empty prefix!"
|
376
|
+
plen = prefix.length
|
377
|
+
h = {}
|
378
|
+
for key in Object.keys(process.env)
|
379
|
+
if key.indexOf(prefix) == 0
|
380
|
+
if hOptions.stripPrefix
|
381
|
+
h[key.substr(plen)] = process.env[key]
|
382
|
+
else
|
383
|
+
h[key] = process.env[key]
|
384
|
+
return h
|
385
|
+
|
386
|
+
# ---------------------------------------------------------------------------
|
387
|
+
|
package/src/coffee_utils.js
CHANGED
@@ -97,6 +97,13 @@ export var isHash = function(x) {
|
|
97
97
|
return getClassName(x) === 'Object';
|
98
98
|
};
|
99
99
|
|
100
|
+
// ---------------------------------------------------------------------------
|
101
|
+
export var hashHasKey = function(x, key) {
|
102
|
+
assert(isHash(x), "hashHasKey(): not a hash");
|
103
|
+
assert(isString(key), "hashHasKey(): key not a string");
|
104
|
+
return x.hasOwnProperty(key);
|
105
|
+
};
|
106
|
+
|
100
107
|
// ---------------------------------------------------------------------------
|
101
108
|
// isEmpty
|
102
109
|
// - string is whitespace, array has no elements, hash has no keys
|
@@ -147,6 +154,7 @@ export var setCommentRegexp = function(regexp) {
|
|
147
154
|
|
148
155
|
// ---------------------------------------------------------------------------
|
149
156
|
export var isComment = function(str) {
|
157
|
+
assert(isString(str), "isComment(): not a string");
|
150
158
|
if (str.match(commentRegExp)) {
|
151
159
|
return true;
|
152
160
|
} else {
|
@@ -266,6 +274,7 @@ export var titleLine = function(title, char = '=', padding = 2, linelen = 42) {
|
|
266
274
|
// rtrim - strip trailing whitespace
|
267
275
|
export var rtrim = function(line) {
|
268
276
|
var lMatches, n;
|
277
|
+
assert(isString(line), "rtrim(): line is not a string");
|
269
278
|
lMatches = line.match(/\s+$/);
|
270
279
|
if (lMatches != null) {
|
271
280
|
n = lMatches[0].length; // num chars to remove
|
@@ -392,3 +401,25 @@ export var extractMatches = function(line, regexp, convertFunc = undef) {
|
|
392
401
|
};
|
393
402
|
|
394
403
|
// ---------------------------------------------------------------------------
|
404
|
+
export var envVarsWithPrefix = function(prefix, hOptions = {}) {
|
405
|
+
var h, i, key, len, plen, ref;
|
406
|
+
// --- valid options:
|
407
|
+
// stripPrefix
|
408
|
+
assert(prefix, "envVarsWithPrefix: empty prefix!");
|
409
|
+
plen = prefix.length;
|
410
|
+
h = {};
|
411
|
+
ref = Object.keys(process.env);
|
412
|
+
for (i = 0, len = ref.length; i < len; i++) {
|
413
|
+
key = ref[i];
|
414
|
+
if (key.indexOf(prefix) === 0) {
|
415
|
+
if (hOptions.stripPrefix) {
|
416
|
+
h[key.substr(plen)] = process.env[key];
|
417
|
+
} else {
|
418
|
+
h[key] = process.env[key];
|
419
|
+
}
|
420
|
+
}
|
421
|
+
}
|
422
|
+
return h;
|
423
|
+
};
|
424
|
+
|
425
|
+
// ---------------------------------------------------------------------------
|
package/src/debug_utils.coffee
CHANGED
package/src/debug_utils.js
CHANGED
@@ -204,6 +204,7 @@ reMethod = /^([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)$/;
|
|
204
204
|
// --- export only to allow unit tests
|
205
205
|
export var funcMatch = function(curFunc) {
|
206
206
|
var _, cls, lMatches, meth;
|
207
|
+
assert(isString(curFunc), "funcMatch(): not a string");
|
207
208
|
if (lDebugFuncs.includes(curFunc)) {
|
208
209
|
return true;
|
209
210
|
} else if ((lMatches = curFunc.match(reMethod)) && ([_, cls, meth] = lMatches) && lDebugFuncs.includes(meth)) {
|
package/src/fs_utils.coffee
CHANGED
@@ -6,7 +6,7 @@ import fs from 'fs'
|
|
6
6
|
|
7
7
|
import {
|
8
8
|
assert, undef, pass, rtrim, error, nonEmpty,
|
9
|
-
isRegExp, isFunction, croak,
|
9
|
+
isString, isRegExp, isFunction, croak,
|
10
10
|
} from '@jdeighan/coffee-utils'
|
11
11
|
import {log} from '@jdeighan/coffee-utils/log'
|
12
12
|
import {debug} from '@jdeighan/coffee-utils/debug'
|
@@ -34,6 +34,7 @@ export isSimpleFileName = (path) ->
|
|
34
34
|
|
35
35
|
export fileExt = (path) ->
|
36
36
|
|
37
|
+
assert isString(path), "fileExt(): path not a string"
|
37
38
|
if lMatches = path.match(/\.[A-Za-z0-9_]+$/)
|
38
39
|
return lMatches[0]
|
39
40
|
else
|
@@ -45,8 +46,14 @@ export fileExt = (path) ->
|
|
45
46
|
|
46
47
|
export mydir = (url) ->
|
47
48
|
|
48
|
-
|
49
|
-
|
49
|
+
debug "url = #{url}"
|
50
|
+
path = urllib.fileURLToPath(url)
|
51
|
+
debug "path = #{path}"
|
52
|
+
dir = pathlib.dirname(path)
|
53
|
+
debug "dir = #{dir}"
|
54
|
+
final = mkpath(dir)
|
55
|
+
debug "final = #{final}"
|
56
|
+
return final
|
50
57
|
|
51
58
|
# ---------------------------------------------------------------------------
|
52
59
|
|
@@ -129,6 +136,25 @@ export withExt = (path, newExt, hOptions={}) ->
|
|
129
136
|
name = name.substr(1)
|
130
137
|
return mkpath(dir, "#{name}#{newExt}")
|
131
138
|
|
139
|
+
# ---------------------------------------------------------------------------
|
140
|
+
# removeFileWithExt - remove file with different ext
|
141
|
+
|
142
|
+
export removeFileWithExt = (path, newExt, hOptions={}) ->
|
143
|
+
# --- Valid options:
|
144
|
+
# doLog
|
145
|
+
# removeLeadingUnderScore
|
146
|
+
|
147
|
+
fullpath = withExt(path, newExt, hOptions)
|
148
|
+
try
|
149
|
+
fs.unlinkSync fullpath
|
150
|
+
if hOptions.doLog
|
151
|
+
log " unlink #{filename}"
|
152
|
+
success = true
|
153
|
+
catch err
|
154
|
+
log " UNLINK FAILED: #{err.message}"
|
155
|
+
success = false
|
156
|
+
return success
|
157
|
+
|
132
158
|
# ---------------------------------------------------------------------------
|
133
159
|
# withUnderScore - add '_' to file name
|
134
160
|
|
package/src/fs_utils.js
CHANGED
@@ -13,6 +13,7 @@ import {
|
|
13
13
|
rtrim,
|
14
14
|
error,
|
15
15
|
nonEmpty,
|
16
|
+
isString,
|
16
17
|
isRegExp,
|
17
18
|
isFunction,
|
18
19
|
croak
|
@@ -46,6 +47,7 @@ export var isSimpleFileName = function(path) {
|
|
46
47
|
// ---------------------------------------------------------------------------
|
47
48
|
export var fileExt = function(path) {
|
48
49
|
var lMatches;
|
50
|
+
assert(isString(path), "fileExt(): path not a string");
|
49
51
|
if (lMatches = path.match(/\.[A-Za-z0-9_]+$/)) {
|
50
52
|
return lMatches[0];
|
51
53
|
} else {
|
@@ -57,9 +59,15 @@ export var fileExt = function(path) {
|
|
57
59
|
// mydir() - pass argument `import.meta.url` and it will return
|
58
60
|
// the directory your file is in
|
59
61
|
export var mydir = function(url) {
|
60
|
-
var dir;
|
61
|
-
|
62
|
-
|
62
|
+
var dir, final, path;
|
63
|
+
debug(`url = ${url}`);
|
64
|
+
path = urllib.fileURLToPath(url);
|
65
|
+
debug(`path = ${path}`);
|
66
|
+
dir = pathlib.dirname(path);
|
67
|
+
debug(`dir = ${dir}`);
|
68
|
+
final = mkpath(dir);
|
69
|
+
debug(`final = ${final}`);
|
70
|
+
return final;
|
63
71
|
};
|
64
72
|
|
65
73
|
// ---------------------------------------------------------------------------
|
@@ -148,6 +156,28 @@ export var withExt = function(path, newExt, hOptions = {}) {
|
|
148
156
|
return mkpath(dir, `${name}${newExt}`);
|
149
157
|
};
|
150
158
|
|
159
|
+
// ---------------------------------------------------------------------------
|
160
|
+
// removeFileWithExt - remove file with different ext
|
161
|
+
export var removeFileWithExt = function(path, newExt, hOptions = {}) {
|
162
|
+
var err, fullpath, success;
|
163
|
+
// --- Valid options:
|
164
|
+
// doLog
|
165
|
+
// removeLeadingUnderScore
|
166
|
+
fullpath = withExt(path, newExt, hOptions);
|
167
|
+
try {
|
168
|
+
fs.unlinkSync(fullpath);
|
169
|
+
if (hOptions.doLog) {
|
170
|
+
log(` unlink ${filename}`);
|
171
|
+
}
|
172
|
+
success = true;
|
173
|
+
} catch (error1) {
|
174
|
+
err = error1;
|
175
|
+
log(` UNLINK FAILED: ${err.message}`);
|
176
|
+
success = false;
|
177
|
+
}
|
178
|
+
return success;
|
179
|
+
};
|
180
|
+
|
151
181
|
// ---------------------------------------------------------------------------
|
152
182
|
// withUnderScore - add '_' to file name
|
153
183
|
export var withUnderScore = function(path) {
|
package/src/indent_utils.coffee
CHANGED
@@ -14,7 +14,7 @@ import {arrayToBlock, blockToArray} from '@jdeighan/coffee-utils/block'
|
|
14
14
|
export splitLine = (line) ->
|
15
15
|
|
16
16
|
assert line?, "splitLine(): line is undef"
|
17
|
-
assert (
|
17
|
+
assert isString(line), "splitLine(): line is not a string"
|
18
18
|
line = rtrim(line)
|
19
19
|
lMatches = line.match(/^(\s*)(.*)$/)
|
20
20
|
return [lMatches[1].length, lMatches[2]]
|
@@ -34,6 +34,7 @@ export indentation = (level) ->
|
|
34
34
|
|
35
35
|
export indentLevel = (str) ->
|
36
36
|
|
37
|
+
assert isString(str), "indentLevel(): not a string"
|
37
38
|
lMatches = str.match(/^\t*/)
|
38
39
|
return lMatches[0].length
|
39
40
|
|
@@ -76,6 +77,8 @@ export undented = (text, level=undef) ->
|
|
76
77
|
return ''
|
77
78
|
else if isArray(text)
|
78
79
|
lLines = text
|
80
|
+
for line in lLines
|
81
|
+
assert isString(line), "undented(): input array is not all strings"
|
79
82
|
if (lLines.length == 0)
|
80
83
|
return []
|
81
84
|
else
|
package/src/indent_utils.js
CHANGED
@@ -25,7 +25,7 @@ import {
|
|
25
25
|
export var splitLine = function(line) {
|
26
26
|
var lMatches;
|
27
27
|
assert(line != null, "splitLine(): line is undef");
|
28
|
-
assert(
|
28
|
+
assert(isString(line), "splitLine(): line is not a string");
|
29
29
|
line = rtrim(line);
|
30
30
|
lMatches = line.match(/^(\s*)(.*)$/);
|
31
31
|
return [lMatches[1].length, lMatches[2]];
|
@@ -44,6 +44,7 @@ export var indentation = function(level) {
|
|
44
44
|
// it's OK if the string is ONLY indentation
|
45
45
|
export var indentLevel = function(str) {
|
46
46
|
var lMatches;
|
47
|
+
assert(isString(str), "indentLevel(): not a string");
|
47
48
|
lMatches = str.match(/^\t*/);
|
48
49
|
return lMatches[0].length;
|
49
50
|
};
|
@@ -84,7 +85,7 @@ export var indented = function(input, level = 0) {
|
|
84
85
|
// indentation is removed
|
85
86
|
// - returns same type as text, i.e. either string or array
|
86
87
|
export var undented = function(text, level = undef) {
|
87
|
-
var i, lLines, lMatches, lNewLines, len, line, nToRemove, toRemove;
|
88
|
+
var i, j, lLines, lMatches, lNewLines, len, len1, line, nToRemove, toRemove;
|
88
89
|
if ((level != null) && (level === 0)) {
|
89
90
|
return text;
|
90
91
|
}
|
@@ -95,6 +96,10 @@ export var undented = function(text, level = undef) {
|
|
95
96
|
}
|
96
97
|
} else if (isArray(text)) {
|
97
98
|
lLines = text;
|
99
|
+
for (i = 0, len = lLines.length; i < len; i++) {
|
100
|
+
line = lLines[i];
|
101
|
+
assert(isString(line), "undented(): input array is not all strings");
|
102
|
+
}
|
98
103
|
if (lLines.length === 0) {
|
99
104
|
return [];
|
100
105
|
}
|
@@ -111,8 +116,8 @@ export var undented = function(text, level = undef) {
|
|
111
116
|
}
|
112
117
|
nToRemove = toRemove.length;
|
113
118
|
lNewLines = [];
|
114
|
-
for (
|
115
|
-
line = lLines[
|
119
|
+
for (j = 0, len1 = lLines.length; j < len1; j++) {
|
120
|
+
line = lLines[j];
|
116
121
|
if (isEmpty(line)) {
|
117
122
|
lNewLines.push('');
|
118
123
|
} else {
|
package/temp.js
CHANGED
@@ -1,16 +1,26 @@
|
|
1
1
|
// Generated by CoffeeScript 2.6.1
|
2
2
|
// temp.coffee
|
3
|
-
var
|
3
|
+
var dir;
|
4
4
|
|
5
5
|
import {
|
6
|
-
|
6
|
+
say
|
7
7
|
} from '@jdeighan/coffee-utils';
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
import {
|
10
|
+
log
|
11
|
+
} from '@jdeighan/coffee-utils/log';
|
12
|
+
|
13
|
+
import {
|
14
|
+
setDebugging
|
15
|
+
} from '@jdeighan/coffee-utils/debug';
|
16
|
+
|
17
|
+
import {
|
18
|
+
mydir,
|
19
|
+
mkpath
|
20
|
+
} from '@jdeighan/coffee-utils/fs';
|
21
|
+
|
22
|
+
setDebugging(true);
|
23
|
+
|
24
|
+
dir = mydir(import.meta.url);
|
15
25
|
|
16
|
-
|
26
|
+
say(`dir = ${dir}`);
|
package/.save/block.test.coffee
DELETED
@@ -1,185 +0,0 @@
|
|
1
|
-
# block.test.coffee
|
2
|
-
|
3
|
-
import assert from 'assert'
|
4
|
-
|
5
|
-
import {UnitTester} from '@jdeighan/coffee-utils/test'
|
6
|
-
import {
|
7
|
-
blockToArray, arrayToBlock, firstLine, remainingLines,
|
8
|
-
normalizeBlock, truncateBlock,
|
9
|
-
joinBlocks, forEachLine, forEachBlock, forEachSetOfBlocks,
|
10
|
-
} from '@jdeighan/coffee-utils/block'
|
11
|
-
|
12
|
-
simple = new UnitTester()
|
13
|
-
|
14
|
-
# ---------------------------------------------------------------------------
|
15
|
-
|
16
|
-
simple.equal 108, blockToArray("abc\nxyz\n"), [
|
17
|
-
'abc'
|
18
|
-
'xyz'
|
19
|
-
]
|
20
|
-
|
21
|
-
simple.equal 113, blockToArray("abc\nxyz\n\n\n\n"), [
|
22
|
-
'abc'
|
23
|
-
'xyz'
|
24
|
-
]
|
25
|
-
|
26
|
-
simple.equal 118, blockToArray("abc\n\nxyz\n"), [
|
27
|
-
'abc'
|
28
|
-
''
|
29
|
-
'xyz'
|
30
|
-
]
|
31
|
-
|
32
|
-
# ---------------------------------------------------------------------------
|
33
|
-
|
34
|
-
simple.equal 126, arrayToBlock(['a','b','c']), "a\nb\nc\n"
|
35
|
-
|
36
|
-
# ---------------------------------------------------------------------------
|
37
|
-
|
38
|
-
simple.equal 225, firstLine("""
|
39
|
-
#starbucks
|
40
|
-
do this
|
41
|
-
do that
|
42
|
-
"""), '#starbucks'
|
43
|
-
|
44
|
-
# ---------------------------------------------------------------------------
|
45
|
-
|
46
|
-
simple.equal 225, remainingLines("""
|
47
|
-
#starbucks
|
48
|
-
do this
|
49
|
-
do that
|
50
|
-
"""), """
|
51
|
-
do this
|
52
|
-
do that
|
53
|
-
"""
|
54
|
-
|
55
|
-
# ---------------------------------------------------------------------------
|
56
|
-
|
57
|
-
(() ->
|
58
|
-
str = joinBlocks('import me', '', 'do this\ndo that')
|
59
|
-
simple.equal 17, str, """
|
60
|
-
import me
|
61
|
-
do this
|
62
|
-
do that
|
63
|
-
"""
|
64
|
-
)()
|
65
|
-
|
66
|
-
# ---------------------------------------------------------------------------
|
67
|
-
|
68
|
-
simple.equal 49, normalizeBlock("""
|
69
|
-
line 1
|
70
|
-
line 2
|
71
|
-
"""), """
|
72
|
-
line 1
|
73
|
-
line 2
|
74
|
-
""" + '\n'
|
75
|
-
|
76
|
-
simple.equal 57, normalizeBlock("""
|
77
|
-
line 1
|
78
|
-
|
79
|
-
line 2
|
80
|
-
"""), """
|
81
|
-
line 1
|
82
|
-
line 2
|
83
|
-
""" + '\n'
|
84
|
-
|
85
|
-
simple.equal 66, normalizeBlock("""
|
86
|
-
|
87
|
-
line 1
|
88
|
-
|
89
|
-
line 2
|
90
|
-
|
91
|
-
|
92
|
-
"""), """
|
93
|
-
line 1
|
94
|
-
line 2
|
95
|
-
""" + '\n'
|
96
|
-
|
97
|
-
# ---------------------------------------------------------------------------
|
98
|
-
|
99
|
-
simple.equal 96, truncateBlock("""
|
100
|
-
line 1
|
101
|
-
line 2
|
102
|
-
line 3
|
103
|
-
line 4
|
104
|
-
""", 2), """
|
105
|
-
line 1
|
106
|
-
line 2
|
107
|
-
""" + '\n'
|
108
|
-
|
109
|
-
# ---------------------------------------------------------------------------
|
110
|
-
|
111
|
-
(() ->
|
112
|
-
lBlocks = [
|
113
|
-
"import {say} from '@jdeighan/coffee-utils'",
|
114
|
-
"",
|
115
|
-
"<script>\n\tx = 42\n</script>",
|
116
|
-
"",
|
117
|
-
]
|
118
|
-
str = joinBlocks(lBlocks...)
|
119
|
-
simple.equal 34, str, """
|
120
|
-
import {say} from '@jdeighan/coffee-utils'
|
121
|
-
<script>
|
122
|
-
x = 42
|
123
|
-
</script>
|
124
|
-
"""
|
125
|
-
)()
|
126
|
-
|
127
|
-
# ---------------------------------------------------------------------------
|
128
|
-
|
129
|
-
(() ->
|
130
|
-
lImports = [
|
131
|
-
"import {say} from '@jdeighan/coffee-utils'",
|
132
|
-
]
|
133
|
-
code = """
|
134
|
-
if (x==42)
|
135
|
-
log "line 2 in unit test"
|
136
|
-
"""
|
137
|
-
str = joinBlocks(lImports..., code)
|
138
|
-
simple.equal 34, str, """
|
139
|
-
|
140
|
-
import {say} from '@jdeighan/coffee-utils'
|
141
|
-
if (x==42)
|
142
|
-
log "line 2 in unit test"
|
143
|
-
"""
|
144
|
-
)()
|
145
|
-
|
146
|
-
# ---------------------------------------------------------------------------
|
147
|
-
# test forEachLine()
|
148
|
-
|
149
|
-
(() ->
|
150
|
-
lLines = []
|
151
|
-
|
152
|
-
callback = (line) ->
|
153
|
-
lLines.push line
|
154
|
-
return
|
155
|
-
|
156
|
-
filepath = "c:/Users/johnd/coffee-utils/test/data/file2.txt"
|
157
|
-
await forEachLine filepath, callback
|
158
|
-
|
159
|
-
simple.equal 55, lLines, [
|
160
|
-
"abc",
|
161
|
-
"def",
|
162
|
-
"ghi",
|
163
|
-
"jkl",
|
164
|
-
]
|
165
|
-
)()
|
166
|
-
|
167
|
-
# ---------------------------------------------------------------------------
|
168
|
-
# test forEachBlock()
|
169
|
-
|
170
|
-
(() ->
|
171
|
-
lBlocks = []
|
172
|
-
|
173
|
-
callback = (block) ->
|
174
|
-
lBlocks.push block
|
175
|
-
return
|
176
|
-
|
177
|
-
filepath = "c:/Users/johnd/coffee-utils/test/data/file3.txt"
|
178
|
-
await forEachBlock filepath, callback
|
179
|
-
|
180
|
-
simple.equal 76, lBlocks, [
|
181
|
-
"abc\ndef",
|
182
|
-
"abc\ndef\nghi",
|
183
|
-
"abc\ndef\nghi\njkl",
|
184
|
-
]
|
185
|
-
)()
|