@jdeighan/coffee-utils 17.0.5 → 17.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "17.0.5",
4
+ "version": "17.0.7",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -38,10 +38,10 @@
38
38
  },
39
39
  "homepage": "https://github.com/johndeighan/coffee-utils#readme",
40
40
  "dependencies": {
41
- "@jdeighan/base-utils": "^14.0.0",
41
+ "@jdeighan/base-utils": "^15.0.3",
42
42
  "cross-env": "^7.0.3",
43
43
  "n-readlines": "^1.0.1",
44
44
  "readline-sync": "^1.4.10",
45
- "svelte": "^4.2.10"
45
+ "svelte": "^4.2.12"
46
46
  }
47
47
  }
package/src/lib/fs.coffee CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  } from '@jdeighan/base-utils'
18
18
  import {
19
19
  fileExt, mydir, mkpath, isFile, mkDir, rmDir, rmFile,
20
- forEachLineInFile, isDir, parsePath,
20
+ forEachLineInFile, isDir, parsePath, newerDestFileExists,
21
21
  barf, barfJSON, slurp, slurpJSON, withExt,
22
22
  } from '@jdeighan/base-utils/fs'
23
23
  import {assert, croak} from '@jdeighan/base-utils/exceptions'
@@ -27,7 +27,7 @@ import {fromTAML} from '@jdeighan/base-utils/taml'
27
27
 
28
28
  export {
29
29
  fileExt, mydir, mkpath, isFile, mkDir, rmDir, rmFile,
30
- forEachLineInFile, isDir, parsePath,
30
+ forEachLineInFile, isDir, parsePath, newerDestFileExists,
31
31
  barf, barfJSON, slurp, slurpJSON, withExt,
32
32
  }
33
33
 
@@ -401,19 +401,6 @@ export allPathsTo = (fname, searchDir) =>
401
401
 
402
402
  # ---------------------------------------------------------------------------
403
403
 
404
- export newerDestFileExists = (srcPath, destPath) =>
405
-
406
- if ! fs.existsSync(destPath)
407
- return false
408
- srcModTime = fs.statSync(srcPath).mtimeMs
409
- destModTime = fs.statSync(destPath).mtimeMs
410
- if destModTime >= srcModTime
411
- return true
412
- else
413
- return false
414
-
415
- # ---------------------------------------------------------------------------
416
-
417
404
  export shortenPath = (path) =>
418
405
  # --- Replace user's home dir with '~'
419
406
 
package/src/lib/fs.js CHANGED
@@ -54,6 +54,7 @@ import {
54
54
  forEachLineInFile,
55
55
  isDir,
56
56
  parsePath,
57
+ newerDestFileExists,
57
58
  barf,
58
59
  barfJSON,
59
60
  slurp,
@@ -92,6 +93,7 @@ export {
92
93
  forEachLineInFile,
93
94
  isDir,
94
95
  parsePath,
96
+ newerDestFileExists,
95
97
  barf,
96
98
  barfJSON,
97
99
  slurp,
@@ -497,21 +499,6 @@ export var allPathsTo = (fname, searchDir) => {
497
499
  }
498
500
  };
499
501
 
500
- // ---------------------------------------------------------------------------
501
- export var newerDestFileExists = (srcPath, destPath) => {
502
- var destModTime, srcModTime;
503
- if (!fs.existsSync(destPath)) {
504
- return false;
505
- }
506
- srcModTime = fs.statSync(srcPath).mtimeMs;
507
- destModTime = fs.statSync(destPath).mtimeMs;
508
- if (destModTime >= srcModTime) {
509
- return true;
510
- } else {
511
- return false;
512
- }
513
- };
514
-
515
502
  // ---------------------------------------------------------------------------
516
503
  export var shortenPath = (path) => {
517
504
  var _, lMatches, str, tail;
package/src/lib/fs.js.map CHANGED
@@ -6,8 +6,8 @@
6
6
  "src\\lib\\fs.coffee"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "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",
9
+ "mappings": "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",
10
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"
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, newerDestFileExists,\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, newerDestFileExists,\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 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
12
  ]
13
13
  }