@jdeighan/coffee-utils 16.0.23 → 17.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +4 -9
- package/src/lib/KeyedSet.js +2 -0
- package/src/lib/KeyedSet.js.map +13 -0
- package/src/lib/Section.js +2 -0
- package/src/lib/Section.js.map +13 -0
- package/src/lib/SectionMap.js +2 -0
- package/src/lib/SectionMap.js.map +13 -0
- package/src/lib/block.js +2 -0
- package/src/lib/block.js.map +13 -0
- package/src/lib/cssUtils.js +2 -0
- package/src/lib/cssUtils.js.map +13 -0
- package/src/lib/fs.coffee +76 -133
- package/src/lib/fs.js +95 -155
- package/src/lib/fs.js.map +13 -0
- package/src/lib/fsa.js +2 -0
- package/src/lib/fsa.js.map +13 -0
- package/src/lib/html.coffee +2 -2
- package/src/lib/html.js +8 -6
- package/src/lib/html.js.map +13 -0
- package/src/lib/server.js +2 -0
- package/src/lib/server.js.map +13 -0
- package/src/lib/indent.coffee +0 -199
- package/src/lib/indent.js +0 -216
package/src/lib/fs.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
// Generated by CoffeeScript 2.7.0
|
2
2
|
// fs.coffee
|
3
|
-
var fix, isSystemDir;
|
3
|
+
var fix, isHiddenDir, isSystemDir;
|
4
4
|
|
5
5
|
import os from 'os';
|
6
6
|
|
@@ -14,7 +14,7 @@ import {
|
|
14
14
|
readFile,
|
15
15
|
writeFile,
|
16
16
|
rm,
|
17
|
-
rmdir
|
17
|
+
rmdir
|
18
18
|
} from 'node:fs/promises';
|
19
19
|
|
20
20
|
import {
|
@@ -39,21 +39,26 @@ import {
|
|
39
39
|
toBlock,
|
40
40
|
getOptions,
|
41
41
|
isArrayOfStrings,
|
42
|
-
deepCopy
|
42
|
+
deepCopy,
|
43
|
+
runCmd
|
43
44
|
} from '@jdeighan/base-utils';
|
44
45
|
|
45
46
|
import {
|
47
|
+
fileExt,
|
46
48
|
mydir,
|
47
49
|
mkpath,
|
48
50
|
isFile,
|
49
|
-
|
50
|
-
rmFileSync,
|
51
|
-
mkdirSync,
|
52
|
-
forEachLineInFile,
|
53
|
-
fixPath,
|
54
|
-
rmFile,
|
51
|
+
mkDir,
|
55
52
|
rmDir,
|
56
|
-
|
53
|
+
rmFile,
|
54
|
+
forEachLineInFile,
|
55
|
+
isDir,
|
56
|
+
parsePath,
|
57
|
+
barf,
|
58
|
+
barfJSON,
|
59
|
+
slurp,
|
60
|
+
slurpJSON,
|
61
|
+
withExt
|
57
62
|
} from '@jdeighan/base-utils/fs';
|
58
63
|
|
59
64
|
import {
|
@@ -77,16 +82,21 @@ import {
|
|
77
82
|
} from '@jdeighan/base-utils/taml';
|
78
83
|
|
79
84
|
export {
|
85
|
+
fileExt,
|
80
86
|
mydir,
|
81
87
|
mkpath,
|
82
88
|
isFile,
|
83
|
-
|
84
|
-
rmFileSync,
|
85
|
-
mkdirSync,
|
86
|
-
forEachLineInFile,
|
89
|
+
mkDir,
|
87
90
|
rmDir,
|
88
|
-
|
89
|
-
|
91
|
+
rmFile,
|
92
|
+
forEachLineInFile,
|
93
|
+
isDir,
|
94
|
+
parsePath,
|
95
|
+
barf,
|
96
|
+
barfJSON,
|
97
|
+
slurp,
|
98
|
+
slurpJSON,
|
99
|
+
withExt
|
90
100
|
};
|
91
101
|
|
92
102
|
fix = true;
|
@@ -119,35 +129,7 @@ export var fixFile = async(filepath, func) => {
|
|
119
129
|
};
|
120
130
|
|
121
131
|
// --------------------------------------------------------------------------
|
122
|
-
export var
|
123
|
-
var contents, hJson, output;
|
124
|
-
contents = (await readFile(filepath, {
|
125
|
-
encoding: 'utf8'
|
126
|
-
}));
|
127
|
-
hJson = JSON.parse(contents);
|
128
|
-
func(hJson); // modify in place
|
129
|
-
output = JSON.stringify(hJson, null, 3);
|
130
|
-
output = fixOutput(output);
|
131
|
-
await writeFile(filepath, output, {
|
132
|
-
encoding: 'utf8'
|
133
|
-
});
|
134
|
-
};
|
135
|
-
|
136
|
-
// --------------------------------------------------------------------------
|
137
|
-
export var fixFileSync = (filepath, func) => {
|
138
|
-
var contents, output;
|
139
|
-
contents = fs.readFileSync(filepath, {
|
140
|
-
encoding: 'utf8'
|
141
|
-
});
|
142
|
-
output = func(contents); // returns modified contents
|
143
|
-
output = fixOutput(output);
|
144
|
-
fs.writeFileSync(filepath, output, {
|
145
|
-
encoding: 'utf8'
|
146
|
-
});
|
147
|
-
};
|
148
|
-
|
149
|
-
// --------------------------------------------------------------------------
|
150
|
-
export var fixJsonSync = (filepath, func) => {
|
132
|
+
export var fixJSON = (filepath, func) => {
|
151
133
|
var contents, hJson, output;
|
152
134
|
contents = fs.readFileSync(filepath, {
|
153
135
|
encoding: 'utf8'
|
@@ -161,22 +143,11 @@ export var fixJsonSync = (filepath, func) => {
|
|
161
143
|
});
|
162
144
|
};
|
163
145
|
|
164
|
-
// --------------------------------------------------------------------------
|
165
|
-
export var execCmdSync = (cmdLine) => {
|
166
|
-
execSync(cmdLine, {}, (error, stdout, stderr) => {
|
167
|
-
if (error) {
|
168
|
-
LOG(`ERROR in ${cmdLine}: ${error.code}`);
|
169
|
-
return process.exit(1);
|
170
|
-
}
|
171
|
-
});
|
172
|
-
return stdout;
|
173
|
-
};
|
174
|
-
|
175
146
|
// ---------------------------------------------------------------------------
|
176
147
|
export var cloneRepo = (user, repo, dir) => {
|
177
148
|
var git_repo;
|
178
149
|
git_repo = `https://github.com/${user}/${repo}.git`;
|
179
|
-
return
|
150
|
+
return runCmd(`git clone ${git_repo} ${dir}`);
|
180
151
|
};
|
181
152
|
|
182
153
|
// ---------------------------------------------------------------------------
|
@@ -235,17 +206,6 @@ export var fileStub = (path) => {
|
|
235
206
|
}
|
236
207
|
};
|
237
208
|
|
238
|
-
// ---------------------------------------------------------------------------
|
239
|
-
export var fileExt = (path) => {
|
240
|
-
var lMatches;
|
241
|
-
assert(isString(path), "fileExt(): path not a string");
|
242
|
-
if (lMatches = path.match(/\.[A-Za-z0-9_]+$/)) {
|
243
|
-
return lMatches[0];
|
244
|
-
} else {
|
245
|
-
return '';
|
246
|
-
}
|
247
|
-
};
|
248
|
-
|
249
209
|
// ---------------------------------------------------------------------------
|
250
210
|
export var getFullPath = (filepath) => {
|
251
211
|
return mkpath(pathlib.resolve(filepath));
|
@@ -321,18 +281,6 @@ export var forEachSetOfBlocks = (filepath, func, block_regexp = /^-{16,}$/, set_
|
|
321
281
|
dbgReturn('forEachSetOfBlocks');
|
322
282
|
};
|
323
283
|
|
324
|
-
// ---------------------------------------------------------------------------
|
325
|
-
// withExt - change file extention in a file name
|
326
|
-
export var withExt = (path, newExt) => {
|
327
|
-
var dir, ext, name;
|
328
|
-
assert(newExt, "withExt(): No newExt provided");
|
329
|
-
if (newExt.indexOf('.') !== 0) {
|
330
|
-
newExt = '.' + newExt;
|
331
|
-
}
|
332
|
-
({dir, name, ext} = pathlib.parse(path));
|
333
|
-
return mkpath(dir, `${name}${newExt}`);
|
334
|
-
};
|
335
|
-
|
336
284
|
// ---------------------------------------------------------------------------
|
337
285
|
// removeFileWithExt - remove file with different ext
|
338
286
|
export var removeFileWithExt = (path, newExt, hOptions = {}) => {
|
@@ -347,14 +295,22 @@ export var removeFileWithExt = (path, newExt, hOptions = {}) => {
|
|
347
295
|
LOG(` unlink ${filename}`);
|
348
296
|
}
|
349
297
|
success = true;
|
350
|
-
} catch (
|
351
|
-
err =
|
298
|
+
} catch (error) {
|
299
|
+
err = error;
|
352
300
|
LOG(` UNLINK FAILED: ${err.message}`);
|
353
301
|
success = false;
|
354
302
|
}
|
355
303
|
return success;
|
356
304
|
};
|
357
305
|
|
306
|
+
// ---------------------------------------------------------------------------
|
307
|
+
isHiddenDir = function(dir) {
|
308
|
+
var base, hFileInfo;
|
309
|
+
hFileInfo = parsePath(dir);
|
310
|
+
base = hFileInfo.lDirs.pop();
|
311
|
+
return base.substring(0, 1) === '.';
|
312
|
+
};
|
313
|
+
|
358
314
|
// ---------------------------------------------------------------------------
|
359
315
|
isSystemDir = function(dir) {
|
360
316
|
return dir === '$Recycle.Bin' || dir === '$WinREAgent';
|
@@ -362,14 +318,32 @@ isSystemDir = function(dir) {
|
|
362
318
|
|
363
319
|
// ---------------------------------------------------------------------------
|
364
320
|
// Get all subdirectories of a directory
|
321
|
+
// don't return hidden or system subdirectories
|
322
|
+
// Return value is just named, not full paths
|
365
323
|
export var getSubDirs = (dir) => {
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
324
|
+
var doInclude, hOptions, lSubDirs;
|
325
|
+
dbgEnter('getSubDirs', dir);
|
326
|
+
assert(isDir(dir), "not a directory");
|
327
|
+
doInclude = function(d) {
|
328
|
+
var dirName;
|
329
|
+
if (!d.isDirectory()) {
|
330
|
+
return false;
|
331
|
+
}
|
332
|
+
dirName = d.name;
|
333
|
+
if (isSystemDir(dirName) || (dirName.substring(0, 1) === '.')) {
|
334
|
+
return false;
|
335
|
+
}
|
336
|
+
return true;
|
337
|
+
};
|
338
|
+
hOptions = {
|
339
|
+
withFileTypes: true,
|
340
|
+
recursive: false
|
341
|
+
};
|
342
|
+
lSubDirs = fs.readdirSync(dir, hOptions).filter(doInclude).map(function(d) {
|
343
|
+
return d.name;
|
372
344
|
}).sort();
|
345
|
+
dbgReturn('getSubDirs', lSubDirs);
|
346
|
+
return lSubDirs;
|
373
347
|
};
|
374
348
|
|
375
349
|
// ---------------------------------------------------------------------------
|
@@ -423,43 +397,56 @@ export var forEachFile = (dir, cb, filt = undef, level = 0) => {
|
|
423
397
|
};
|
424
398
|
|
425
399
|
// ---------------------------------------------------------------------------
|
426
|
-
export var pathTo = (fname, searchDir,
|
427
|
-
var dirPath, direction, directory, filepath, fpath, i, len, nLevels,
|
428
|
-
(
|
400
|
+
export var pathTo = (fname, searchDir, hOptions = {}) => {
|
401
|
+
var dirPath, direction, directory, filepath, fpath, i, lSubDirs, len, nLevels, relative, result, subdir;
|
402
|
+
dbgEnter('pathTo', fname, searchDir, hOptions);
|
403
|
+
({direction, relative, directory} = getOptions(hOptions, {
|
429
404
|
direction: 'down',
|
430
405
|
relative: false,
|
431
406
|
directory: false // return only the directory the file is in
|
432
407
|
}));
|
408
|
+
dbg(`direction = ${direction}`);
|
409
|
+
dbg(`relative = ${relative}`);
|
410
|
+
dbg(`directory = ${directory}`);
|
433
411
|
assert(!(relative && directory), "relative & directory are incompatible");
|
434
412
|
if (!searchDir) {
|
435
413
|
searchDir = process.cwd();
|
436
414
|
}
|
437
415
|
assert(isDir(searchDir), `Not a directory: ${OL(searchDir)}`);
|
416
|
+
// --- first check if the file is in searchDir
|
438
417
|
filepath = mkpath(searchDir, fname);
|
439
418
|
if (isFile(filepath)) {
|
440
419
|
if (relative) {
|
441
|
-
|
420
|
+
result = `./${fname}`;
|
442
421
|
} else if (directory) {
|
443
|
-
|
422
|
+
result = mkpath(searchDir);
|
444
423
|
} else {
|
445
|
-
|
424
|
+
result = mkpath(filepath);
|
446
425
|
}
|
426
|
+
dbgReturn('pathTo', result);
|
427
|
+
return result;
|
447
428
|
}
|
429
|
+
dbg(`not found in searchDir '${searchDir}'`);
|
448
430
|
if (direction === 'down') {
|
449
|
-
ref = getSubDirs(searchDir);
|
450
431
|
// --- Search all directories in this directory
|
451
432
|
// getSubDirs() returns dirs sorted alphabetically
|
452
|
-
|
453
|
-
|
433
|
+
lSubDirs = getSubDirs(searchDir);
|
434
|
+
dbg('lSubDirs', lSubDirs);
|
435
|
+
for (i = 0, len = lSubDirs.length; i < len; i++) {
|
436
|
+
subdir = lSubDirs[i];
|
437
|
+
// --- subdir is a simple name, not a full path
|
454
438
|
dirPath = mkpath(searchDir, subdir);
|
455
|
-
|
439
|
+
fpath = pathTo(fname, dirPath, hOptions);
|
440
|
+
if (defined(fpath)) {
|
456
441
|
if (relative) {
|
457
|
-
|
442
|
+
result = fpath.replace('./', `./${subdir}/`);
|
458
443
|
} else if (directory) {
|
459
|
-
|
444
|
+
result = mkpath(dirPath);
|
460
445
|
} else {
|
461
|
-
|
446
|
+
result = mkpath(fpath);
|
462
447
|
}
|
448
|
+
dbgReturn('pathTo', result);
|
449
|
+
return result;
|
463
450
|
}
|
464
451
|
}
|
465
452
|
} else if (direction === 'up') {
|
@@ -469,18 +456,21 @@ export var pathTo = (fname, searchDir, options = undef) => {
|
|
469
456
|
fpath = mkpath(dirPath, fname);
|
470
457
|
if (isFile(fpath)) {
|
471
458
|
if (relative) {
|
472
|
-
|
459
|
+
result = "../".repeat(nLevels) + fname;
|
473
460
|
} else if (directory) {
|
474
|
-
|
461
|
+
result = mkpath(dirPath);
|
475
462
|
} else {
|
476
|
-
|
463
|
+
result = mkpath(fpath);
|
477
464
|
}
|
465
|
+
dbgReturn('pathTo', result);
|
466
|
+
return result;
|
478
467
|
}
|
479
468
|
searchDir = dirPath;
|
480
469
|
}
|
481
470
|
} else {
|
482
471
|
croak(`pathTo(): Invalid direction '${direction}'`);
|
483
472
|
}
|
473
|
+
dbgReturn('pathTo', undef);
|
484
474
|
return undef;
|
485
475
|
};
|
486
476
|
|
@@ -536,55 +526,5 @@ export var shortenPath = (path) => {
|
|
536
526
|
};
|
537
527
|
|
538
528
|
// ---------------------------------------------------------------------------
|
539
|
-
export var parseSource = (source) => {
|
540
|
-
var dir, hInfo, hSourceInfo, lMatches;
|
541
|
-
// --- returns {
|
542
|
-
// dir
|
543
|
-
// filename
|
544
|
-
// fullpath
|
545
|
-
// stub
|
546
|
-
// ext
|
547
|
-
// purpose
|
548
|
-
// }
|
549
|
-
// --- NOTE: source may be a file URL, e.g. import.meta.url
|
550
|
-
dbgEnter("parseSource", source);
|
551
|
-
assert(isString(source), `parseSource(): source not a string: ${OL(source)}`);
|
552
|
-
if (source === 'unit test') {
|
553
|
-
croak("A source of 'unit test' is deprecated");
|
554
|
-
}
|
555
|
-
if (source.match(/^file\:\/\//)) {
|
556
|
-
source = urllib.fileURLToPath(source);
|
557
|
-
}
|
558
|
-
if (isDir(source)) {
|
559
|
-
hSourceInfo = {
|
560
|
-
dir: source,
|
561
|
-
fullpath: source
|
562
|
-
};
|
563
|
-
} else {
|
564
|
-
hInfo = pathlib.parse(source);
|
565
|
-
if (hInfo.dir) {
|
566
|
-
dir = mkpath(hInfo.dir); // change \ to /
|
567
|
-
hSourceInfo = {
|
568
|
-
dir,
|
569
|
-
fullpath: mkpath(dir, hInfo.base),
|
570
|
-
filename: hInfo.base,
|
571
|
-
stub: hInfo.name,
|
572
|
-
ext: hInfo.ext
|
573
|
-
};
|
574
|
-
} else {
|
575
|
-
hSourceInfo = {
|
576
|
-
filename: hInfo.base,
|
577
|
-
stub: hInfo.name,
|
578
|
-
ext: hInfo.ext
|
579
|
-
};
|
580
|
-
}
|
581
|
-
// --- check for a 'purpose'
|
582
|
-
if (lMatches = hSourceInfo.stub.match(/\.([A-Za-z_]+)$/)) {
|
583
|
-
hSourceInfo.purpose = lMatches[1];
|
584
|
-
}
|
585
|
-
}
|
586
|
-
dbgReturn("parseSource", hSourceInfo);
|
587
|
-
return hSourceInfo;
|
588
|
-
};
|
589
529
|
|
590
|
-
|
530
|
+
//# sourceMappingURL=fs.js.map
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "fs.js",
|
4
|
+
"sourceRoot": "..\\..\\",
|
5
|
+
"sources": [
|
6
|
+
"src\\lib\\fs.coffee"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": "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",
|
10
|
+
"sourcesContent": [
|
11
|
+
"# fs.coffee\r\n\r\nimport os from 'os'\r\nimport pathlib from 'path'\r\nimport urllib from 'url'\r\nimport fs from 'fs'\r\nimport {\r\n\treadFile, writeFile, rm, rmdir,\r\n\t} from 'node:fs/promises'\r\nimport {execSync} from 'node:child_process'\r\n\r\nimport {\r\n\tundef, pass, defined, notdefined, rtrim, isEmpty, nonEmpty,\r\n\tisString, isArray, isHash, isRegExp, isFunction, isBoolean,\r\n\tOL, toBlock, getOptions, isArrayOfStrings, deepCopy,\r\n\trunCmd,\r\n\t} from '@jdeighan/base-utils'\r\nimport {\r\n\tfileExt, mydir, mkpath, isFile, mkDir, rmDir, rmFile,\r\n\tforEachLineInFile, isDir, parsePath,\r\n\tbarf, barfJSON, slurp, slurpJSON, withExt,\r\n\t} from '@jdeighan/base-utils/fs'\r\nimport {assert, croak} from '@jdeighan/base-utils/exceptions'\r\nimport {LOG, LOGVALUE} from '@jdeighan/base-utils/log'\r\nimport {dbg, dbgEnter, dbgReturn} from '@jdeighan/base-utils/debug'\r\nimport {fromTAML} from '@jdeighan/base-utils/taml'\r\n\r\nexport {\r\n\tfileExt, mydir, mkpath, isFile, mkDir, rmDir, rmFile,\r\n\tforEachLineInFile, isDir, parsePath,\r\n\tbarf, barfJSON, slurp, slurpJSON, withExt,\r\n\t}\r\n\r\nfix = true\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport doFixOutput = (flag=true) =>\r\n\r\n\tfix = flag\r\n\treturn\r\n\r\n# --------------------------------------------------------------------------\r\n\r\nexport fixOutput = (contents) =>\r\n\r\n\tif fix && isString(contents)\r\n\t\treturn rtrim(contents) + \"\\n\"\r\n\telse\r\n\t\treturn contents\r\n\r\n# --------------------------------------------------------------------------\r\n\r\nexport fixFile = (filepath, func) =>\r\n\r\n\tcontents = await readFile(filepath, {encoding: 'utf8'})\r\n\toutput = func(contents) # returns modified contents\r\n\toutput = fixOutput(output)\r\n\tawait writeFile(filepath, output, {encoding: 'utf8'})\r\n\treturn\r\n\r\n# --------------------------------------------------------------------------\r\n\r\nexport fixJSON = (filepath, func) =>\r\n\r\n\tcontents = fs.readFileSync(filepath, {encoding: 'utf8'})\r\n\thJson = JSON.parse(contents)\r\n\tfunc(hJson) # modify in place\r\n\toutput = JSON.stringify(hJson, null, 3)\r\n\toutput = fixOutput(output)\r\n\tfs.writeFileSync(filepath, output, {encoding: 'utf8'})\r\n\treturn\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport cloneRepo = (user, repo, dir) =>\r\n\r\n\tgit_repo = \"https://github.com/#{user}/#{repo}.git\"\r\n\treturn runCmd \"git clone #{git_repo} #{dir}\"\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport homeDir = () =>\r\n\r\n\treturn mkpath(os.homedir())\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport projRoot = (url) =>\r\n\r\n\tdir = mydir(url)\r\n\trootDir = pathTo('package.json', dir, 'direction=up directory')\r\n\tassert defined(rootDir), \"No project root directory found\"\r\n\treturn rootDir\r\n\r\n# ---------------------------------------------------------------------------\r\n# myfile() - pass argument import.meta.url and it will return\r\n# the name of your file\r\n\r\nexport myfile = (url) =>\r\n\r\n\tpath = urllib.fileURLToPath(url)\r\n\tfilename = pathlib.parse(path).base\r\n\treturn filename\r\n\r\n# ---------------------------------------------------------------------------\r\n# myfullpath() - pass argument import.meta.url and it will return\r\n# the full path to your file\r\n\r\nexport myfullpath = (url) =>\r\n\r\n\tpath = urllib.fileURLToPath(url)\r\n\treturn mkpath(path)\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport getStats = (fullpath) =>\r\n\r\n\treturn fs.lstatSync(fullpath)\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport isSimpleFileName = (path) =>\r\n\r\n\th = pathlib.parse(path)\r\n\treturn ! h.root && ! h.dir && h.base\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport fileStub = (path) =>\r\n\r\n\tassert isString(path), \"fileStub(): path not a string\"\r\n\tif lMatches = path.match(/^(.*)\\.[A-Za-z0-9_]+$/)\r\n\t\treturn lMatches[1]\r\n\telse\r\n\t\treturn ''\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport getFullPath = (filepath) =>\r\n\r\n\treturn mkpath(pathlib.resolve(filepath))\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport forEachBlock = (filepath, func, regexp = /^-{16,}$/) =>\r\n\r\n\tlLines = []\r\n\tfirstLineNum = 1\r\n\tearlyExit = false\r\n\r\n\tcallback = (line, lineNum) ->\r\n\t\tif (line.match(regexp))\r\n\t\t\tif result = func(lLines.join('\\n'), firstLineNum, line)\r\n\t\t\t\tif (result == true)\r\n\t\t\t\t\tearlyExit = true\r\n\t\t\t\t\treturn true\r\n\t\t\t\telse if defined(result)\r\n\t\t\t\t\tcroak \"forEachBlock() - callback returned '#{result}'\"\r\n\t\t\tlLines = []\r\n\t\t\tfirstLineNum = lineNum+1\r\n\t\telse\r\n\t\t\tlLines.push line\r\n\t\treturn false\r\n\r\n\tforEachLineInFile filepath, callback\r\n\tif ! earlyExit\r\n\t\tfunc(lLines.join('\\n'), firstLineNum)\r\n\treturn\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport forEachSetOfBlocks = (filepath, func, \\\r\n\t\tblock_regexp = /^-{16,}$/, \\\r\n\t\tset_regexp = /^={16,}$/) \\\r\n\t\t=>\r\n\r\n\tdbgEnter 'forEachSetOfBlocks', filepath\r\n\tlBlocks = []\r\n\tlLines = []\r\n\tfirstLineNum = 1\r\n\tearlyExit = false\r\n\r\n\tcallback = (line, hContext) ->\r\n\t\tdbgEnter 'callback', line, hContext.lineNum\r\n\t\tlineNum = hContext.lineNum\r\n\t\tif (line.match(set_regexp))\r\n\t\t\tlBlocks.push(lLines.join('\\n'))\r\n\t\t\tlLines = []\r\n\t\t\tresult = func(deepCopy(lBlocks), firstLineNum, line)\r\n\t\t\tif (result == true)\r\n\t\t\t\tearlyExit = true\r\n\t\t\t\tdbgReturn 'callback', true\r\n\t\t\t\treturn true\r\n\t\t\tlBlocks = []\r\n\t\t\tfirstLineNum = lineNum+1\r\n\t\telse if (line.match(block_regexp))\r\n\t\t\tlBlocks.push(lLines.join('\\n'))\r\n\t\t\tlLines = []\r\n\t\telse\r\n\t\t\tlLines.push line\r\n\t\tdbgReturn 'callback', false\r\n\t\treturn false\r\n\r\n\tforEachLineInFile filepath, callback\r\n\tif ! earlyExit\r\n\t\tlBlocks.push(lLines.join('\\n'))\r\n\t\tfunc(lBlocks, firstLineNum)\r\n\tdbgReturn 'forEachSetOfBlocks'\r\n\treturn\r\n\r\n# ---------------------------------------------------------------------------\r\n# removeFileWithExt - remove file with different ext\r\n\r\nexport removeFileWithExt = (path, newExt, hOptions={}) =>\r\n\t# --- Valid options:\r\n\t# doLog\r\n\r\n\t{doLog} = getOptions(hOptions)\r\n\tfullpath = withExt(path, newExt)\r\n\ttry\r\n\t\tfs.unlinkSync fullpath\r\n\t\tif doLog\r\n\t\t\tLOG \" unlink #{filename}\"\r\n\t\tsuccess = true\r\n\tcatch err\r\n\t\tLOG \" UNLINK FAILED: #{err.message}\"\r\n\t\tsuccess = false\r\n\treturn success\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nisHiddenDir = (dir) ->\r\n\r\n\thFileInfo = parsePath(dir)\r\n\tbase = hFileInfo.lDirs.pop()\r\n\treturn (base.substring(0, 1) == '.')\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nisSystemDir = (dir) ->\r\n\r\n\treturn dir in ['$Recycle.Bin', '$WinREAgent']\r\n\r\n# ---------------------------------------------------------------------------\r\n# Get all subdirectories of a directory\r\n# don't return hidden or system subdirectories\r\n# Return value is just named, not full paths\r\n\r\nexport getSubDirs = (dir) =>\r\n\r\n\tdbgEnter 'getSubDirs', dir\r\n\tassert isDir(dir), \"not a directory\"\r\n\r\n\tdoInclude = (d) ->\r\n\t\tif !d.isDirectory()\r\n\t\t\treturn false\r\n\t\tdirName = d.name\r\n\t\tif isSystemDir(dirName) || (dirName.substring(0,1) == '.')\r\n\t\t\treturn false\r\n\t\treturn true\r\n\r\n\thOptions = {\r\n\t\twithFileTypes: true\r\n\t\trecursive: false\r\n\t\t}\r\n\tlSubDirs = fs.readdirSync(dir, hOptions) \\\r\n\t\t\t.filter(doInclude) \\\r\n\t\t\t.map((d) -> d.name) \\\r\n\t\t\t.sort()\r\n\tdbgReturn 'getSubDirs', lSubDirs\r\n\treturn lSubDirs\r\n\r\n# ---------------------------------------------------------------------------\r\n# Get path to parent directory of a directory\r\n\r\nexport getParentDir = (dir) =>\r\n\r\n\thParts = pathlib.parse(dir)\r\n\tif (hParts.dir == hParts.root)\r\n\t\treturn undef\r\n\treturn mkpath(pathlib.resolve(dir, '..'))\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport forEachFile = (dir, cb, filt=undef, level=0) =>\r\n\t# --- filt can be a regular expression or a function that gets:\r\n\t# (filename, dir, level)\r\n\t# callback will get parms (filename, dir, level)\r\n\r\n\tlSubDirectories = []\r\n\tfor ent in fs.readdirSync(dir, {withFileTypes: true})\r\n\t\tif ent.isDirectory()\r\n\t\t\tlSubDirectories.push ent\r\n\t\telse if ent.isFile()\r\n\t\t\tif notdefined(filt)\r\n\t\t\t\tcb(ent.name, dir, level)\r\n\t\t\telse if isRegExp(filt)\r\n\t\t\t\tif ent.name.match(filt)\r\n\t\t\t\t\tcb(ent.name, dir, level)\r\n\t\t\telse if isFunction(filt)\r\n\t\t\t\tif filt(ent.name, dir, level)\r\n\t\t\t\t\tcb(ent.name, dir, level)\r\n\t\t\telse\r\n\t\t\t\tcroak \"forEachFile(): bad filter\", 'filter', filt\r\n\tif nonEmpty(lSubDirectories)\r\n\t\tfor subdir in lSubDirectories.sort()\r\n\t\t\tforEachFile(mkpath(dir, subdir.name), cb, filt, level+1)\r\n\treturn\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport pathTo = (fname, searchDir, hOptions={}) =>\r\n\r\n\tdbgEnter 'pathTo', fname, searchDir, hOptions\r\n\t{direction, relative, directory} = getOptions(hOptions, {\r\n\t\tdirection: 'down'\r\n\t\trelative: false\r\n\t\tdirectory: false # return only the directory the file is in\r\n\t\t})\r\n\tdbg \"direction = #{direction}\"\r\n\tdbg \"relative = #{relative}\"\r\n\tdbg \"directory = #{directory}\"\r\n\r\n\tassert !(relative && directory),\r\n\t\t\t\"relative & directory are incompatible\"\r\n\tif ! searchDir\r\n\t\tsearchDir = process.cwd()\r\n\tassert isDir(searchDir), \"Not a directory: #{OL(searchDir)}\"\r\n\r\n\t# --- first check if the file is in searchDir\r\n\r\n\tfilepath = mkpath(searchDir, fname)\r\n\tif isFile(filepath)\r\n\t\tif relative\r\n\t\t\tresult = \"./#{fname}\"\r\n\t\telse if directory\r\n\t\t\tresult = mkpath(searchDir)\r\n\t\telse\r\n\t\t\tresult = mkpath(filepath)\r\n\t\tdbgReturn 'pathTo', result\r\n\t\treturn result\r\n\r\n\tdbg \"not found in searchDir '#{searchDir}'\"\r\n\r\n\tif (direction == 'down')\r\n\t\t# --- Search all directories in this directory\r\n\t\t# getSubDirs() returns dirs sorted alphabetically\r\n\t\tlSubDirs = getSubDirs(searchDir)\r\n\t\tdbg 'lSubDirs', lSubDirs\r\n\t\tfor subdir in lSubDirs\r\n\t\t\t# --- subdir is a simple name, not a full path\r\n\t\t\tdirPath = mkpath(searchDir, subdir)\r\n\t\t\tfpath = pathTo(fname, dirPath, hOptions)\r\n\t\t\tif defined(fpath)\r\n\t\t\t\tif relative\r\n\t\t\t\t\tresult = fpath.replace('./', \"./#{subdir}/\")\r\n\t\t\t\telse if directory\r\n\t\t\t\t\tresult = mkpath(dirPath)\r\n\t\t\t\telse\r\n\t\t\t\t\tresult = mkpath(fpath)\r\n\t\t\t\tdbgReturn 'pathTo', result\r\n\t\t\t\treturn result\r\n\telse if (direction == 'up')\r\n\t\tnLevels = 0\r\n\t\twhile defined(dirPath = getParentDir(searchDir))\r\n\t\t\tnLevels += 1\r\n\t\t\tfpath = mkpath(dirPath, fname)\r\n\t\t\tif isFile(fpath)\r\n\t\t\t\tif relative\r\n\t\t\t\t\tresult = \"../\".repeat(nLevels) + fname\r\n\t\t\t\telse if directory\r\n\t\t\t\t\tresult = mkpath(dirPath)\r\n\t\t\t\telse\r\n\t\t\t\t\tresult = mkpath(fpath)\r\n\t\t\t\tdbgReturn 'pathTo', result\r\n\t\t\t\treturn result\r\n\t\t\tsearchDir = dirPath\r\n\telse\r\n\t\tcroak \"pathTo(): Invalid direction '#{direction}'\"\r\n\tdbgReturn 'pathTo', undef\r\n\treturn undef\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport allPathsTo = (fname, searchDir) =>\r\n\t# --- Only searches upward\r\n\r\n\tif ! searchDir\r\n\t\tsearchDir = process.cwd()\r\n\tpath = pathTo(fname, searchDir, {direction: \"up\"})\r\n\tif defined(path)\r\n\t\tlPaths = [path] # --- build an array of paths\r\n\t\t# --- search upward for files, but return ordered top down\r\n\t\twhile (h = pathlib.parse(path)) \\\r\n\t\t\t\t&& (path = pathTo(fname, pathlib.resolve(h.dir, '..'), {direction: \"up\"}))\r\n\t\t\tlPaths.unshift path\r\n\t\treturn lPaths\r\n\telse\r\n\t\treturn []\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport newerDestFileExists = (srcPath, destPath) =>\r\n\r\n\tif ! fs.existsSync(destPath)\r\n\t\treturn false\r\n\tsrcModTime = fs.statSync(srcPath).mtimeMs\r\n\tdestModTime = fs.statSync(destPath).mtimeMs\r\n\tif destModTime >= srcModTime\r\n\t\treturn true\r\n\telse\r\n\t\treturn false\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport shortenPath = (path) =>\r\n\t# --- Replace user's home dir with '~'\r\n\r\n\tstr = mkpath(path)\r\n\tif lMatches = str.match(///^\r\n\t\t\t[A-Za-z]:/Users/[a-z_][a-z0-9_]*/(.*)\r\n\t\t\t$///i)\r\n\t\t[_, tail] = lMatches\r\n\t\treturn \"~/#{tail}\"\r\n\telse\r\n\t\treturn str\r\n\r\n# ---------------------------------------------------------------------------\r\n"
|
12
|
+
]
|
13
|
+
}
|
package/src/lib/fsa.js
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "fsa.js",
|
4
|
+
"sourceRoot": "..\\..\\",
|
5
|
+
"sources": [
|
6
|
+
"src\\lib\\fsa.coffee"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": "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",
|
10
|
+
"sourcesContent": [
|
11
|
+
"# fsa.coffee\r\n\r\nimport {assert, croak} from '@jdeighan/base-utils/exceptions'\r\nimport {LOG} from '@jdeighan/base-utils/log'\r\nimport {dbg, dbgEnter, dbgReturn} from '@jdeighan/base-utils/debug'\r\nimport {\r\n\tundef, defined, notdefined, words, isEmpty, nonEmpty,\r\n\tisString, OL, toArray,\r\n\t} from '@jdeighan/base-utils'\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport class FSA\r\n\r\n\tconstructor: (block) ->\r\n\r\n\t\tdbgEnter \"FSA\", block\r\n\t\tassert isString(block), \"block not a string\"\r\n\t\t@hTransitions = {}\r\n\t\tlLines = toArray(block, 'noEmptyLines')\r\n\t\tdbg 'lLines', lLines\r\n\t\tfor line,i in lLines\r\n\t\t\tdbg \"LINE #{i}\", line\r\n\t\t\tlWords = words(line)\r\n\t\t\tif (lWords.length == 3)\r\n\t\t\t\t[bState, token, eState] = lWords\r\n\t\t\t\toutput = undef\r\n\t\t\telse if (lWords.length == 4)\r\n\t\t\t\t[bState, token, eState, output] = lWords\r\n\t\t\telse\r\n\t\t\t\tcroak \"Invalid desc: #{OL(line)}\"\r\n\t\t\tdbg \"LINE #{i}: #{OL(bState)} #{OL(token)} #{OL(eState)} #{OL(output)}\"\r\n\t\t\tassert nonEmpty(eState), \"Invalid FSA description #{i}\"\r\n\r\n\t\t\t# --- tokens may be quoted (but may not contain whitespace),\r\n\t\t\t# but the quotes are stripped\r\n\t\t\tif (i == 0)\r\n\t\t\t\tassert (bState == 'start'), \"Invalid FSA description #{i}\"\r\n\t\t\ttoken = @fixToken(token)\r\n\t\t\tdbg 'token', token\r\n\t\t\tif isEmpty(output)\r\n\t\t\t\toutput = undef\r\n\t\t\thTrans = @hTransitions[bState]\r\n\t\t\tif notdefined(hTrans)\r\n\t\t\t\thTrans = @hTransitions[bState] = {}\r\n\t\t\tassert notdefined(hTrans[token]), \"Duplicate transition\"\r\n\t\t\thTrans[token] = [eState, output]\r\n\t\tdbg 'hTransitions', @hTransitions\r\n\t\t@curState = 'start'\r\n\t\tdbgReturn \"FSA\"\r\n\r\n\t# ..........................................................\r\n\r\n\tfixToken: (token) ->\r\n\r\n\t\tif lMatches = token.match(/^\\'(.*)\\'$/)\r\n\t\t\treturn lMatches[1]\r\n\t\telse if lMatches = token.match(/^\\\"(.*)\\\"$/)\r\n\t\t\treturn lMatches[1]\r\n\t\telse\r\n\t\t\treturn token\r\n\r\n\t# ..........................................................\r\n\r\n\tgot: (token) ->\r\n\t\t# --- returns pair [newState, output]\r\n\r\n\t\thTrans = @hTransitions[@curState]\r\n\t\tif notdefined(hTrans)\r\n\t\t\treturn [undef, undef]\r\n\t\tresult = hTrans[token]\r\n\t\tif notdefined(result)\r\n\t\t\treturn [undef, undef]\r\n\t\t[newState, output] = result\r\n\t\tassert nonEmpty(newState), \"Failed: #{@curState} -> #{token}\"\r\n\t\t@curState = newState\r\n\t\treturn result\r\n\r\n\t# ..........................................................\r\n\r\n\tstate: () ->\r\n\t\treturn @curState\r\n"
|
12
|
+
]
|
13
|
+
}
|
package/src/lib/html.coffee
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# html.coffee
|
2
2
|
|
3
|
-
import {assert, croak} from '@jdeighan/base-utils/exceptions'
|
4
3
|
import {
|
5
4
|
undef, defined, notdefined, words, isEmpty, nonEmpty,
|
6
5
|
toBlock, OL, getOptions,
|
7
6
|
} from '@jdeighan/base-utils'
|
7
|
+
import {assert, croak} from '@jdeighan/base-utils/exceptions'
|
8
8
|
import {dbgEnter, dbgReturn, dbg} from '@jdeighan/base-utils/debug'
|
9
|
-
import {indented} from '@jdeighan/
|
9
|
+
import {indented} from '@jdeighan/base-utils/indent'
|
10
10
|
|
11
11
|
hNoEnd = {}
|
12
12
|
for tagName in words('area base br col command embed hr img input' \
|
package/src/lib/html.js
CHANGED
@@ -2,11 +2,6 @@
|
|
2
2
|
// html.coffee
|
3
3
|
var hNoEnd, i, len, ref, tagName;
|
4
4
|
|
5
|
-
import {
|
6
|
-
assert,
|
7
|
-
croak
|
8
|
-
} from '@jdeighan/base-utils/exceptions';
|
9
|
-
|
10
5
|
import {
|
11
6
|
undef,
|
12
7
|
defined,
|
@@ -19,6 +14,11 @@ import {
|
|
19
14
|
getOptions
|
20
15
|
} from '@jdeighan/base-utils';
|
21
16
|
|
17
|
+
import {
|
18
|
+
assert,
|
19
|
+
croak
|
20
|
+
} from '@jdeighan/base-utils/exceptions';
|
21
|
+
|
22
22
|
import {
|
23
23
|
dbgEnter,
|
24
24
|
dbgReturn,
|
@@ -27,7 +27,7 @@ import {
|
|
27
27
|
|
28
28
|
import {
|
29
29
|
indented
|
30
|
-
} from '@jdeighan/
|
30
|
+
} from '@jdeighan/base-utils/indent';
|
31
31
|
|
32
32
|
hNoEnd = {};
|
33
33
|
|
@@ -282,3 +282,5 @@ col track source`);
|
|
282
282
|
dbgReturn('formatHTML', result);
|
283
283
|
return result;
|
284
284
|
};
|
285
|
+
|
286
|
+
//# sourceMappingURL=html.js.map
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "html.js",
|
4
|
+
"sourceRoot": "..\\..\\",
|
5
|
+
"sources": [
|
6
|
+
"src\\lib\\html.coffee"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": "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",
|
10
|
+
"sourcesContent": [
|
11
|
+
"# html.coffee\r\n\r\nimport {\r\n\tundef, defined, notdefined, words, isEmpty, nonEmpty,\r\n\ttoBlock, OL, getOptions,\r\n\t} from '@jdeighan/base-utils'\r\nimport {assert, croak} from '@jdeighan/base-utils/exceptions'\r\nimport {dbgEnter, dbgReturn, dbg} from '@jdeighan/base-utils/debug'\r\nimport {indented} from '@jdeighan/base-utils/indent'\r\n\r\nhNoEnd = {}\r\nfor tagName in words('area base br col command embed hr img input' \\\r\n\t\t+ ' keygen link meta param source track wbr')\r\n\thNoEnd[tagName] = true\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport parsetag = (line) =>\r\n\r\n\tif lMatches = line.match(///^\r\n\t\t\t(?:\r\n\t\t\t\t([A-Za-z][A-Za-z0-9_]*) # variable name\r\n\t\t\t\t\\s*\r\n\t\t\t\t=\r\n\t\t\t\t\\s*\r\n\t\t\t\t)? # variable is optional\r\n\t\t\t([A-Za-z][A-Za-z0-9_]*) # tag name\r\n\t\t\t(?:\r\n\t\t\t\t\\:\r\n\t\t\t\t( [a-z]+ )\r\n\t\t\t\t)?\r\n\t\t\t(\\S*) # modifiers (class names, etc.)\r\n\t\t\t\\s*\r\n\t\t\t(.*) # attributes & enclosed text\r\n\t\t\t$///)\r\n\t\t[_, varName, tagName, subtype, modifiers, rest] = lMatches\r\n\telse\r\n\t\tcroak \"parsetag(): Invalid HTML: '#{line}'\"\r\n\r\n\t# --- Handle classes - subtypes and added via .<class>\r\n\tlClasses = []\r\n\tif nonEmpty(subtype) && (tagName != 'svelte')\r\n\t\tlClasses.push subtype\r\n\r\n\tif modifiers\r\n\t\t# --- currently, these are only class names\r\n\t\twhile lMatches = modifiers.match(///^\r\n\t\t\t\t\\. ([A-Za-z][A-Za-z0-9_]*)\r\n\t\t\t\t///)\r\n\t\t\t[all, className] = lMatches\r\n\t\t\tlClasses.push className\r\n\t\t\tmodifiers = modifiers.substring(all.length)\r\n\t\tif modifiers\r\n\t\t\tcroak \"parsetag(): Invalid modifiers in '#{line}'\"\r\n\r\n\t# --- Handle attributes\r\n\thAttr = {} # { name: { value: <value>, quote: <quote> }, ... }\r\n\r\n\tif varName\r\n\t\thAttr['bind:this'] = {value: varName, quote: '{'}\r\n\r\n\tif (tagName == 'script') && (subtype == 'startup')\r\n\t\thAttr['context'] = {value: 'module', quote: '\"'}\r\n\r\n\tif rest\r\n\t\twhile lMatches = rest.match(///^\r\n\t\t\t\t(?:\r\n\t\t\t\t\t(?:\r\n\t\t\t\t\t\t(?:\r\n\t\t\t\t\t\t\t( bind | on ) # prefix\r\n\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t)?\r\n\t\t\t\t\t\t([A-Za-z][A-Za-z0-9_]*) # attribute name\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t=\r\n\t\t\t\t\t(?:\r\n\t\t\t\t\t\t \\{ ([^}]*) \\} # attribute value\r\n\t\t\t\t\t\t| \" ([^\"]*) \"\r\n\t\t\t\t\t\t| ' ([^']*) '\r\n\t\t\t\t\t\t| ([^\"'\\s]+)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t|\r\n\t\t\t\t\t\\{\r\n\t\t\t\t\t([A-Za-z][A-Za-z0-9_]*)\r\n\t\t\t\t\t\\}\r\n\t\t\t\t\t) \\s*\r\n\t\t\t\t///)\r\n\t\t\t[all, prefix, attrName, br_val, dq_val, sq_val, uq_val, ident] = lMatches\r\n\t\t\tif ident\r\n\t\t\t\thAttr[ident] = { value: ident, shorthand: true }\r\n\t\t\telse\r\n\t\t\t\tif br_val\r\n\t\t\t\t\tvalue = br_val\r\n\t\t\t\t\tquote = '{'\r\n\t\t\t\telse\r\n\t\t\t\t\tassert ! prefix?, \"prefix requires use of {...}\"\r\n\t\t\t\t\tif dq_val\r\n\t\t\t\t\t\tvalue = dq_val\r\n\t\t\t\t\t\tquote = '\"'\r\n\t\t\t\t\telse if sq_val\r\n\t\t\t\t\t\tvalue = sq_val\r\n\t\t\t\t\t\tquote = \"'\"\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tvalue = uq_val\r\n\t\t\t\t\t\tquote = ''\r\n\r\n\t\t\t\tif prefix\r\n\t\t\t\t\tattrName = \"#{prefix}:#{attrName}\"\r\n\r\n\t\t\t\tif attrName == 'class'\r\n\t\t\t\t\tfor className in value.split(/\\s+/)\r\n\t\t\t\t\t\tlClasses.push className\r\n\t\t\t\telse\r\n\t\t\t\t\tif hAttr.attrName?\r\n\t\t\t\t\t\tcroak \"parsetag(): Multiple attributes named '#{attrName}'\"\r\n\t\t\t\t\thAttr[attrName] = { value, quote }\r\n\r\n\t\t\trest = rest.substring(all.length)\r\n\r\n\t# --- The rest is contained text\r\n\trest = rest.trim()\r\n\tif lMatches = rest.match(///^\r\n\t\t\t['\"]\r\n\t\t\t(.*)\r\n\t\t\t['\"]\r\n\t\t\t$///)\r\n\t\trest = lMatches[1]\r\n\r\n\t# --- Add class attribute to hAttr if there are classes\r\n\tif (lClasses.length > 0)\r\n\t\thAttr.class = {\r\n\t\t\tvalue: lClasses.join(' '),\r\n\t\t\tquote: '\"',\r\n\t\t\t}\r\n\r\n\t# --- Build the return value\r\n\thToken = {\r\n\t\ttype: 'tag'\r\n\t\ttagName\r\n\t\t}\r\n\r\n\tif subtype\r\n\t\thToken.subtype = subtype\r\n\t\thToken.orgtag = \"#{tagName}:#{subtype}\"\r\n\telse\r\n\t\thToken.orgtag = tagName\r\n\r\n\t# --- if tagName == 'svelte', set hToken.tagName to hToken.orgtag\r\n\tif (tagName == 'svelte')\r\n\t\thToken.tagName = hToken.orgtag\r\n\r\n\tif nonEmpty(hAttr)\r\n\t\thToken.hAttr = hAttr\r\n\r\n\t# --- Is there contained text?\r\n\tif rest\r\n\t\thToken.text = rest\r\n\r\n\treturn hToken\r\n\r\n# ---------------------------------------------------------------------------\r\n# --- export only for unit testing\r\n\r\nexport attrStr = (hAttr) =>\r\n\r\n\tif ! hAttr\r\n\t\treturn ''\r\n\tstr = ''\r\n\tfor attrName in Object.getOwnPropertyNames(hAttr)\r\n\t\t{value, quote, shorthand} = hAttr[attrName]\r\n\t\tif shorthand\r\n\t\t\tstr += \" {#{value}}\"\r\n\t\telse\r\n\t\t\tif quote == '{'\r\n\t\t\t\tbquote = '{'\r\n\t\t\t\tequote = '}'\r\n\t\t\telse\r\n\t\t\t\tbquote = equote = quote\r\n\t\t\tstr += \" #{attrName}=#{bquote}#{value}#{equote}\"\r\n\treturn str\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport tag2str = (hToken, type='begin') =>\r\n\r\n\t{tagName, hAttr} = hToken\r\n\tif (type == 'begin')\r\n\t\tstr = \"<#{tagName}\" # build the string bit by bit\r\n\t\tif nonEmpty(hAttr)\r\n\t\t\tstr += attrStr(hAttr)\r\n\t\tstr += '>'\r\n\t\treturn str\r\n\telse if (type == 'end')\r\n\t\tif hNoEnd[tagName]\r\n\t\t\treturn undef\r\n\t\telse\r\n\t\t\treturn \"</#{tagName}>\"\r\n\telse\r\n\t\tcroak \"type must be 'begin' or 'end'\"\r\n\r\n# ---------------------------------------------------------------------------\r\n# elem - indent text, surround with HTML tags\r\n\r\nexport elem = (tagName, hAttr=undef, text=undef, oneIndent=\"\\t\") =>\r\n\r\n\tif isEmpty(text)\r\n\t\thToken = {tagName, hAttr}\r\n\t\treturn tag2str(hToken, 'begin') + tag2str(hToken, 'end')\r\n\telse\r\n\t\thToken = {tagName, hAttr, text}\r\n\t\treturn toBlock([\r\n\t\t\ttag2str(hToken, 'begin')\r\n\t\t\tindented(text, 1, oneIndent)\r\n\t\t\ttag2str(hToken, 'end')\r\n\t\t\t])\r\n\r\n# ---------------------------------------------------------------------------\r\n\r\nexport formatHTML = (html, hOptions={}) =>\r\n\r\n\tdbgEnter 'formatHTML', html, hOptions\r\n\t{oneIndent} = getOptions(hOptions, {\r\n\t\toneIndent: ' '\r\n\t\t})\r\n\r\n\tif (notdefined(html))\r\n\t\tdbgReturn 'formatHTML', ''\r\n\t\treturn ''\r\n\thtml = html.trim() # remove any leading/trailing whitespace\r\n\tif (html == '')\r\n\t\tdbgReturn 'formatHTML', ''\r\n\t\treturn ''\r\n\r\n\tassert html.charAt(0) == '<', \"Bad HTML, no < at start\"\r\n\tassert html.charAt(html.length-1) == '>', \"Bad HTML, no > at end\"\r\n\r\n\t# --- Remove leading '<' and trailing '>'\r\n\thtml = html.substring(1, html.length-1)\r\n\r\n\thNoEndTag = {}\r\n\tfor tag in words(\"\"\"\r\n\t\t\tbr hr img input link base\r\n\t\t\tmeta param area embed\r\n\t\t\tcol track source\r\n\t\t\t\"\"\")\r\n\t\thNoEndTag[tag] = true\r\n\r\n\tlParts = []\r\n\tlevel = 0\r\n\r\n\tfor elem in html.split(/>\\s*</)\r\n\t\tdbg \"ELEM: #{OL(elem)}\"\r\n\t\t[_, endMarker, tagName, rest] = elem.match(///^\r\n\t\t\t(\\/)? # possible end tag\r\n\t\t\t([A-Za-z][A-Za-z0-9-]*) # tag name\r\n\t\t\t(.*) # everything else\r\n\t\t\t$///)\r\n\t\tif endMarker\r\n\t\t\tdbg \" TAG: #{OL(tagName)} - END MARKER\"\r\n\t\telse\r\n\t\t\tdbg \" TAG: #{OL(tagName)} - NO END MARKER\"\r\n\r\n\t\tif endMarker && (level > 0)\r\n\t\t\t# --- If end tag, reduce level\r\n\t\t\tdbg \" reduce level #{level} to #{level-1}\"\r\n\t\t\tlevel -= 1\r\n\r\n\t\tdbg \" ADD #{OL(elem)} at level #{level}\"\r\n\t\tlParts.push oneIndent.repeat(level), \"<#{elem}>\\n\"\r\n\r\n\t\tif ! endMarker && ! hNoEndTag[tagName] && !rest.endsWith('/'+tagName)\r\n\t\t\tdbg \" inc level #{level} to #{level+1}\"\r\n\t\t\tlevel += 1\r\n\r\n\tresult = lParts.join('').trim()\r\n\tdbgReturn 'formatHTML', result\r\n\treturn result\r\n"
|
12
|
+
]
|
13
|
+
}
|
package/src/lib/server.js
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "server.js",
|
4
|
+
"sourceRoot": "..\\..\\",
|
5
|
+
"sources": [
|
6
|
+
"src\\lib\\server.coffee"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": ";AAAe;AAEf,OAAO,OAAP,MAAA;;AACA,OAAA;EAAQ,QAAR;CAAA,MAAA,gBAHe;;;;AAQf,OAAA,IAAO,IAAA,GAAO,CAAC,GAAD,CAAA,GAAA;AAEd,MAAA;EAAC,MAAA,GAAS,QAAA,CAAS,GAAT,EAAc;IACtB,WAAA,EAAa;EADS,CAAd;AAGT,SAAO,MAAM,CAAC,QAAP,CAAA;AALM",
|
10
|
+
"sourcesContent": [
|
11
|
+
"# server.coffee\r\n\r\nimport getline from 'readline-sync'\r\nimport {execSync} from 'child_process'\r\n\r\n# ---------------------------------------------------------------------------\r\n# exec - run external commands\r\n\r\nexport exec = (cmd) =>\r\n\r\n\tbuffer = execSync cmd, {\r\n\t\twindowsHide: true\r\n\t\t}\r\n\treturn buffer.toString()\r\n"
|
12
|
+
]
|
13
|
+
}
|