npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

js-terraform

v0.0.1

Published

A TypeScript/JavaScript wrapper around terraform and terragrunt

Downloads

432

Readme

TerraJS

A TypeScript/JavaScript wrapper around Terraform and Terragrunt. Fully Promise-based.

Installation

$ npm install terraform-js

or

$ yarn add terraform-js

Terraform

Create a new Terraform instance:

const terraform = new Terraform()

Functions

init(path: string, options: ExecuteOptions): Promise<void>

Executes terraform init on the given path.

Options: ExecuteOptions: silent defaults to true

plan(path: string, options: ExecuteOptions): Promise<ResourceCounts>

Executes terraform plan on the given path. Returns ResourceCounts.

Options: ExecuteOptions: silent defaults to true

destroy(path: string, options: DestroyOptions): Promise<ResourceCounts>

Executes terraform destroy on the given path. Returns ResourceCounts.

Options: DestroyOptions: silent defaults to false, autoApprove defaults to false

apply(path: string, options: ApplyOptions): Promise<ResourceCounts>

Executes terraform apply on the given path. Returns an ResourceCounts object with information how many resources were added, changed or destroyed.

Options: ApplyOptions: silent defaults to false, autoApprove defaults to false

getOutputKeys(path: string, options: ExecuteOptions) Promise<string[]>

Executes terraform output -json on the given path and returns the keys. E.g. when you have two outputs

output "output_1" {
  value = "1"
}
output "output_2" {
  value = "2"
}

the function would return ['output_1', 'output_2]

Options: ExecuteOptions: silent defaults to true

outputValue(path: string, value: string, options: OutputOptions) Promise<SimpleOutput | Output>

Executes terraform output -json ${value} on the given path and returns the value. E.g. for

output "output_1" {
  value = "1"
}

the function would return {'output_1': 1} (when simple: true) or

output_1: {
      sensitive: false,
      type: 'string',
      value: '1'
  }

when simple: false

Options: OutputOptions: silent defaults to true, simple defaults to true

outputValue(path: string,options: OutputOptions) Promise<SimpleOutput | Output>

Executes terraform output -json on the given path and returns the values. E.g. for

output "output_1" {
  value = "1"
}
output "output_2" {
  value = "2"
}

the function would return {'output_1': 1, 'output_2': 2} (simple: true) or

output_1: {
      sensitive: false,
      type: 'string',
      value: '1'
  },
  output_2: {
      sensitive: false,
      type: 'string',
      value: '3'
  }

when simple: false

Options: OutputOptions: silent defaults to true, simple defaults to true

Terragrunt

Create a new Terragrunt instance:

const terragrunt = new Terragrunt()

applyAll(path: string, options: ApplyOptions = {}): Promise<void>

Executes terragrunt apply on the given path. Returns void.

Options: ApplyOptions: silent defaults to false, autoApprove defaults to false

destroyAll(path: string, options: DestroyOptions = {}): Promise<void>

Executes terragrunt destroy on the given path. Returns void.

Options: DestroyOptions: silent defaults to false, autoApprove defaults to false

planAll(path: string, options: ExecuteOptions = {}): Promise<void>

Executes terragrunt destroy on the given path. Returns void.

Options: ExecuteOptions: silent defaults to false

output

Same signature and options as the Terraform.output function, except that it uses terragrunt

outputValue

Same signature and options as the Terraform.outputValue function, except that it uses terragrunt

getOutputKeys

Same signature and options as the Terraform.getOutputKeys function, except that it uses terragrunt

Types

ExecuteOptions

interface ExecuteOptions {
  silent?: boolean
}

OutputOptions

interface OutputOptions {
  silent?: boolean
  simple?: boolean
}

InteractiveOptions

interface InteractiveOptions {
  autoApprove?: boolean
  silent?: boolean
}

DestroyOptions and ApplyOptions are an alias for InteractiveOptions

ResourceCounts

type ResourceCounts = {
  addCount: number
  changeCount: number
  destroyCount: number
}

Information how many resources are added, changed or destroyed.

Silent mode

Many functions have the possibility to be executed in silent mode by passing a silent flag in the options object. If silent: true no output is passed to any logger nor the output streams (more on that below)!

The default depends on the function, please read the documentation carefully!

Custom loggers

There are two different ways of "logging", the logger and outputStreams

  • logger: Is used for any terraform/terragrunt function which does not need any interactive input (plan, output..). The default logger is console.log. You can pass a custom logger by calling setLogger for, e.g. writing data to a file. But be careful, silent must be true when you use custom logger and want to get the output

  • outputStreams (out and err): Are used for any terraform/terragrunt function which needs input by the user (apply, destroy...) The default streams are process.stderr and process.stdout