@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/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 // rmSync, rmdirSync,
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
- isDir,
50
- rmFileSync,
51
- mkdirSync,
52
- forEachLineInFile,
53
- fixPath,
54
- rmFile,
51
+ mkDir,
55
52
  rmDir,
56
- rmDirSync
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
- isDir,
84
- rmFileSync,
85
- mkdirSync,
86
- forEachLineInFile,
89
+ mkDir,
87
90
  rmDir,
88
- rmDirSync,
89
- rmFile
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 fixJson = async(filepath, func) => {
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 execCmd(`git clone ${git_repo} ${dir}`);
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 (error1) {
351
- err = error1;
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
- return fs.readdirSync(dir, {
367
- withFileTypes: true
368
- }).filter(function(d) {
369
- return d.isDirectory() && !isSystemDir(d.name);
370
- }).map(function(d) {
371
- return mkpath(d.name);
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, options = undef) => {
427
- var dirPath, direction, directory, filepath, fpath, i, len, nLevels, ref, relative, subdir;
428
- ({direction, relative, directory} = getOptions(options, {
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
- return `./${fname}`;
420
+ result = `./${fname}`;
442
421
  } else if (directory) {
443
- return fixPath(searchDir);
422
+ result = mkpath(searchDir);
444
423
  } else {
445
- return fixPath(filepath);
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
- for (i = 0, len = ref.length; i < len; i++) {
453
- subdir = ref[i];
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
- if (defined(fpath = pathTo(fname, dirPath, options))) {
439
+ fpath = pathTo(fname, dirPath, hOptions);
440
+ if (defined(fpath)) {
456
441
  if (relative) {
457
- return fpath.replace('./', `./${subdir}/`);
442
+ result = fpath.replace('./', `./${subdir}/`);
458
443
  } else if (directory) {
459
- return fixPath(dirPath);
444
+ result = mkpath(dirPath);
460
445
  } else {
461
- return fixPath(fpath);
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
- return "../".repeat(nLevels) + fname;
459
+ result = "../".repeat(nLevels) + fname;
473
460
  } else if (directory) {
474
- return fixPath(dirPath);
461
+ result = mkpath(dirPath);
475
462
  } else {
476
- return fixPath(fpath);
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
@@ -108,3 +108,5 @@ export var FSA = class FSA {
108
108
  }
109
109
 
110
110
  };
111
+
112
+ //# sourceMappingURL=fsa.js.map
@@ -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
+ }
@@ -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/coffee-utils/indent'
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/coffee-utils/indent';
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
@@ -15,3 +15,5 @@ export var exec = (cmd) => {
15
15
  });
16
16
  return buffer.toString();
17
17
  };
18
+
19
+ //# sourceMappingURL=server.js.map
@@ -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
+ }