1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| const ciInfo = require('ci-info')
| const runScript = require('@npmcli/run-script')
| const readPackageJson = require('read-package-json-fast')
| const { log, output } = require('proc-log')
| const noTTY = require('./no-tty.js')
|
| const run = async ({
| args,
| call,
| flatOptions,
| locationMsg,
| path,
| binPaths,
| runPath,
| scriptShell,
| }) => {
| // turn list of args into command string
| const script = call || args.shift() || scriptShell
|
| // do the fakey runScript dance
| // still should work if no package.json in cwd
| const realPkg = await readPackageJson(`${path}/package.json`).catch(() => ({}))
| const pkg = {
| ...realPkg,
| scripts: {
| ...(realPkg.scripts || {}),
| npx: script,
| },
| }
|
| if (script === scriptShell) {
| if (!noTTY()) {
| if (ciInfo.isCI) {
| return log.warn('exec', 'Interactive mode disabled in CI environment')
| }
|
| const { chalk } = flatOptions
|
| output.standard(`${
| chalk.reset('\nEntering npm script environment')
| }${
| chalk.reset(locationMsg || ` at location:\n${chalk.dim(runPath)}`)
| }${
| chalk.bold('\nType \'exit\' or ^D when finished\n')
| }`)
| }
| }
| return runScript({
| ...flatOptions,
| pkg,
| // we always run in cwd, not --prefix
| path: runPath,
| binPaths,
| event: 'npx',
| args,
| stdio: 'inherit',
| scriptShell,
| })
| }
|
| module.exports = run
|
|