From 1d7f52d40ff053a7fed47fb1488ec4646067f026 Mon Sep 17 00:00:00 2001 From: j- Date: Thu, 3 Mar 2016 12:14:39 +1100 Subject: [PATCH] [New] add simple CLI util - requires it is executed directly, not via `node`, and not required - supports `--preserve-symlinks`, only when node itself supports it - supports `--` to stop further argument parsing - errors if a specifier is omitted Co-authored-by: j- Co-authored-by: Jordan Harband --- .eslintrc | 6 ++++++ bin/resolve | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 8 ++++++-- 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100755 bin/resolve diff --git a/.eslintrc b/.eslintrc index 486c223..01206e4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -25,6 +25,12 @@ "sort-keys": 0, }, "overrides": [ + { + "files": "bin/**", + "rules": { + "no-process-exit": "off", + }, + }, { "files": "example/**", "rules": { diff --git a/bin/resolve b/bin/resolve new file mode 100755 index 0000000..80866ec --- /dev/null +++ b/bin/resolve @@ -0,0 +1,47 @@ +#!/usr/bin/env node + +'use strict'; + +var path = require('path'); +var fs = require('fs'); + +if ( + !process.argv + || process.argv.length < 2 + || (process.argv[1] !== __filename && fs.statSync(process.argv[1]).ino !== fs.statSync(__filename).ino) + || (process.env._ && path.resolve(process.env._) !== __filename) +) { + console.error('Error: `resolve` must be run directly as an executable'); + process.exit(1); +} + +var supportsPreserveSymlinkFlag = require('supports-preserve-symlinks-flag'); + +var preserveSymlinks = false; +for (var i = 2; i < process.argv.length; i += 1) { + if (process.argv[i].slice(0, 2) === '--') { + if (supportsPreserveSymlinkFlag && process.argv[i] === '--preserve-symlinks') { + preserveSymlinks = true; + } else if (process.argv[i].length > 2) { + console.error('Unknown argument ' + process.argv[i].replace(/[=].*$/, '')); + process.exit(2); + } + process.argv.splice(i, 1); + i -= 1; + if (process.argv[i] === '--') { break; } // eslint-disable-line no-restricted-syntax + } +} + +if (process.argv.length < 3) { + console.error('Error: `resolve` expects a specifier'); + process.exit(2); +} + +var resolve = require('../'); + +var result = resolve.sync(process.argv[2], { + basedir: process.cwd(), + preserveSymlinks: preserveSymlinks +}); + +console.log(result); diff --git a/package.json b/package.json index df92092..15ddd3d 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,9 @@ "type": "git", "url": "git://github.com/browserify/resolve.git" }, + "bin": { + "resolve": "./bin/resolve" + }, "main": "index.js", "exports": { ".": [ @@ -38,7 +41,7 @@ "prepublishOnly": "safe-publish-latest", "prepublish": "not-in-publish || npm run prepublishOnly", "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')", - "lint": "eslint --ext=js,mjs --no-eslintrc -c .eslintrc .", + "lint": "eslint --ext=js,mjs --no-eslintrc -c .eslintrc . 'bin/**'", "pretests-only": "cd ./test/resolver/nested_symlinks && node mylib/sync && node mylib/async", "tests-only": "tape test/*.js", "pretest": "npm run lint", @@ -69,6 +72,7 @@ }, "dependencies": { "is-core-module": "^2.8.0", - "path-parse": "^1.0.7" + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }