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.40 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.39 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.38 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.32 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.31 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.30 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.29 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.28 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.27 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.26 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.25 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.24 node_modules/@npmcli/run-script/lib/signal-manager.js
immosquare-cleaner-0.1.23 node_modules/@npmcli/run-script/lib/signal-manager.js