Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

@jcoreio/script-tools

Package Overview
Dependencies
Maintainers
5
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jcoreio/script-tools

Helpers for common scripting tasks like modifying configuration files

latest
Source
npmnpm
Version
3.0.0
Version published
Maintainers
5
Created
Source

JCore Script Tools

Helpers for common scripting tasks like modifying configuration files

Installation

pnpm install --save @jcoreio/script-tools

or

yarn add @jcoreio/script-tools

Standalone Functions

####exec

Promisified version of child_process.exec that also prints the command being called and and includes the original command in any error message

const { exec } = require('@jcoreio/script-tools')

const stdout = (await exec('git pull')).stdout

####execRemote

Executes a command on a remote host via SSH. Disables SSH host key checking by default. To re-enable SSH host key checking, pass strictHostKeyChecking: true.

Options:

  • host: string, required: remote hostname
  • user: string, optional: username for remote login
  • keyFile: string, optional: location of the SSH key pair to access the remote host
  • command: string, required: command to run on the remote host
  • prefix: string, optional: optionally prefix piped output with the specified value. Disabled by default.
  • spawnOpts:
    • sudo: boolean, optional: true if the ssh command should be run with sudo. Defaults to false.
    • captureStdio: boolean, optional: true if the process's stdio should be captured for later use as well as being piped through to the parent process. Defaults to false.
const { execRemote } = require('@jcoreio/script-tools')

await execRemote({
  host: 'remotehost.com',
  user: 'ubuntu',
  keyFile: '~/key.pem',
  command: 'sudo reboot',
  spawnOpts: {
    captureStdio: true,
  },
})

####lineInFile

Ensures that a line exists in a file. Optionally replaces a line matching a specified pattern.

Options:

  • file: string, required: path of the destination file
  • line: string, required: line to add or replace
  • replace: string, optional: pattern of line to replace
  • insertAfter: string, optional: insert the line after the specified line
  • newLineAtEnd: boolean, optional: true if the file should have a newline at the end. Defaults to true.
  • sudo: boolean, optional: true if sudo should be used when writing the file. Defaults to false.
  • mode: string, optional: file permissions to set, e.g. '775'
  • owner: string, optional: file owner to set
  • group: string, optional: file group to set
const { lineInFile } = require('@jcoreio/script-tools')

await lineInFile({
  file: '/etc/myPackage.conf',
  line: 'maxWorkers = 2',
  replace: 'maxWorkers',
  sudo: true,
  owner: 'root',
  group: 'root',
})

####spawn

Promisified version of child_process.spawn that also prints the command being called and pipes stdio to the parent process by default

Arguments:

  • command: string, required: command to run
  • arguments: Array, optional: arguments
  • options: Object, optional:
    • sudo: boolean, optional: true if the ssh command should be run with sudo. Defaults to false.
    • prefix: string, optional: optional prefix to prepend to each line of stderr / stdout from the child process
    • captureStdio: boolean, optional: true if the process's stdio should be captured for later use as well as being piped through to the parent process. Defaults to false.
const { spawn } = require('@jcoreio/script-tools')

await spawn('git', ['clone', 'https://github.com/myorg/myrepo'], {
  captureStdio: true,
})

####writeFile

Writes a file if its contents do not already match, and optionally sets the file's permissions

Arguments:

  • file: string, required: file path to write
  • contents: string, required: file contents to write
  • options: Object, optional:
    • sudo: boolean, optional: true if sudo should be used when writing the file. Defaults to false.
    • mode: string, optional: file permissions to set, e.g. '775'
    • owner: string, optional: file owner to set
    • group: string, optional: file group to set
const { writeFile } = require('@jcoreio/script-tools')

await writeFile('.gitignore', 'node_modules', {
  mode: '775',
  owner: 'root',
  group: 'root',
})

ProcessHandler class

Ensures that child processes are terminated when the parent process exits

Constructor options:

  • maxProcesses: number, optional: the maximum number of simultaneous running processes. Defaults to 100. If this limit is exceeded, an Error will be thrown when the next process is added.
const { ProcessHandler } = require('@jcoreio/script-tools')

const handler = new ProcessHandler({ maxProcesses: 10 })

await handler.exec('docker kill my-container')

await handler.spawn('git', ['pull'])

await handler.execRemote({
  host: 'myhost.mycompany.com',
  command: 'uptime',
})

const child = require('child_process').spawn('ls', ['-l'])
handler.killOnExit(child)

handler.killAll()

The following methods work the same as their standaline counterparts, and also return a process that will be terminated when the parent process exits:

  • exec
  • execRemote
  • spawn

#####killOnExit

Monitors an already-launched process and kills it when the parent process exits

Arguments:

  • process: ChildProcess, required: process to kill when the parent process exits

#####killAll

Kills all processes that are being monitored. This action is run automatically when node is about to exit.

License

Apache-2.0

FAQs

Package last updated on 03 Aug 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts