@jdeighan/coffee-utils 11.0.21 → 11.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/fs.coffee +46 -22
- package/src/fs.js +47 -27
- package/temp.js +0 -26
    
        package/package.json
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
            	"name": "@jdeighan/coffee-utils",
         | 
| 3 3 | 
             
            	"type": "module",
         | 
| 4 | 
            -
            	"version": "11.0. | 
| 4 | 
            +
            	"version": "11.0.23",
         | 
| 5 5 | 
             
            	"description": "A set of utility functions for CoffeeScript",
         | 
| 6 6 | 
             
            	"main": "coffee_utils.js",
         | 
| 7 7 | 
             
            	"exports": {
         | 
| @@ -32,7 +32,7 @@ | |
| 32 32 | 
             
            		"verbose": false
         | 
| 33 33 | 
             
            	},
         | 
| 34 34 | 
             
            	"scripts": {
         | 
| 35 | 
            -
            		"build": "cls && rm -f  | 
| 35 | 
            +
            		"build": "cls && rm -f ./*.js && coffee -c .",
         | 
| 36 36 | 
             
            		"pretest": "cls && cielo -qfc ./test && coffee -c .",
         | 
| 37 37 | 
             
            		"test": "npm run build && ava ./test/*.test.js && git status"
         | 
| 38 38 | 
             
            	},
         | 
| @@ -50,7 +50,7 @@ | |
| 50 50 | 
             
            	},
         | 
| 51 51 | 
             
            	"homepage": "https://github.com/johndeighan/coffee-utils#readme",
         | 
| 52 52 | 
             
            	"dependencies": {
         | 
| 53 | 
            -
            		"@jdeighan/exceptions": "^1.0. | 
| 53 | 
            +
            		"@jdeighan/exceptions": "^1.0.19",
         | 
| 54 54 | 
             
            		"cross-env": "^7.0.3",
         | 
| 55 55 | 
             
            		"js-yaml": "^4.1.0",
         | 
| 56 56 | 
             
            		"n-readlines": "^1.0.1",
         | 
| @@ -58,6 +58,6 @@ | |
| 58 58 | 
             
            		"svelte": "^3.52.0"
         | 
| 59 59 | 
             
            	},
         | 
| 60 60 | 
             
            	"devDependencies": {
         | 
| 61 | 
            -
            		"@jdeighan/unit-tester": "^2.0. | 
| 61 | 
            +
            		"@jdeighan/unit-tester": "^2.0.43"
         | 
| 62 62 | 
             
            	}
         | 
| 63 63 | 
             
            }
         | 
    
        package/src/fs.coffee
    CHANGED
    
    | @@ -7,7 +7,7 @@ import NReadLines from 'n-readlines' | |
| 7 7 |  | 
| 8 8 | 
             
            import {assert, croak, LOG, fromTAML} from '@jdeighan/exceptions'
         | 
| 9 9 | 
             
            import {
         | 
| 10 | 
            -
            	undef, pass, defined, rtrim, isEmpty, nonEmpty,
         | 
| 10 | 
            +
            	undef, pass, defined, rtrim, isEmpty, nonEmpty, getOptions,
         | 
| 11 11 | 
             
            	isString, isArray, isHash, isRegExp, isFunction, OL,
         | 
| 12 12 | 
             
            	} from '@jdeighan/coffee-utils'
         | 
| 13 13 | 
             
            import {arrayToBlock} from '@jdeighan/coffee-utils/block'
         | 
| @@ -23,6 +23,15 @@ export mydir = (url) -> | |
| 23 23 | 
             
            	final = mkpath(dir)
         | 
| 24 24 | 
             
            	return final
         | 
| 25 25 |  | 
| 26 | 
            +
            # ---------------------------------------------------------------------------
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            export projRoot = (url) ->
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            	dir = mydir(url)
         | 
| 31 | 
            +
            	rootDir = pathTo('package.json', dir, 'direction=up directory')
         | 
| 32 | 
            +
            	assert defined(rootDir), "No project root directory found"
         | 
| 33 | 
            +
            	return rootDir
         | 
| 34 | 
            +
             | 
| 26 35 | 
             
            # ---------------------------------------------------------------------------
         | 
| 27 36 | 
             
            #    myfile() - pass argument import.meta.url and it will return
         | 
| 28 37 | 
             
            #               the name of your file
         | 
| @@ -44,18 +53,25 @@ export myfullpath = (url) -> | |
| 44 53 |  | 
| 45 54 | 
             
            # ---------------------------------------------------------------------------
         | 
| 46 55 |  | 
| 56 | 
            +
            export getStats = (fullpath) ->
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            	return fs.lstatSync(fullpath)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            # ---------------------------------------------------------------------------
         | 
| 61 | 
            +
             | 
| 47 62 | 
             
            export isFile = (fullpath) ->
         | 
