@jdeighan/coffee-utils 16.0.24 → 17.0.0
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 +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
|
+
}
|