@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/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": ";AAAa;AAAA,IAAA,MAAA,EAAA,CAAA,EAAA,GAAA,EAAA,GAAA,EAAA;;AAEb,OAAA;EACC,KADD;EACQ,OADR;EACiB,UADjB;EAC6B,KAD7B;EACoC,OADpC;EAC6C,QAD7C;EAEC,OAFD;EAEU,EAFV;EAEc,UAFd;CAAA,MAAA;;AAIA,OAAA;EAAQ,MAAR;EAAgB,KAAhB;CAAA,MAAA;;AACA,OAAA;EAAQ,QAAR;EAAkB,SAAlB;EAA6B,GAA7B;CAAA,MAAA;;AACA,OAAA;EAAQ,QAAR;CAAA,MAAA;;AAEA,MAAA,GAAS,CAAA;;AACT;AAAA,KAAA,qCAAA;;EAEC,MAAM,CAAC,OAAD,CAAN,GAAkB;AAFnB,CAXa;;;AAiBb,OAAA,IAAO,QAAA,GAAW,CAAC,IAAD,CAAA,GAAA;AAElB,MAAA,CAAA,EAAA,GAAA,EAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA;EAAC,IAAG,QAAA,GAAW,IAAI,CAAC,KAAL,CAAW,yFAAX,CAAd;;;;;IAgBC,CAAC,CAAD,EAAI,OAAJ,EAAa,OAAb,EAAsB,OAAtB,EAA+B,SAA/B,EAA0C,IAA1C,CAAA,GAAkD,SAhBnD;GAAA,MAAA;IAkBC,KAAA,CAAM,CAAA,2BAAA,CAAA,CAA8B,IAA9B,CAAA,CAAA,CAAN,EAlBD;GAAD;;EAqBC,QAAA,GAAW;EACX,IAAG,QAAA,CAAS,OAAT,CAAA,IAAqB,CAAC,OAAA,KAAW,QAAZ,CAAxB;IACC,QAAQ,CAAC,IAAT,CAAc,OAAd,EADD;;EAGA,IAAG,SAAH;;AAEC,WAAM,QAAA,GAAW,SAAS,CAAC,KAAV,CAAgB,4BAAhB,CAAjB;MAGC,CAAC,GAAD,EAAM,SAAN,CAAA,GAAmB;MACnB,QAAQ,CAAC,IAAT,CAAc,SAAd;MACA,SAAA,GAAY,SAAS,CAAC,SAAV,CAAoB,GAAG,CAAC,MAAxB;IALb;IAMA,IAAG,SAAH;MACC,KAAA,CAAM,CAAA,kCAAA,CAAA,CAAqC,IAArC,CAAA,CAAA,CAAN,EADD;KARD;GAzBD;;EAqCC,KAAA,GAAQ,CAAA,EArCT;EAuCC,IAAG,OAAH;IACC,KAAK,CAAC,WAAD,CAAL,GAAqB;MAAC,KAAA,EAAO,OAAR;MAAiB,KAAA,EAAO;IAAxB,EADtB;;EAGA,IAAG,CAAC,OAAA,KAAW,QAAZ,CAAA,IAAyB,CAAC,OAAA,KAAW,SAAZ,CAA5B;IACC,KAAK,CAAC,SAAD,CAAL,GAAmB;MAAC,KAAA,EAAO,QAAR;MAAkB,KAAA,EAAO;IAAzB,EADpB;;EAGA,IAAG,IAAH;AACC,WAAM,QAAA,GAAW,IAAI,CAAC,KAAL,CAAW,+HAAX,CAAjB,GAAA;;;MAsBC,CAAC,GAAD,EAAM,MAAN,EAAc,QAAd,EAAwB,MAAxB,EAAgC,MAAhC,EAAwC,MAAxC,EAAgD,MAAhD,EAAwD,KAAxD,CAAA,GAAiE;MACjE,IAAG,KAAH;QACC,KAAK,CAAC,KAAD,CAAL,GAAe;UAAE,KAAA,EAAO,KAAT;UAAgB,SAAA,EAAW;QAA3B,EADhB;OAAA,MAAA;QAGC,IAAG,MAAH;UACC,KAAA,GAAQ;UACR,KAAA,GAAQ,IAFT;SAAA,MAAA;UAIC,MAAA,CAAS,cAAT,EAAkB,8BAAlB;UACA,IAAG,MAAH;YACC,KAAA,GAAQ;YACR,KAAA,GAAQ,IAFT;WAAA,MAGK,IAAG,MAAH;YACJ,KAAA,GAAQ;YACR,KAAA,GAAQ,IAFJ;WAAA,MAAA;YAIJ,KAAA,GAAQ;YACR,KAAA,GAAQ,GALJ;WARN;;QAeA,IAAG,MAAH;UACC,QAAA,GAAW,CAAA,CAAA,CAAG,MAAH,CAAA,CAAA,CAAA,CAAa,QAAb,CAAA,EADZ;;QAGA,IAAG,QAAA,KAAY,OAAf;AACC;UAAA,KAAA,wCAAA;;YACC,QAAQ,CAAC,IAAT,CAAc,SAAd;UADD,CADD;SAAA,MAAA;UAIC,IAAG,sBAAH;YACC,KAAA,CAAM,CAAA,uCAAA,CAAA,CAA0C,QAA1C,CAAA,CAAA,CAAN,EADD;;UAEA,KAAK,CAAC,QAAD,CAAL,GAAkB,CAAE,KAAF,EAAS,KAAT,EANnB;SArBD;;MA6BA,IAAA,GAAO,IAAI,CAAC,SAAL,CAAe,GAAG,CAAC,MAAnB;IApDR,CADD;GA7CD;;EAqGC,IAAA,GAAO,IAAI,CAAC,IAAL,CAAA;EACP,IAAG,QAAA,GAAW,IAAI,CAAC,KAAL,CAAW,gBAAX,CAAd;IAKC,IAAA,GAAO,QAAQ,CAAC,CAAD,EALhB;GAtGD;;EA8GC,IAAI,QAAQ,CAAC,MAAT,GAAkB,CAAtB;IACC,KAAK,CAAC,KAAN,GAAc;MACb,KAAA,EAAO,QAAQ,CAAC,IAAT,CAAc,GAAd,CADM;MAEb,KAAA,EAAO;IAFM,EADf;GA9GD;;EAqHC,MAAA,GAAS;IACR,IAAA,EAAM,KADE;IAER;EAFQ;EAKT,IAAG,OAAH;IACC,MAAM,CAAC,OAAP,GAAiB;IACjB,MAAM,CAAC,MAAP,GAAgB,CAAA,CAAA,CAAG,OAAH,CAAA,CAAA,CAAA,CAAc,OAAd,CAAA,EAFjB;GAAA,MAAA;IAIC,MAAM,CAAC,MAAP,GAAgB,QAJjB;GA1HD;;EAiIC,IAAI,OAAA,KAAW,QAAf;IACC,MAAM,CAAC,OAAP,GAAiB,MAAM,CAAC,OADzB;;EAGA,IAAG,QAAA,CAAS,KAAT,CAAH;IACC,MAAM,CAAC,KAAP,GAAe,MADhB;GApID;;EAwIC,IAAG,IAAH;IACC,MAAM,CAAC,IAAP,GAAc,KADf;;AAGA,SAAO;AA7IU,EAjBL;;;;AAmKb,OAAA,IAAO,OAAA,GAAU,CAAC,KAAD,CAAA,GAAA;AAEjB,MAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,GAAA,EAAA;EAAC,IAAG,CAAE,KAAL;AACC,WAAO,GADR;;EAEA,GAAA,GAAM;AACN;EAAA,KAAA,wCAAA;;IACC,CAAA,CAAC,KAAD,EAAQ,KAAR,EAAe,SAAf,CAAA,GAA4B,KAAK,CAAC,QAAD,CAAjC;IACA,IAAG,SAAH;MACC,GAAA,IAAO,CAAA,EAAA,CAAA,CAAK,KAAL,CAAA,CAAA,EADR;KAAA,MAAA;MAGC,IAAG,KAAA,KAAS,GAAZ;QACC,MAAA,GAAS;QACT,MAAA,GAAS,IAFV;OAAA,MAAA;QAIC,MAAA,GAAS,MAAA,GAAS,MAJnB;;MAKA,GAAA,IAAO,EAAA,CAAA,CAAI,QAAJ,CAAA,CAAA,CAAA,CAAgB,MAAhB,CAAA,CAAA,CAAyB,KAAzB,CAAA,CAAA,CAAiC,MAAjC,CAAA,EARR;;EAFD;AAWA,SAAO;AAhBS,EAnKJ;;;AAuLb,OAAA,IAAO,OAAA,GAAU,CAAC,MAAD,EAAS,OAAK,OAAd,CAAA,GAAA;AAEjB,MAAA,KAAA,EAAA;EAAC,CAAA,CAAC,OAAD,EAAU,KAAV,CAAA,GAAmB,MAAnB;EACA,IAAI,IAAA,KAAQ,OAAZ;IACC,GAAA,GAAM,CAAA,CAAA,CAAA,CAAI,OAAJ,CAAA;IACN,IAAG,QAAA,CAAS,KAAT,CAAH;MACC,GAAA,IAAO,OAAA,CAAQ,KAAR,EADR;;IAEA,GAAA,IAAO;AACP,WAAO,IALR;GAAA,MAMK,IAAI,IAAA,KAAQ,KAAZ;IACJ,IAAG,MAAM,CAAC,OAAD,CAAT;AACC,aAAO,MADR;KAAA,MAAA;AAGC,aAAO,CAAA,EAAA,CAAA,CAAK,OAAL,CAAA,CAAA,EAHR;KADI;GAAA,MAAA;WAMJ,KAAA,CAAM,+BAAN,EANI;;AATW,EAvLJ;;;;AA2Mb,OAAA,IAAO,IAAA,GAAO,CAAC,OAAD,EAAU,QAAM,KAAhB,EAAuB,OAAK,KAA5B,EAAmC,YAAU,IAA7C,CAAA,GAAA;AAEd,MAAA;EAAC,IAAG,OAAA,CAAQ,IAAR,CAAH;IACC,MAAA,GAAS,CAAC,OAAD,EAAU,KAAV;AACT,WAAO,OAAA,CAAQ,MAAR,EAAgB,OAAhB,CAAA,GAA2B,OAAA,CAAQ,MAAR,EAAgB,KAAhB,EAFnC;GAAA,MAAA;IAIC,MAAA,GAAS,CAAC,OAAD,EAAU,KAAV,EAAiB,IAAjB;AACT,WAAO,OAAA,CAAQ,CACd,OAAA,CAAQ,MAAR,EAAgB,OAAhB,CADc,EAEd,QAAA,CAAS,IAAT,EAAe,CAAf,EAAkB,SAAlB,CAFc,EAGd,OAAA,CAAQ,MAAR,EAAgB,KAAhB,CAHc,CAAR,EALR;;AAFa,EA3MD;;;AA0Nb,OAAA,IAAO,UAAA,GAAa,CAAC,IAAD,EAAO,WAAS,CAAA,CAAhB,CAAA,GAAA;AAEpB,MAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,IAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA;EAAC,QAAA,CAAS,YAAT,EAAuB,IAAvB,EAA6B,QAA7B;EACA,CAAA,CAAC,SAAD,CAAA,GAAc,UAAA,CAAW,QAAX,EAAqB;IAClC,SAAA,EAAW;EADuB,CAArB,CAAd;EAIA,IAAI,UAAA,CAAW,IAAX,CAAJ;IACC,SAAA,CAAU,YAAV,EAAwB,EAAxB;AACA,WAAO,GAFR;;EAGA,IAAA,GAAO,IAAI,CAAC,IAAL,CAAA,EARR;EASC,IAAI,IAAA,KAAQ,EAAZ;IACC,SAAA,CAAU,YAAV,EAAwB,EAAxB;AACA,WAAO,GAFR;;EAIA,MAAA,CAAO,IAAI,CAAC,MAAL,CAAY,CAAZ,CAAA,KAAkB,GAAzB,EAA8B,yBAA9B;EACA,MAAA,CAAO,IAAI,CAAC,MAAL,CAAY,IAAI,CAAC,MAAL,GAAY,CAAxB,CAAA,KAA8B,GAArC,EAA0C,uBAA1C,EAdD;;EAiBC,IAAA,GAAO,IAAI,CAAC,SAAL,CAAe,CAAf,EAAkB,IAAI,CAAC,MAAL,GAAY,CAA9B;EAEP,SAAA,GAAY,CAAA;AACZ;;;EAAA,KAAA,wCAAA;;IAKC,SAAS,CAAC,GAAD,CAAT,GAAiB;EALlB;EAOA,MAAA,GAAS;EACT,KAAA,GAAQ;AAER;EAAA,KAAA,wCAAA;;IACC,GAAA,CAAI,CAAA,MAAA,CAAA,CAAS,EAAA,CAAG,IAAH,CAAT,CAAA,CAAJ;IACA,CAAC,CAAD,EAAI,SAAJ,EAAe,OAAf,EAAwB,IAAxB,CAAA,GAAgC,IAAI,CAAC,KAAL,CAAW,oCAAX,EADlC;;;IAME,IAAG,SAAH;MACC,GAAA,CAAI,CAAA,QAAA,CAAA,CAAW,EAAA,CAAG,OAAH,CAAX,CAAA,aAAA,CAAJ,EADD;KAAA,MAAA;MAGC,GAAA,CAAI,CAAA,QAAA,CAAA,CAAW,EAAA,CAAG,OAAH,CAAX,CAAA,gBAAA,CAAJ,EAHD;;IAKA,IAAG,SAAA,IAAa,CAAC,KAAA,GAAQ,CAAT,CAAhB;;MAEC,GAAA,CAAI,CAAA,gBAAA,CAAA,CAAmB,KAAnB,CAAA,IAAA,CAAA,CAA+B,KAAA,GAAM,CAArC,CAAA,CAAJ;MACA,KAAA,IAAS,EAHV;;IAKA,GAAA,CAAI,CAAA,OAAA,CAAA,CAAU,EAAA,CAAG,IAAH,CAAV,CAAA,UAAA,CAAA,CAA+B,KAA/B,CAAA,CAAJ;IACA,MAAM,CAAC,IAAP,CAAY,SAAS,CAAC,MAAV,CAAiB,KAAjB,CAAZ,EAAqC,CAAA,CAAA,CAAA,CAAI,IAAJ,CAAA,GAAA,CAArC;IAEA,IAAG,CAAE,SAAF,IAAe,CAAE,SAAS,CAAC,OAAD,CAA1B,IAAuC,CAAC,IAAI,CAAC,QAAL,CAAc,GAAA,GAAI,OAAlB,CAA3C;MACC,GAAA,CAAI,CAAA,aAAA,CAAA,CAAgB,KAAhB,CAAA,IAAA,CAAA,CAA4B,KAAA,GAAM,CAAlC,CAAA,CAAJ;MACA,KAAA,IAAS,EAFV;;EApBD;EAwBA,MAAA,GAAS,MAAM,CAAC,IAAP,CAAY,EAAZ,CAAe,CAAC,IAAhB,CAAA;EACT,SAAA,CAAU,YAAV,EAAwB,MAAxB;AACA,SAAO;AA1DY",
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
+ }