| 48 63 |  | 
| 49 | 
            -
            	 | 
| 64 | 
            +
            	try
         | 
| 65 | 
            +
            		return getStats(fullpath).isFile()
         | 
| 66 | 
            +
            	catch
         | 
| 67 | 
            +
            		return false
         | 
| 50 68 |  | 
| 51 69 | 
             
            # ---------------------------------------------------------------------------
         | 
| 52 70 |  | 
| 53 71 | 
             
            export isDir = (fullpath) ->
         | 
| 54 72 |  | 
| 55 73 | 
             
            	try
         | 
| 56 | 
            -
            		 | 
| 57 | 
            -
            		if !obj? then return false
         | 
| 58 | 
            -
            		return obj.isDirectory()
         | 
| 74 | 
            +
            		return getStats(fullpath).isDirectory()
         | 
| 59 75 | 
             
            	catch
         | 
| 60 76 | 
             
            		return false
         | 
| 61 77 |  | 
| @@ -253,41 +269,49 @@ export forEachFile = (dir, cb, filt=undef, level=0) -> | |
| 253 269 |  | 
| 254 270 | 
             
            # ---------------------------------------------------------------------------
         | 
| 255 271 |  | 
| 256 | 
            -
            export pathTo = (fname, searchDir,  | 
| 272 | 
            +
            export pathTo = (fname, searchDir, options=undef) ->
         | 
| 257 273 |  | 
| 258 | 
            -
            	{direction, relative} =  | 
| 259 | 
            -
             | 
| 260 | 
            -
            		 | 
| 261 | 
            -
             | 
| 262 | 
            -
            		 | 
| 274 | 
            +
            	{direction, relative, directory} = getOptions(options, {
         | 
| 275 | 
            +
            		direction: 'down'
         | 
| 276 | 
            +
            		relative: false
         | 
| 277 | 
            +
            		directory: false    # return only the directory the file is in
         | 
| 278 | 
            +
            		})
         | 
| 263 279 |  | 
| 280 | 
            +
            	assert !(relative && directory), "relative & directory are incompatible"
         | 
| 264 281 | 
             
            	if ! searchDir
         | 
| 265 282 | 
             
            		searchDir = process.cwd()
         | 
| 266 | 
            -
            	assert  | 
| 283 | 
            +
            	assert isDir(searchDir), "Not a directory: #{OL(searchDir)}"
         | 
| 267 284 | 
             
            	filepath = mkpath(searchDir, fname)
         | 
| 268 | 
            -
            	if  | 
| 285 | 
            +
            	if isFile(filepath)
         | 
| 269 286 | 
             
            		if relative
         | 
| 270 | 
            -
            			 | 
| 271 | 
            -
            		 | 
| 287 | 
            +
            			return "./#{fname}"
         | 
| 288 | 
            +
            		else if directory
         | 
| 289 | 
            +
            			return searchDir
         | 
| 290 | 
            +
            		else
         | 
| 291 | 
            +
            			return filepath
         | 
| 272 292 |  | 
| 273 293 | 
             
            	if (direction == 'down')
         | 
| 274 294 | 
             
            		# --- Search all directories in this directory
         | 
| 275 295 | 
             
            		#     getSubDirs() returns dirs sorted alphabetically
         | 
| 276 296 | 
             
            		for subdir in getSubDirs(searchDir)
         | 
| 277 | 
            -
            			 | 
| 278 | 
            -
            			if defined(fpath = pathTo(fname,  | 
| 297 | 
            +
            			dirPath = mkpath(searchDir, subdir)
         | 
| 298 | 
            +
            			if defined(fpath = pathTo(fname, dirPath, options))
         | 
| 279 299 | 
             
            				if relative
         | 
| 280 | 
            -
            					 | 
| 281 | 
            -
            				 | 
| 300 | 
            +
            					return fpath.replace('./', "./#{subdir}/")
         | 
| 301 | 
            +
            				else if directory
         | 
| 302 | 
            +
            					return dirPath
         | 
| 303 | 
            +
            				else
         | 
| 304 | 
            +
            					return fpath
         | 
| 282 305 | 
             
            	else if (direction == 'up')
         | 
| 283 306 | 
             
            		nLevels = 0
         | 
| 284 307 | 
             
            		while defined(dirPath = getParentDir(searchDir))
         | 
| 285 308 | 
             
            			nLevels += 1
         | 
| 286 309 | 
             
            			fpath = mkpath(dirPath, fname)
         | 
| 287 | 
            -
            			if  | 
| 310 | 
            +
            			if isFile(fpath)
         | 
| 288 311 | 
             
            				if relative
         | 
| 289 | 
            -
            					 | 
| 290 | 
            -
             | 
| 312 | 
            +
            					return "../".repeat(nLevels) + fname
         | 
| 313 | 
            +
            				else if directory
         | 
| 314 | 
            +
            					return dirPath
         | 
| 291 315 | 
             
            				else
         | 
| 292 316 | 
             
            					return fpath
         | 
| 293 317 | 
             
            			searchDir = dirPath
         | 
    
        package/src/fs.js
    CHANGED
    
    | @@ -24,6 +24,7 @@ import { | |
| 24 24 | 
             
              rtrim,
         | 
| 25 25 | 
             
              isEmpty,
         | 
| 26 26 | 
             
              nonEmpty,
         | 
| 27 | 
            +
              getOptions,
         | 
| 27 28 | 
             
              isString,
         | 
| 28 29 | 
             
              isArray,
         | 
| 29 30 | 
             
              isHash,
         | 
| @@ -47,6 +48,15 @@ export var mydir = function(url) { | |
| 47 48 | 
             
              return final;
         | 
| 48 49 | 
             
            };
         | 
| 49 50 |  | 
| 51 | 
            +
            // ---------------------------------------------------------------------------
         | 
| 52 | 
            +
            export var projRoot = function(url) {
         | 
| 53 | 
            +
              var dir, rootDir;
         | 
| 54 | 
            +
              dir = mydir(url);
         | 
| 55 | 
            +
              rootDir = pathTo('package.json', dir, 'direction=up directory');
         | 
| 56 | 
            +
              assert(defined(rootDir), "No project root directory found");
         | 
| 57 | 
            +
              return rootDir;
         | 
| 58 | 
            +
            };
         | 
| 59 | 
            +
             | 
| 50 60 | 
             
            // ---------------------------------------------------------------------------
         | 
| 51 61 | 
             
            //    myfile() - pass argument import.meta.url and it will return
         | 
| 52 62 | 
             
            //               the name of your file
         | 
| @@ -66,20 +76,24 @@ export var myfullpath = function(url) { | |
| 66 76 | 
             
              return mkpath(path);
         | 
| 67 77 | 
             
            };
         | 
| 68 78 |  | 
| 79 | 
            +
            // ---------------------------------------------------------------------------
         | 
| 80 | 
            +
            export var getStats = function(fullpath) {
         | 
| 81 | 
            +
              return fs.lstatSync(fullpath);
         | 
| 82 | 
            +
            };
         | 
| 83 | 
            +
             | 
| 69 84 | 
             
            // ---------------------------------------------------------------------------
         | 
| 70 85 | 
             
            export var isFile = function(fullpath) {
         | 
| 71 | 
            -
               | 
| 86 | 
            +
              try {
         | 
| 87 | 
            +
                return getStats(fullpath).isFile();
         | 
| 88 | 
            +
              } catch (error) {
         | 
| 89 | 
            +
                return false;
         | 
| 90 | 
            +
              }
         | 
| 72 91 | 
             
            };
         | 
| 73 92 |  | 
| 74 93 | 
             
            // ---------------------------------------------------------------------------
         | 
| 75 94 | 
             
            export var isDir = function(fullpath) {
         | 
| 76 | 
            -
              var obj;
         | 
| 77 95 | 
             
              try {
         | 
| 78 | 
            -
                 | 
| 79 | 
            -
                if (obj == null) {
         | 
| 80 | 
            -
                  return false;
         | 
| 81 | 
            -
                }
         | 
| 82 | 
            -
                return obj.isDirectory();
         | 
| 96 | 
            +
                return getStats(fullpath).isDirectory();
         | 
| 83 97 | 
             
              } catch (error) {
         | 
| 84 98 | 
             
                return false;
         | 
| 85 99 | 
             
              }
         | 
| @@ -308,25 +322,27 @@ export var forEachFile = function(dir, cb, filt = undef, level = 0) { | |
| 308 322 | 
             
            };
         | 
| 309 323 |  | 
| 310 324 | 
             
            // ---------------------------------------------------------------------------
         | 
| 311 | 
            -
            export var pathTo = function(fname, searchDir,  | 
| 312 | 
            -
              var dirPath, direction,  | 
| 313 | 
            -
              ({direction, relative} =  | 
| 314 | 
            -
             | 
| 315 | 
            -
                 | 
| 316 | 
            -
             | 
| 317 | 
            -
               | 
| 318 | 
            -
             | 
| 319 | 
            -
              }
         | 
| 325 | 
            +
            export var pathTo = function(fname, searchDir, options = undef) {
         | 
| 326 | 
            +
              var dirPath, direction, directory, filepath, fpath, i, len, nLevels, ref, relative, subdir;
         | 
| 327 | 
            +
              ({direction, relative, directory} = getOptions(options, {
         | 
| 328 | 
            +
                direction: 'down',
         | 
| 329 | 
            +
                relative: false,
         | 
| 330 | 
            +
                directory: false // return only the directory the file is in
         | 
| 331 | 
            +
              }));
         | 
| 332 | 
            +
              assert(!(relative && directory), "relative & directory are incompatible");
         | 
| 320 333 | 
             
              if (!searchDir) {
         | 
| 321 334 | 
             
                searchDir = process.cwd();
         | 
| 322 335 | 
             
              }
         | 
| 323 | 
            -
              assert( | 
| 336 | 
            +
              assert(isDir(searchDir), `Not a directory: ${OL(searchDir)}`);
         | 
| 324 337 | 
             
              filepath = mkpath(searchDir, fname);
         | 
| 325 | 
            -
              if ( | 
| 338 | 
            +
              if (isFile(filepath)) {
         | 
| 326 339 | 
             
                if (relative) {
         | 
| 327 | 
            -
                   | 
| 340 | 
            +
                  return `./${fname}`;
         | 
| 341 | 
            +
                } else if (directory) {
         | 
| 342 | 
            +
                  return searchDir;
         | 
| 343 | 
            +
                } else {
         | 
| 344 | 
            +
                  return filepath;
         | 
| 328 345 | 
             
                }
         | 
| 329 | 
            -
                return filepath;
         | 
| 330 346 | 
             
              }
         | 
| 331 347 | 
             
              if (direction === 'down') {
         | 
| 332 348 | 
             
                ref = getSubDirs(searchDir);
         | 
| @@ -334,12 +350,15 @@ export var pathTo = function(fname, searchDir, hOptions = {}) { | |
| 334 350 | 
             
                //     getSubDirs() returns dirs sorted alphabetically
         | 
| 335 351 | 
             
                for (i = 0, len = ref.length; i < len; i++) {
         | 
| 336 352 | 
             
                  subdir = ref[i];
         | 
| 337 | 
            -
                   | 
| 338 | 
            -
                  if (defined(fpath = pathTo(fname,  | 
| 353 | 
            +
                  dirPath = mkpath(searchDir, subdir);
         | 
| 354 | 
            +
                  if (defined(fpath = pathTo(fname, dirPath, options))) {
         | 
| 339 355 | 
             
                    if (relative) {
         | 
| 340 | 
            -
                       | 
| 356 | 
            +
                      return fpath.replace('./', `./${subdir}/`);
         | 
| 357 | 
            +
                    } else if (directory) {
         | 
| 358 | 
            +
                      return dirPath;
         | 
| 359 | 
            +
                    } else {
         | 
| 360 | 
            +
                      return fpath;
         | 
| 341 361 | 
             
                    }
         | 
| 342 | 
            -
                    return fpath;
         | 
| 343 362 | 
             
                  }
         | 
| 344 363 | 
             
                }
         | 
| 345 364 | 
             
              } else if (direction === 'up') {
         | 
| @@ -347,10 +366,11 @@ export var pathTo = function(fname, searchDir, hOptions = {}) { | |
| 347 366 | 
             
                while (defined(dirPath = getParentDir(searchDir))) {
         | 
| 348 367 | 
             
                  nLevels += 1;
         | 
| 349 368 | 
             
                  fpath = mkpath(dirPath, fname);
         | 
| 350 | 
            -
                  if ( | 
| 369 | 
            +
                  if (isFile(fpath)) {
         | 
| 351 370 | 
             
                    if (relative) {
         | 
| 352 | 
            -
                       | 
| 353 | 
            -
             | 
| 371 | 
            +
                      return "../".repeat(nLevels) + fname;
         | 
| 372 | 
            +
                    } else if (directory) {
         | 
| 373 | 
            +
                      return dirPath;
         | 
| 354 374 | 
             
                    } else {
         | 
| 355 375 | 
             
                      return fpath;
         | 
| 356 376 | 
             
                    }
         | 
    
        package/temp.js
    DELETED
    
    | @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            // Generated by CoffeeScript 2.6.1
         | 
| 2 | 
            -
            // temp.coffee
         | 
| 3 | 
            -
            var dir;
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            import {
         | 
| 6 | 
            -
              say
         | 
| 7 | 
            -
            } from '@jdeighan/coffee-utils';
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            import {
         | 
| 10 | 
            -
              log
         | 
| 11 | 
            -
            } from '@jdeighan/coffee-utils/log';
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            import {
         | 
| 14 | 
            -
              setDebugging
         | 
| 15 | 
            -
            } from '@jdeighan/coffee-utils/debug';
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            import {
         | 
| 18 | 
            -
              mydir,
         | 
| 19 | 
            -
              mkpath
         | 
| 20 | 
            -
            } from '@jdeighan/coffee-utils/fs';
         | 
| 21 | 
            -
             | 
| 22 | 
            -
            setDebugging(true);
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            dir = mydir(import.meta.url);
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            say(`dir = ${dir}`);
         |