Sha256: c68716fbbbbfa94057f450b4e3b4635b0b426424dae4e9de0f701d8c92dd0229

Contents?: true

Size: 1.19 KB

Versions: 33

Compression:

Stored size: 1.19 KB

Contents

const runningProcs = new Set()
let handlersInstalled = false

// NOTE: these signals aren't actually forwarded anywhere. they're trapped and
// ignored until all child processes have exited. in our next breaking change
// we should rename this
const forwardedSignals = [
  'SIGINT',
  'SIGTERM',
]

// no-op, this is so receiving the signal doesn't cause us to exit immediately
// instead, we exit after all children have exited when we re-send the signal
// to ourselves. see the catch handler at the bottom of run-script-pkg.js
// istanbul ignore next - this function does nothing
const handleSignal = () => {}
const setupListeners = () => {
  for (const signal of forwardedSignals) {
    process.on(signal, handleSignal)
  }
  handlersInstalled = true
}

const cleanupListeners = () => {
  if (runningProcs.size === 0) {
    for (const signal of forwardedSignals) {
      process.removeListener(signal, handleSignal)
    }
    handlersInstalled = false
  }
}

const add = proc => {
  runningProcs.add(proc)
  if (!handlersInstalled) {
    setupListeners()
  }

  proc.once('exit', () => {
    runningProcs.delete(proc)
    cleanupListeners()
  })
}

module.exports = {
  add,
  handleSignal,
  forwardedSignals,
}

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
immosquare-cleaner-0.1.60 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.59 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.58 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.57 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.56 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.55 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.54 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.53 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.52 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.51 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.50 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.49 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.48 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.47 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.46 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.45 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.44 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.43 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.42 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.41 node_modules/@npmcli/run-script/lib/signal-manager.js