1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 'use strict';
-
- const isWindows = require("is-windows")
- const path = require("path")
-
- function isCmd(file) {
- const comspec = path.basename(process.env.comspec || '').replace(/\.exe$/i, '')
- return isWindows() && (file === comspec || /^cmd(?:\.exe)?$/i.test(file))
- }
-
- function isNode(file) {
- const cmdname = path.basename(process.execPath).replace(/\.exe$/i, '')
- return file === 'node' || cmdname === file
- }
-
- function isNpm(file) {
- // XXX is this even possible/necessary?
- // wouldn't npm just be detected as a node shebang?
- return file === 'npm' && !isWindows()
- }
-
- function isSh(file) {
- return ['dash', 'sh', 'bash', 'zsh'].includes(file)
- }
-
- /**
- * Returns the basename of the executable.
- *
- * On Windows, strips the `.exe` extension (if any) and normalizes the name to
- * lowercase.
- *
- * @param exePath {string} Path of the executable as passed to spawned processes:
- * either command or a path to a file.
- * @return {string} Basename of the executable.
- */
- function getExeBasename(exePath) {
- const baseName = path.basename(exePath);
- if (isWindows()) {
- // Stripping `.exe` seems to be enough for our usage. We may eventually
- // want to handle all executable extensions (such as `.bat` or `.cmd`).
- return baseName.replace(/\.exe$/i, "").toLowerCase();
- } else {
- return baseName;
- }
- }
-
- module.exports = {
- isCmd,
- isNode,
- isNpm,
- isSh,
- getExeBasename,
- }
|