open-index/open-npm huggingface dataset:
npm package: @invis/sdk
Description: 🛠 An SDK for building applications on top of ExtendSwap.
Latest version: 1.1.4

# ExtendSwap SDK

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Actions Status](https://github.com/Uniswap/uniswap-sdk/workflows/CI/badge.svg)](https://github.com/Uniswap/uniswap-sdk)
[![npm version](https://img.shields.io/npm/v/@uniswap/sdk/latest.svg)](https://www.npmjs.com/package/@uniswap/sdk/v/latest)
[![npm bundle size (scoped version)](https://img.shields.io/bundlephobia/minzip/@uniswap/sdk/latest.svg)](https://bundlephobia.com/result?p=@uniswap/sdk@latest)

In-depth documentation on this SDK is available at [uniswap.org](https://uniswap.org/docs/v2/SDK/getting-started/).

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/Uniswap/uniswap-sdk.git
```

Move into the uniswap-sdk working directory

```sh
cd uniswap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @invisible-college/democracy
Description: A minimalist framework for Ethereum and Secure Scuttlebutt
Author: Paul Pham
Latest version: 0.1.7
Deprecated: Please use democracy.js instead.

democracy
=========

Tools for running a country on Ethereum.

With reusable components for general dapp development.

[![CircleCI](https://circleci.com/gh/invisible-college/democracy.svg?style=svg)](https://circleci.com/gh/invisible-college/democracy)

Install with npm
================

```
npm i @invisible-college/democracy
```

Then in your modules

```
const demo = require('@invisible-college/democracy')
```


Roadmap
=======

This is a tentative roadmap to guide our exploration.
To the future!

* 0.1 Release - basic subcommands and libraries for testing
  * commands for deploying and interacting with contracts, use json files for now

* 0.2 Release - basic whisper support
  * commands for sending and listening to messages

* 0.3 Release - ssb config
  * switch to using an ssb alternet for storing configs, artifacts, and messages
  * including sharing reproducible builds across the universe

* 0.4 Release - browserified with webpack?
  * depends on what's useful. also, we'll see if ssb can be webpack'd

REPL
=======

To experiment with and administer Ethereum contracts, it's useful to have a central
console able to attach to any JSONRPC endpoint, whether it's on the mainnet or one
of the third-generation testnets (Ropsten, Kovan, or the upcoming Rinkeby).

Use `preamble.js` to include some boilerplate JSONRPC connection code, which
connects to a Ganache local private testnet on `localhost:8545` by default.

```
node -i -e "web3 = require('./js/preamble')('test')"
```

An example session looks like:

```
$ node -i -e "web3 = require('./js/preamble')('test').web3"
> Coinbase: 
Net: test
kovan
> web3.eth.accounts().then((value) => console.log(JSON.stringify(value))) 
[ '0x00167d7f67f0e2af7580a771d713267c4042d643',
  '0x9025d8a37da2d7c302ef3bd7a6ff65c3a5c37020',
  '0xe8e6b09c730ffd235d15fff0c3751c20d858c306' ]
> web3.eth.getBalance(web3.eth.coinbase)
{ [String: '0'] s: 1, e: 0, c: [ 0 ] }
>
```
npm package: @invisible/assert
Description: Proxy for assert that accepts custom Errors
Author: Invisible Technologies, Inc.
Latest version: 1.0.2

# @invisible/assert

[![CircleCI](https://circleci.com/gh/invisible-tech/assert/tree/master.svg?style=svg&circle-token=3be7ac521e0f2fb0f6b30ca7459a4d0b5b536083)](https://circleci.com/gh/invisible-tech/assert/tree/master)

Assertion library to allow one to throw custom errors.

`@invisible/assert` uses ES2015 Proxies to intercept calls to `assert`.
All methods of `assert` are available, and it is compatible with both
`Node.js`'s standard assertion library and the one on `npm`.

## Motivation

To allow `assert` to throw custom errors.

## Example

### `assert` encapsulates Custom Errors under an AssertionError, which sucks
```js
const assert = require('assert')
assert(false, Error('yohoo')

{ AssertionError: Error: yohoo
    at Object.<anonymous> (/tmp/a/index.js:2:1)
  name: 'AssertionError',
  actual: false,
  expected: true,
  operator: '==',
  message: 
   Error: yohoo
       at Object.<anonymous> (/tmp/a/index.js:2:15)
  generatedMessage: false }
```

_Stack-trace trimmed for readability._

### `@invisible/assert` throws Custom Errors properly, which is nice

```js
const assert = require('assert')
assert(false, Error('yohoo'))
Error: yohoo
    at Object.<anonymous> (/tmp/a/index.js:2:16)
```

_Stack-trace trimmed for readability._

## Installation

```sh
npm install @invisible/assert
```

NB: The `npm` library `assert` is not a dependency in `package.json` in order to
allow one to use Node.js's standard `assert` library.
npm package: @invisible/basic-tests
Description: Basic tests for your project: requiring each file and testing environment variables
Author: Invisible Technologies
Latest version: 1.1.0

# @invisible/basic-tests

[![CircleCI](https://circleci.com/gh/invisible-tech/basic-tests/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/basic-tests/tree/master)

> Basic tests for your project: requiring each file and testing environment variables

## Installation

```bash
yarn add --dev @invisible/basic-tests
```

## Usage

### Programmatically

This module exposes two methods `checkRequireAllFiles` and `checkEnvFromSample`.

1. `checkRequireAllFiles()` will attempt to require every file in your project, aside from those that are ignored by your `.gitignore` or are in your `test` directory. If it encounters any that throw an error on require, or are simply invalid javascript, this function will throw. If it encounters multiple such errors, it will throw one error at the end with all un-requirable files listed.

This test is useful because it ensures that you don't have any obvious errors in your files. It should also encourage you to not have any side effects on requiring files.

2. `checkEnvFromSample()` checks that all env vars in `env.sample` are actually set in your environment. This is useful so that you won't try to run your package when it is missing a required environment variable.

Note: both of these methods are synchronous.

To use these methods, create a [test file](test/specs/index.spec.js) and call these functions

```javascript

// test/index.js

'use strict'

const {
  checkEnvFromSample,
  checkRequireAllFiles,
} = require('@invisible/basic-tests')

describe('env', () => {
  it('env.sample should exist, and all env vars should be set', checkEnvFromSample)
})

describe('dependencies', () => {
  it('should be able to require all files', checkRequireAllFiles)
})

```

```bash
$ mocha test

  ․․

  2 passing (20ms)
```

### CLI

For convenience, we also expose these two methods for the CLI as `check-env-from-sample` and `check-require-all-files` so you can call them from your CI as part of your checks before deploying, or you can add them to the lifecycle script itself so that even after deploy you can get immediate feedback (and your server won't start).

For example:

```json
// package.json:
{
  "prestart": "check-env-from-sample && check-require-all-files",
  "start": "node index.js"
  ...
}
```

Note: `check-env-from-sample` requires `dotenv` before checking.
npm package: @invisible/chance-extras
Description: Singleton Chance, plus some mixins
Author: Invisible Technologies
Latest version: 1.0.9

# @invisible/chance-extras

[![CircleCI](https://circleci.com/gh/invisible-tech/chance-extras/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/chance-extras/tree/master)

> Chance singleton with some mixins

## Install
`yarn add @invisible/chance-extras`

## Usage

```js

const chance = require('@invisible/chance-extras')

const uniqueNumber = chance.uniqueNumberGenerator({ min: 1, max: 10 })

uniqueNumber()
uniqueNumber()
uniqueNumber({ reset: true })

```

See [mixins.spec.js](./test/specs/mixins.spec.js) for a full list of all mixins and how they are used.
npm package: @invisible/current-package-version
Description: Outputs the version of the package you are in, based on package.json
Author: Invisible Technologies
Latest version: 1.0.0

# Current Package Version

Gives the version of the package that you are in

```bash
$ current-package-version
1.0.0
```

Useful for stuff like auto-tagging git commits.

```
git tag v`current-package-version` -am "cool release note, bro"
```


Can also be used programmatically.

```
const { currentPackageVersion } = require('@invisible/current-package-version')

console.log(currentPackageVersion())
```
npm package: @invisible/eslint-config
Description: Invisible Rules
Author: Invisible Technologies
Latest version: 1.3.8

# @invisible/eslint-config

[![CircleCI](https://circleci.com/gh/invisible-tech/eslint-config/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/eslint-config/tree/master)

> Invisible Technologies Eslint Config

# Install

```
yarn add -D @invisible/eslint-config
# or
npm install -D @invisible/eslint-config
```

# Usage

1. Add `"@invisible"` to `extends` on your `.eslintrc.json` file:
```json
  // It should look something like:
  {
    "extends": "@invisible"
  }
```

2. Add eslint as a devDependency:
```
yarn add -D eslint
```
npm package: @invisible/google-api
Description: This package wraps the complexity of Google's auth for service workers and returns authorized [`googleapis`](http://google.github.io/google-api-nodejs-client/) with some helpers.
Author: Invisible Technologies Inc.
Latest version: 1.0.1

# @invisible/google-api

This package wraps the complexity of Google's auth for service workers and returns authorized [`googleapis`](http://google.github.io/google-api-nodejs-client/) with some helpers.

## How to use this package?

1. You need to pass auth token and scopes(optional, spreadsheets by default) as parameters to `.authorize()` or as environmental variables:
```bash
# GOOGLE_SERVICE_ACCOUNT_B64 is the JSON service worker credentials encoded in base64.
GOOGLE_SERVICE_ACCOUNT_B64
# SCOPES is a comma separated list of scopes.
SCOPES
```

- You can add environmental variables to your `.env` file (`env.sample` as example)

2. API:

```typescript
import google from '@invisible/google-api'

const { sheets } = await google.authorize(GOOGLE_SERVICE_ACCOUNT_B64, SCOPES)

sheets.getSheet(spreadsheetId, range)

```

## Publish to NPM
```bash
npm run build
npm publish
```
npm package: @invisible/grammar
Description: Invisible pegjs common grammars
Latest version: 0.0.2

# @invisible/grammar

[![CircleCI](https://circleci.com/gh/invisible-tech/grammar/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/grammar/tree/master)

Invisible Technologies common grammar package. 

# Install

```
yarn add @invisible/grammar
# or
npm install @invisible/grammar
```

# Usage

Import grammar using `pegjs-import` syntax.

```js
// foo.pegjs
@import "@invisible/grammar/eol.pegjs" as EOL
```
npm package: @invisible/logger
Description: Invisible Logging Wrapper
Author: Invisible Technologies Inc.
Latest version: 4.0.7

# logger

[![CircleCI](https://circleci.com/gh/invisible-tech/logger/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/logger/tree/master)

Invisible Logging Wrapper.

### Install
```
yarn add @invisible/logger
```

### Usage
```js
const logger = require('@invisible/logger')

logger.debug('This is a debug message', { meta: true })
```

Make sure to set `LOGGER_LEVEL = silly` on your development environment.

## Default Transports

### Console
Will only be colorized in development.
The default logging level is `info`, but you can use the `LOGGER_LEVEL` environment variable to adjust the logging level.

Disabled by default in `test` env, but can be overriden if `LOGGER_ENABLED_IN_TEST` is `true`.

### Timber
To use Timber, you'll need to define `LOGGER_TIMBER` as `true` in your environment variable and redirect the drain of your Heroku app to the drain address in Timber.
You can also use the `TIMBER_LEVEL` environment variable to set the logging level.
Setting up Timber deactivates the default Console transport.

### Additional Transports

You can add an additional transport with
```js
const logger = require('@invisible/logger')

logger.add(winston.transports.File, { filename: 'somefile.log' })
```
npm package: @invisible/merge-parsers
Description: [![CircleCI](https://circleci.com/gh/invisible-tech/merge-parsers/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/merge-parsers/tree/master)
Author: Invisible Technologies
Latest version: 1.3.3

# @invisible/merge-parsers

[![CircleCI](https://circleci.com/gh/invisible-tech/merge-parsers/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/merge-parsers/tree/master)

Generate parsers for each `.pegjs` file in a directory. Accepts `@import` syntax from pegjs-import.

## Install

`npm install @invisible/merge-parsers`

or

`yarn add @invisible/merge-parsers`

## Usage
```js
// src/parsers/index.js
const mergeParsers = require('@invisible/merge-parsers')

const parsers = mergeParsers({ path: './rules' }) // path contains foo.pegjs and bar.pegjs

parsers.foo() // calls the `foo` parser
parsers.bar() // calls the `bar` parser
```

## Options

- path - Absolute or relative path to parsers rules directory.

- graceful - Instead of raising an error, it fails gracefully returning `undefined`. (default)

- pegOptions - Options object passed through to `pegjs`.

    * See [pegjs](https://github.com/pegjs/pegjs) for more information!

## Miscellaneous information

The module uses relative paths from the file that called the function.

## Issues

Any issue, please, contact us on [Github](https://github.com/invisible-tech/merge-parsers/issues)!
npm package: @invisible/mongoose
Description: Additional functions for working with Mongoose
Author: Invisible Technologies
Latest version: 1.2.1

# @invisible/mongoose

[![CircleCI](https://circleci.com/gh/invisible-tech/mongoose-extras/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/mongoose-extras/tree/master)

This module wraps `mongoose` and exposes auxiliary methods.

## Install

```bash
yarn add @invisible/mongoose
# or
npm install @invisible/mongoose
```

## Usage
```js
const { 
  mongoose,
  initConnection,
} = require('@invisible/mongoose')

initConnection('mongodb://localhost/test') // initialize a mongoose connection.

const { Schema } = mongoose // you can use mongoose normally.

const schema = new Schema({})
const Model = mongoose.model('Model', schema)
```

## License
MIT
npm package: @invisible/njord
Description: Invisible Metrics Package
Author: rodrigo4244
Latest version: 0.0.3

# Njord/Server

## Set up Environment
You need to set the following environment variables on your `.env` file:
- `NODE_ENV, PORT, DB_CONNECTION_STRING, DB_TEST_CONNECTION_STRING, NJORD_API_TOKEN`

## How to start Njord server?

```sh
$ yarn build
$ node build/index.js
```

## Routes
### POST /api/v1/event
This route creates an event and save it to a MongoDB database.

The incoming request `body` should have the following parameters:

#### name
Type: `String`

#### metadata
Type: `Object`


# Njord/client
## How to install the client?

`npm install @invisible/njord`

or

`yarn add @invisible/njord`

## API

### recordEvent(options)
- Returns a `Promise` for a response from Njord server.

#### options

```ts
interface optionsInterface {
  name: string,
  metadata: object,
}
```

## Environment Variables
Add the following environment variables:
- `NJORD_API_TOKEN` - Njord server authentication token.
- `NJORD_HOSTNAME` - Njord hostname url. Ex: `http://inv-njord.herokuapp.com/`

Consume programmatically like below:

```js
import { recordEvent } from '@invisible/njord/client'

[...]
// Inside some async function
  await recordEvent({ name: 'eventName', metadata: { data: 'test' } })
[...]
```

# LICENSE
MIT
npm package: @invisible/pegjs-import
Description: Import other PEG files into a PEG.js grammar.
Author: Harry Schmidt
Latest version: 1.1.1

# @invisible/pegjs-import

[![CircleCI](https://circleci.com/gh/invisible-tech/pegjs-import/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/pegjs-import/tree/master)

Import other PEG files into a PEG.js grammar.

Forked from [casetext](https://github.com/casetext/pegjs-import).

## Installation

```
npm install --save pegjs pegjs-import
```

## Usage

pegjs-import provides a single function that replaces ```peg.buildParser```:

```javascript
  var pegimport = require('pegjs-import');

  var parser = pegimport.buildParser('path/to/grammar.peg', options);
  parser.parse('foo');
```

Instead of taking a string, it takes a filename.

Inside a PEG.js grammar, you can now make use of the ```@import``` directive, like so:

```
/* NOTE: this grammar won't work in stock PEG.js anymore! */

{
  this.notes = "Initializers work as you expect them to and are imported.";
}

@import "path/to/grammar"

start
  = grammar
```

When you ```@import``` another grammar, that grammar's topmost rule becomes accessible in the context of the current grammar under one of two possible rule names: 
   - A name you provide explicitly through the use of the optional "as" parameter
   - The basename of the file, corrected to be a valid Javascript identifier (so if the file were called /foo/bar/my-grammar.peg, the rule name would be my_grammar).

## Changes from stock PEG.js behavior

* You cannot supply ```options.allowedStartRules``` anymore. The only allowed start rule is always the first rule in the grammar.
* You cannot supply a grammar as a string, you must give a filename. There are libraries that provide virtual and in-memory filesystems if you want to work on grammars as strings.

## Limitations

- pegjs-import is only tested on NodeJS, though the parsers work everywhere they usually do.
- Circular dependencies explicitly throw an exception. Don't use them.
- Please don't do funny things with rule names, pegjs-import will probably explode. I will not be held responsible for exploding grammars.

## Changelog

### 0.2.6

 - Fixed a bug in path comparison that broke Windows.

### 0.2.5

- parse-imports now handles /index.peg correctly.

### 0.2.4

- Resolve a glitch in external rule name resolution.

### 0.2.3

- Don't require "as" identifiers to have two characters in them

### 0.2.2

- Make sure we treat internal vs. external rule_refs correctly

### 0.2.1

- Fixed bug in options parsing.

### 0.2.0

- Changed syntax to more closely correspond to that of PEG.js.
npm package: @invisible/project-template
Description: Invisible Project Template
Author: Invisible Technologies
Latest version: 1.2.6

# inv-project-template
> Invisible Project Template

## Installation

```sh
npm install -g @invisible/project-template
# or
yarn global add @invisible/project-template
```

You can also install this straight from your local repo: (Useful for testing)
```sh
yarn global add file:/path/to/@invisible/project-template
```

## Usage

Create a new repo in github. https://github.com/new

Make sure the name of your repo matches the directory you will create for your new project.

```sh
mkdir new-project-name
cd new-project-name
init-inv-project

```

## Troubleshooting

If you installed the package using yarn and when you try to run the binary `init-inv-project` an error is raised, the problem is probably that you don't have the real yarn global bin folder added to your `PATH`. To do that, simply run one of the following commands:

```sh
export PATH="$PATH:$HOME/.config/yarn/global/node_modules/.bin" # (Works only for this terminal)
# or append to your PATH on zsh config file the following (permanent):
":$HOME/.config/yarn/global/node_modules/.bin"
```

For more information, click on the [link](https://github.com/yarnpkg/yarn/issues/648#issuecomment-294160808) to read the issue on Github!

## TODO
1. Create the github repo from the script
2. Copy over our github labels
3. Provide more options and allow for upgrading .eslint configs etc without killing package.json.
npm package: @invisible/samx
Description: Invisible's Frontend Stack using Mobx, React and SAM Pattern
Author: Invisible Technologies Inc.
Latest version: 3.1.0

# SAMx

SAMx is a SAM pattern implementation for MobX and React.

# How?

```js
import * as React from 'react'
import { render } from 'react-dom'
import { Model, State, Propose, View } from '../../src'

// Design the model for your Application
Model('app', { schema: {
  todos: [
    { id: 0, description: 'Write example', done: true },
  ],
} })

// Create necessary State evaluator
const appStateEvaluator = models => () => ({
  pending: models.app.todos.filter(t => ! t.done),
  done: models.app.todos.filter(t => t.done),
  size: models.app.todos.length,
})
const state = State(appStateEvaluator)

// Create proposals and actions
const proposeTodoUpdate = (id, props) => ({
  name: 'update',
  // You can use the Key property to cause deep mutations without triggering undesired renders
  key: `todos[${id}]`,
  value: props,
})

const proposeNewTodo = description => ({ todos }) => ({
  name: 'append',
  value: { todos: [...todos, { description, done: false, id: todos.length }] },
})

const createTodo = e => {
  if (e.key === 'Enter') Propose('app')(proposeNewTodo(e.target.value))
}

const updateDescription = id => e =>
  Propose('app')(proposeTodoUpdate(id, { description: e.target.value }))

// Create the View
const ListItem = View(({ todo: { description, done, id } }) =>
  <li>
    <input type='checkbox' value={done} checked={done} onChange={updateStatus(id)}/>
    <input type='text' value={description} onChange={updateDescription(id)}/>
  </li>)

const TodoList = View(() => (
  <div>
      Hi, we have {state.size} total todos.
      Pending:
    <ul>
      {
        state.pending.map((t, i) => <ListItem key={i} todo={t}/>)
      }
    </ul>
      Done:
    <ul>
      {
        state.done.map((t, i) => <ListItem key={i} todo={t}/>)
      }
    </ul>

    <p>
      Add new: <input type='text' onKeyPress={createTodo}/>
    </p>
  </div>
))

// Render
const root = document.getElementById('root')
render(<TodoList />, root)
```
npm package: @invisible/slack-browser-api
Description: Access Slack API from the Browser -- Useful for creating Browser Extensions.
Author: Invisible Technologies
Latest version: 1.0.4

# slack-browser-api

[![CircleCI](https://circleci.com/gh/invisible-tech/slack-browser-api/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/slack-browser-api/tree/master)

Access Slack API from the Browser -- useful for creating Browser Extensions.

## Install

```
npm install @invisible/slack-browser-api
```

## Consuming

The preferred method for consuming this package is through a build process.
We recommend [browserify](http://browserify.org) for its simplicity.

See [./example](./example).
npm package: @invisible/slack-wrap
Description: Wraps @slack/client to make it use destructured arguments
Author: Invisible Technologies
Latest version: 1.1.3

# slack-wrap

[![CircleCI](https://circleci.com/gh/invisible-tech/slack-wrap/tree/master.svg?style=svg)](https://circleci.com/gh/invisible-tech/slack-wrap/tree/master)

This module wraps the Slack Web Client and does several things to enhance the API.

# Install
```
yarn add invisible-tech/slack-wrap
```


# Usage
```javascript
'use strict'

require('dotenv').config() // Loads .env
const { WebClient } = require('@slack/client')
const { factory, methods } = require('@invisible/slack-wrap')

const accessToken = process.env.SLACK_API_TOKEN || ''
const slack = factory({
  accessToken,
  teamId: 'T012345',
  cachedPaths: [
    { path:'channels.list', ttl: 60000 },
    { path:'users.info' },
  ],
  methods,
})

slack.chat.postMessage({
  channel: 'C6BQ7JA0J',
  icon_emoji: ':joy:',
  text: 'stuff',
  username: 'wooo2',
})
.then(console.log)
.catch(console.error)
```


# Features

## Destructured arguments

All API methods that take arguments will accept a single object. This is an improvement on using positional arguments, which require you to remember the order.

## Cached methods

All API methods can be optionally cached in memory, with an optional TTL (default is 60 seconds). This will reduce your total number of API calls and prevent you from hitting the throttling limit. You determine which methods to cache by passing in a `cachedPaths` argument to `factory`.

The `cachedPaths` argument should be an Array of Objects, where each item is of the form `{ path: 'x.y', ttl: 30000 }` or `{ path: 'x.y' }` (to use the default ttl).

## Additional methods

You can add any additional methods you wish by passing them in as the `methods` argument to `factory`. The `methods` argument is an Object containing the methods you wish to add. These methods should all take a `slack` object as an argument, then use that given `slack` object to perform the additional API calls, etc. See [methods/message.js](./src/slack/methods/message.js) for an example.
npm package: @invisible/sync-branches
Description: # Install
Author: Invisible Technologies
Latest version: 0.0.1

# @invisible/sync-branches

# Install

```
npm install @invisible/sync-branches
# or
yarn add @invisible/sync-branches
```

# Setup

1. Add `NPM_TOKEN` environmental variable to your project on circleCI.

    To do this you will have to:
    
    - Go to `https://circleci.com/gh/invisible-tech/<your-project-name>/edit#env-vars` (replace \<your-project-name\>, e.g. gear)
    - Click on `Import Variable(s)`.
    - Select `NPM_TOKEN`.
      - If you don't have permission to do that, ask your superior to do it!
npm package: @invisible/tagger
Description: # Install
Author: Invisible Technologies
Latest version: 0.0.2

# @invisible/tagger

# Install

```
npm install @invisible/tagger
# or
yarn add @invisible/tagger
```

# Setup

1. Add `NPM_TOKEN` environmental variable to your project on circleCI.

    To do this you will have to:
    
    - Go to `https://circleci.com/gh/invisible-tech/<your-project-name>/edit#env-vars` (replace \<your-project-name\>, e.g. gear)
    - Click on `Import Variable(s)`.
    - Select `NPM_TOKEN`.
      - If you don't have permission to do that, ask your superior to do it!
npm package: @invisible/tslint-config
Description: Invisible's TSLint rules
Author: Invisible Technologies Inc.
Latest version: 1.0.16

# tslint-config

TypeScript Linting Rules based on our ES Linting Rules

# Install

```
yarn add -D @invisible/tslint-config
# or
npm install -D @invisible/tslint-config
```

# Usage

1. Add `"@invisible/tslint-config"` to `extends` on your `tslint.json` file:
```json
  // It should look something like:
  {
    "extends": [ "@invisible/tslint-config" ]
  }
```

2. Add missing development dependencies:
```
yarn add -D tslint typescript
```
npm package: @invisionag/babel-config-ivx
Description: # Description This package provides a baseline configuration for babel as it is being used within our organisation. It adds:
Author: Tobias Lengsholz
Latest version: 5.2.2

# @invisionag/babel-config-ivx

# Description
This package provides a baseline configuration for babel as it is being used within our organisation. It adds:

* env, react, flow and stage-2 presets
* react-hot-loader, styled-components and dynamic import plugins
* es5 transformation of module imports for testing

# Installation

1. Make sure you have all the peer dependencies installed in your project:
* "@babel/core": "^7.8.4",
* "@babel/preset-env": "^7.8.4",
* "babel-plugin-dynamic-import-node": "^2.0.7",
* "babel-preset-flow": "^7.8.3",
* "babel-preset-react": "^7.8.3",
* "babel-preset-stage-2": "^7.8.3"

2. Install `@invisionag/babel-config-ivx` as a development dependency.

# Usage
In your `.babelrc.js`, you can import this config as base config. You can then extend the baseConfig as desired. A simple example that also adds the lodash and idx plugins would look like this:

```js
const baseConfig = require('@invisionag/babel-config-ivx');
module.exports = {
  ...baseConfig,
  plugins: [
    ...baseConfig.plugins,
    "lodash",
    "idx",
  ],
};

```