| #!/usr/bin/env node |
|
|
| const cli = require('../lib/cli.js') |
|
|
| |
| process.argv[1] = require.resolve('./npm-cli.js') |
| process.argv.splice(2, 0, 'exec') |
|
|
| |
| const removedSwitches = new Set([ |
| 'always-spawn', |
| 'ignore-existing', |
| 'shell-auto-fallback', |
| ]) |
|
|
| const removedOpts = new Set([ |
| 'npm', |
| 'node-arg', |
| 'n', |
| ]) |
|
|
| const removed = new Set([ |
| ...removedSwitches, |
| ...removedOpts, |
| ]) |
|
|
| const { definitions, shorthands } = require('@npmcli/config/lib/definitions') |
| const npmSwitches = Object.entries(definitions) |
| .filter(([, { type }]) => type === Boolean || |
| (Array.isArray(type) && type.includes(Boolean))) |
| .map(([key]) => key) |
|
|
| |
| const switches = new Set([ |
| ...removedSwitches, |
| ...npmSwitches, |
| 'no-install', |
| 'quiet', |
| 'q', |
| 'version', |
| 'v', |
| 'help', |
| 'h', |
| ]) |
|
|
| |
| const opts = new Set([ |
| ...removedOpts, |
| 'package', |
| 'p', |
| 'cache', |
| 'userconfig', |
| 'call', |
| 'c', |
| 'shell', |
| 'npm', |
| 'node-arg', |
| 'n', |
| ]) |
|
|
| |
| |
| |
| let i |
| let sawRemovedFlags = false |
| for (i = 3; i < process.argv.length; i++) { |
| const arg = process.argv[i] |
| if (arg === '--') { |
| break |
| } else if (/^-/.test(arg)) { |
| const [key, ...v] = arg.replace(/^-+/, '').split('=') |
|
|
| switch (key) { |
| case 'p': |
| process.argv[i] = ['--package', ...v].join('=') |
| break |
|
|
| case 'shell': |
| process.argv[i] = ['--script-shell', ...v].join('=') |
| break |
|
|
| case 'no-install': |
| process.argv[i] = '--yes=false' |
| break |
|
|
| default: |
| |
| if (shorthands[key] && !removed.has(key)) { |
| const a = [...shorthands[key]] |
| if (v.length) { |
| a.push(v.join('=')) |
| } |
| process.argv.splice(i, 1, ...a) |
| i-- |
| continue |
| } |
| break |
| } |
|
|
| if (removed.has(key)) { |
| |
| console.error(`npx: the --${key} argument has been removed.`) |
| sawRemovedFlags = true |
| process.argv.splice(i, 1) |
| i-- |
| } |
|
|
| if (v.length === 0 && !switches.has(key) && |
| (opts.has(key) || !/^-/.test(process.argv[i + 1]))) { |
| |
| if (removed.has(key)) { |
| |
| process.argv.splice(i + 1, 1) |
| } else { |
| i++ |
| } |
| } |
| } else { |
| |
| process.argv.splice(i, 0, '--') |
| break |
| } |
| } |
|
|
| if (sawRemovedFlags) { |
| |
| console.error('See `npm help exec` for more information') |
| } |
|
|
| cli(process) |
|
|