New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

task-env

Package Overview
Dependencies
Maintainers
1
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

task-env

A framework for building reusable JS tasks

latest
Source
npmnpm
Version
2.14.7
Version published
Maintainers
1
Created
Source

Task Env

A framework for building reusable JS tasks.

FeatureBuilt With
Parse CLI argumentsmri
Interact with the CLIInquirer.js
Execute commandscommandland
JSON and text storedot-store

Install

npm install --save-dev task-env

Create an executable

touch run
chmod +x run

Write some code

#!/usr/bin/env node

require("task-env")({
  args: process.argv.slice(2),
  tasks: [
    {
      sayHello: ({ hello }) => {
        console.log(">", hello)
      },
    },
  ],
})

Run your task

./run sayHello --hello=hi
> hi

Package tasks

Export task:

export function sayHello({ hello }) {
  console.log(hello)
}

Require task:

#!/usr/bin/env node

require("task-env")({
  args: process.argv.slice(2),
  tasks: [require("./say-hello")],
})

Interact

export async function happy({ ask }) {
  let { happy } = await ask([
    {
      type: "confirm",
      name: "happy",
      message: "Are you happy?",
    },
  ])
}

See the Inquirer.js prompt docs for available options.

Call other tasks

export function sayHello({ tasks }) {
  tasks.say({ text: "hello" })
}

export function say({ text }) {
  console.log(">", text)
}

Calling through tasks binds the CLI arguments and helper functions, as if the task were called via CLI.

Execute commands

export async function ls({ run }) {
  await run("ls", ["/"])
}

See the commandland docs for available options.

JSON and text store

Task env uses dot-store to provide an immutable store with atomic filesystem persistence.

Create a directory with some JSON files:

{
  "users": {
    "bob": {
      "key": "~/.ssh/bob_rsa"
    }
  }
}

The stores option allows you to define multiple named stores:

#!/usr/bin/env node

require("task-env")({
  args: process.argv.slice(2),
  stores: {
    config: {
      pattern: "**/*",
      root: __dirname,
    },
  },
  tasks: [require("./tasks/user")],
})

Within your task, get and set JSON using dot-style property strings:

export async function user({ config, name, key }) {
  if (key) {
    await config.set(`users.${name}.key`, key)
  }

  console.log(">", config.get(`users.${name}`))
}

Run via CLI:

./run user --name=bob --key=~/.ssh/id_rsa
> { key: "~/.ssh/id_rsa" }

All options

OptionExamplePurpose
alias{h: ["help"]}CLI arguments aliases
preSetup[config=>config]Pre-setup functions (before argv parsing)
setup[config=>config]Setup functions
stores{store: {root: __dirname, pattern: "**/*"}}Store configurations
teardown[args=>{}]Teardown functions
tasks[{ task: ({})=>{} }]Task functions

Keywords

task

FAQs

Package last updated on 28 Jul 2018

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