diff --git a/.gitignore b/.gitignore
index e47249f..7ff4843 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.nyc_output/
lib/
node_modules/
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..c35632a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,21 @@
+cache: yarn
+language: node_js
+node_js:
+ - node
+ - '8'
+ - '6'
+os:
+ - linux
+deploy:
+ provider: npm
+ email: support@nativecode.com
+ api_key:
+ secure: >-
+ EoY8os0mZH2U1SqZFDh5p5CoImh15kK1Ckap9/6WuNXHO+ZduuqRCkgI3/Q/xMlj9b+tmGDfrZ/dTxvXn+aIW+brGvqMETKHsWSdTRnfHCFV1qUpSb+I9h/oMqbljaapbqIIZRQWwbf0rMAUwdsD9F8Un/cTAjW3BrnL7UES2f62+3IAZWUbWkyfM973cuT88Vt6JqrAsHYbVKahacChrohT3pJarsGrMZ3713TQ1X1P2pgbheQYM+82puXNT3jTjp48rg6zBslSjR0ze1un3sUpTmmt8F/B4U9Gma20X9qDvOqPR3ej6Z5wvj/iI/07rDIJISFldJK2+RE8qSdILjEPvrF9OtmpLjpzaokj2JEhwX3hEYHXSu9Uhv7TqxmJYTrlLKTTJgzLu8PI5WgvU5WtfXjrSRLhz71taWVkijeCNUZYjvVSCOucDyi8w55B+zFwZfIgb6Uv8O3b5Rn+GGMlinWLreCgAQn2LqOswjXgk6LYG9Sk3DMGaILAmdxzVZ5yGM8tgg3nk4igQs8SpSRibpAaEeLi2HJfI4prGzvbKXZh+snPp7iPkDjTvHmKjH6fSfVZPwOGk+N5SRWj/v21LONxYGYejJIF/RgD35ILu/qMzz8Z8kT+Od2RJjwxatq1I2RcxLE4DCNCgkcv6MwQrL3z+hjPM2KlDFrBj/c=
+ on:
+ branch: master
+ tag: next
+ repo: nativecode-dev/chest
+ skip_cleanup: true
+after_success:
+ - npm run coveralls
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..da173d5
--- /dev/null
+++ b/README.md
@@ -0,0 +1,43 @@
+[](https://www.npmjs.com/package/@beard/chest)
+[]()
+[](https://www.npmjs.com/package/@beard/chest)
+[](https://www.npmjs.com/package/@beard/chest)
+
+[](https://travis-ci.org/nativecode-dev/chest)
+[](https://coveralls.io/github/nativecode-dev/chest)
+
+[](https://travis-ci.org/nativecode-dev/chest)
+[](https://coveralls.io/github/nativecode-dev/chest)
+
+# @beard/chest
+
+
+
+
+
+# WTF
+
+It's a chest. With TypeScript inside.
+
+Actually, it's a set of tools to manage TypeScript projects, whether they are stand-alone or workspace-based (either [Yarn](https://yarnpkg.com) or [Lerna](https://lernajs.io).
+
+# What Problems Get Solved
+
+CHEST will...
+
+- Link `@types` dependencies as a `types` array in your `tsconfig.json`, explicitly listing your declaration dependencies.
+- Propogate desriptive `package.json` properties down to child projects if using [Yarn](https://yarnpkg.com) workspaces.
+
+# Supported Project Management Tools
+
+- [Yarn](https://yarnpkg.com) 1.3.2+
+- [Lerna](https://lernajs.io) 2.0+
+
+# License
+© 2017 NativeCode Development
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chest-temp.png b/chest-temp.png
new file mode 100644
index 0000000..0757f22
Binary files /dev/null and b/chest-temp.png differ
diff --git a/mocha.opts b/mocha.opts
new file mode 100644
index 0000000..72a1a21
--- /dev/null
+++ b/mocha.opts
@@ -0,0 +1,7 @@
+--require ts-node/register
+--require tsconfig-paths/register
+--require source-map-support/register
+--full-trace
+--recursive
+--bail
+src/**/*.spec.ts
diff --git a/package.json b/package.json
index 5dcabbe..f2e0016 100644
--- a/package.json
+++ b/package.json
@@ -1,29 +1,63 @@
{
- "bin": "./lib/cli.js",
+ "name": "@beard/chest",
"description": "CHEST of me best tools, matey!",
+ "bin": "./lib/CLI.js",
+ "license": "MIT",
+ "main": "./lib/CLI.js",
+ "typings": "./lib/index.d.ts",
+ "version": "2.0.0-alpha-1",
"dependencies": {
"chalk": "^2.3.0"
},
"devDependencies": {
+ "@types/chai": "^4.0.4",
+ "@types/chai-as-promised": "^7.1.0",
"@types/chalk": "^2.2.0",
+ "@types/mocha": "^2.2.44",
"@types/node": "^8.0.52",
"bin-shebang": "^1.0.11",
+ "chai": "^4.1.2",
+ "chai-as-promised": "^7.1.1",
+ "coveralls": "^3.0.0",
+ "cross-env": "^5.1.1",
+ "mocha": "^4.0.1",
+ "nyc": "^11.3.0",
"rimraf": "^2.6.2",
"ts-node": "^3.3.0",
+ "tsconfig-paths": "^2.3.0",
"tslint": "^5.8.0",
+ "tslint-config-standard": "^7.0.0",
"typescript": "^2.6.1"
},
- "license": "MIT",
- "main": "./lib/cli.js",
- "name": "@beard/chest",
+ "nyc": {
+ "all": true,
+ "exclude": [
+ "src/**/*.spec.ts",
+ "src/CLI.ts"
+ ],
+ "extension": [
+ ".ts"
+ ],
+ "include": [
+ "src/**/*.ts"
+ ],
+ "instrument": true,
+ "sourceMap": true
+ },
"publishConfig": {
"access": "public"
},
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/nativecode-dev/chest"
+ },
"scripts": {
"build": "tsc --project tsconfig.json",
+ "lint": "tslint src/**/*.ts",
"prebuild": "rimraf lib",
- "postbuild": "bin-shebang"
- },
- "typings": "lib/index.d.ts",
- "version": "1.1.2"
+ "postbuild": "bin-shebang && yarn run lint",
+ "test": "cross-env NODE_ENV=test nyc mocha --opts mocha.opts",
+ "pretest": "yarn run build",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls"
+ }
}
diff --git a/src/CLI.ts b/src/CLI.ts
new file mode 100644
index 0000000..6424024
--- /dev/null
+++ b/src/CLI.ts
@@ -0,0 +1,3 @@
+import { Chest } from './index'
+
+Chest.run(process.cwd(), ...process.argv.slice(2))
diff --git a/src/Chest.spec.ts b/src/Chest.spec.ts
new file mode 100644
index 0000000..150ad6f
--- /dev/null
+++ b/src/Chest.spec.ts
@@ -0,0 +1,58 @@
+import 'mocha'
+
+import * as chai from 'chai'
+import * as chaiAsPromised from 'chai-as-promised'
+
+import { Chest } from './Chest'
+import { Files, Registry } from './Core'
+
+const expect = chai.expect
+
+describe('when using RootProject to load a project', () => {
+
+ beforeEach(() => {
+ chai.should()
+ chai.use(chaiAsPromised)
+ })
+
+ it('should load single npm project', async () => {
+ const directory = Files.join(process.cwd(), 'testables', 'single')
+ const project = await Chest.project(directory)
+ const projects = await Chest.projects(project)
+ expect(projects.length).to.equal(1)
+ expect(projects[0].name).to.equal('project-single')
+ expect(projects[0].path).to.equal(directory)
+ })
+
+ it('should load yarn workspace project', async () => {
+ const directory = Files.join(process.cwd(), 'testables', 'workspaces')
+ const project = await Chest.project(directory)
+ const projects = await Chest.projects(project)
+ expect(projects.length).to.equal(2)
+ expect(projects[0].name).to.equal('simple-package')
+ expect(projects[1].name).to.equal('simple-project')
+ expect(projects[0].owner).to.not.equal(undefined)
+ expect(projects[0].owner).to.not.equal(undefined)
+ })
+
+ it('should throw error when single project does not exist', async () => {
+ const directory = Files.join(process.cwd(), 'testables', 'nonexistant')
+ Chest.project(directory).then(project => Chest.projects(project).should.eventually.throw())
+ })
+
+ it('should throw error when workspace project has no child projects', async () => {
+ const directory = Files.join(process.cwd(), 'testables', 'workspaces-invalid')
+ Chest.project(directory).then(project => Chest.projects(project).should.eventually.throw())
+ })
+
+ it('should run scripts for single project', () => {
+ const directory = Files.join(process.cwd(), 'testables', 'single')
+ Chest.run(directory, ...Object.keys(Registry.all()))
+ })
+
+ it('should run scripts for workspace project', () => {
+ const directory = Files.join(process.cwd(), 'testables', 'workspaces')
+ Chest.run(directory, ...Object.keys(Registry.all()))
+ })
+
+})
diff --git a/src/Chest.ts b/src/Chest.ts
new file mode 100644
index 0000000..1a6f0be
--- /dev/null
+++ b/src/Chest.ts
@@ -0,0 +1,61 @@
+import * as path from 'path'
+
+import { Files, NPM, Project, UpdaterType } from './Core'
+import { Registry } from 'src';
+
+export class Chest {
+ public static async run(root: string, ...args: string[]): Promise {
+ const project = await Chest.project(root)
+ const projects = await Chest.projects(project)
+ const updaters = Registry.all()
+
+ Object.keys(updaters).forEach(async name => {
+ const updater = updaters[name]
+
+ if (updater.type === UpdaterType.Root) {
+ await updater.exec(root)
+ } else {
+ await Promise.all(projects.map(child => updater.workspace(child)))
+ }
+ })
+ }
+
+ public static async project(root: string): Promise {
+ const npmfile = path.join(root, 'package.json')
+
+ if (await Files.exists(npmfile) === false) {
+ throw new Error(`failed to find ${npmfile} in ${root}`)
+ }
+
+ const npm = await Files.json(npmfile)
+ return new Project(npm.name, root)
+ }
+
+ public static async projects(owner: Project): Promise {
+ const project = await Chest.project(owner.path)
+ const npm = await project.package
+
+ if (npm.private && npm.workspace) {
+ return npm.workspace.map(workspaceRoot => Chest.workspaces(project, workspaceRoot))
+ .reduce(async (previous, current) => (await previous).concat(await current), Promise.resolve([]))
+ }
+
+ return [project]
+ }
+
+ private static async workspaces(owner: Project, workspaceRoot: string): Promise {
+ workspaceRoot = Files.join(owner.path, workspaceRoot.substring(0, workspaceRoot.indexOf('/*')))
+
+ if (await Files.exists(workspaceRoot) === false) {
+ throw new Error(`failed to find workspace ${workspaceRoot} in ${owner.name}`)
+ }
+
+ const projects = await Files.listdirs(workspaceRoot)
+
+ return Promise.all(projects.map(async project => {
+ const npmfile = path.join(project, 'package.json')
+ const npm = await Files.json(npmfile)
+ return new Project(npm.name, project, owner)
+ }))
+ }
+}
diff --git a/src/Core/Actions/Packages.ts b/src/Core/Actions/Packages.ts
new file mode 100644
index 0000000..3e47a53
--- /dev/null
+++ b/src/Core/Actions/Packages.ts
@@ -0,0 +1,48 @@
+import * as path from 'path'
+
+import { Files, Logger, NPM, Project, Registry, Updater, UpdateScript, UpdaterType } from '../index'
+
+const ScriptName = Files.extensionless(__filename)
+const log = Logger(ScriptName)
+const prefix = '@types'
+
+interface Dependency {
+ filename: string
+ filepath: string
+ npmname: string
+ scope?: string
+ typings?: string
+}
+
+/*
+ * Propogates changes from the root package.json to child
+ * packages.
+ **/
+class Script extends UpdateScript {
+ constructor() {
+ super(ScriptName, UpdaterType.Projects)
+ }
+
+ public async workspace(project: Project): Promise {
+ const source = await project.package
+ const target = await project.owner.package
+
+ target.author = source.author
+ target.bugs = source.bugs
+ target.description = source.description
+ target.homepage = source.homepage
+ target.license = source.license
+ target.repository = source.repository
+
+ const filename = path.join(project.path, 'package.json')
+
+ if (this.testing) {
+ this.log.task('updated package info', filename, target)
+ } else {
+ await Files.save(filename, target)
+ this.log.task('updated package info', filename)
+ }
+ }
+}
+
+Registry.add(ScriptName, new Script())
diff --git a/src/actions/typings.ts b/src/Core/Actions/Typings.ts
similarity index 66%
rename from src/actions/typings.ts
rename to src/Core/Actions/Typings.ts
index 2a104fe..0b566fb 100644
--- a/src/actions/typings.ts
+++ b/src/Core/Actions/Typings.ts
@@ -1,10 +1,8 @@
-import * as files from '../files'
import * as path from 'path'
-import { NPM, Register, Updater, Workspace } from '../registry'
-import { UpdateScript } from '../script'
+import { Files, Logger, NPM, Project, Registry, Updater, UpdateScript, UpdaterType } from '../index'
-const ScriptName = files.noext(__filename)
-const log = files.Logger(ScriptName)
+const ScriptName = Files.extensionless(__filename)
+const log = Logger(ScriptName)
const prefix = '@types'
interface Dependency {
@@ -21,24 +19,28 @@ interface Dependency {
**/
class Script extends UpdateScript {
constructor() {
- super(ScriptName)
+ super(ScriptName, UpdaterType.Root)
}
public async exec(rootpath: string): Promise {
const tsconfigfile = path.join(rootpath, 'tsconfig.json')
const packagedir = path.join(rootpath, 'node_modules')
- if (await files.exists(tsconfigfile) && await files.exists(packagedir)) {
- const packagedirs = await files.listdirs(packagedir)
- const tsconfig = await files.json(tsconfigfile)
+ if (await Files.exists(tsconfigfile) && await Files.exists(packagedir)) {
+ const packagedirs = await Files.listdirs(packagedir)
+ const tsconfig = await Files.json(tsconfigfile)
const dependencies = await Promise.all(packagedirs.map(async packagedir => await this.map(packagedir)))
const typings = dependencies.reduce((previous, current) => previous.concat(current.filter(c => !!c.typings)), [])
tsconfig.compilerOptions.types = typings.map(typing => typing.npmname).sort()
- await files.save(tsconfigfile, tsconfig)
- this.log.task('updated types', tsconfigfile)
+ if (this.testing) {
+ this.log.task('updated types', tsconfigfile, tsconfig)
+ } else {
+ await Files.save(tsconfigfile, tsconfig)
+ this.log.task('updated types', tsconfigfile)
+ }
}
}
@@ -46,12 +48,12 @@ class Script extends UpdateScript {
const dirname = path.basename(packagedir)
if (dirname[0] === '@') {
- const scopedirs = await files.listdirs(packagedir)
+ const scopedirs = await Files.listdirs(packagedir)
return await Promise.all(scopedirs
.map(scope => [scope, path.join(scope, 'package.json')])
.map(async ([scope, scopepath]): Promise => {
- const npm = await files.json(path.join(scope, 'package.json'))
+ const npm = await Files.json(path.join(scope, 'package.json'))
return {
filename: 'package.json',
@@ -65,8 +67,8 @@ class Script extends UpdateScript {
const packagefile = path.join(packagedir, 'package.json')
- if (await files.exists(packagefile)) {
- const npm = await files.json(packagefile)
+ if (await Files.exists(packagefile)) {
+ const npm = await Files.json(packagefile)
return [{
filename: 'package.json',
@@ -80,4 +82,4 @@ class Script extends UpdateScript {
}
}
-Register(ScriptName, new Script())
+Registry.add(ScriptName, new Script())
diff --git a/src/Core/Actions/index.ts b/src/Core/Actions/index.ts
new file mode 100644
index 0000000..194367d
--- /dev/null
+++ b/src/Core/Actions/index.ts
@@ -0,0 +1,2 @@
+import './Packages'
+import './Typings'
diff --git a/src/Core/Files.ts b/src/Core/Files.ts
new file mode 100644
index 0000000..cce268c
--- /dev/null
+++ b/src/Core/Files.ts
@@ -0,0 +1,125 @@
+import * as fs from 'fs'
+import * as path from 'path'
+
+export interface Stat {
+ dir: boolean
+ file: boolean
+ filename: string
+}
+
+class InternalFiles {
+ public exists(filepath: string): Promise {
+ return new Promise((resolve, reject) => {
+ fs.exists(filepath, (exists: boolean) => resolve(exists))
+ })
+ }
+
+ public extensionless(filename: string): string {
+ const basename = path.basename(filename)
+ const extname = path.extname(basename)
+ return basename.replace(extname, '')
+ }
+
+ public join(...args: string[]): string {
+ return path.join(...args)
+ }
+
+ public async json(filepath: string): Promise {
+ if (await this.exists(filepath)) {
+ const buffer = await this.readfile(filepath)
+ return JSON.parse(buffer.toString())
+ }
+
+ throw new Error(`requested file ${filepath} does not exist`)
+ }
+
+ public readfile(filepath: string): Promise {
+ return new Promise((resolve, reject) => {
+ fs.readFile(filepath, (error: NodeJS.ErrnoException, data: Buffer) => {
+ if (error) {
+ reject(error)
+ } else {
+ resolve(data)
+ }
+ })
+ })
+ }
+
+ public async listdirs(filepath: string): Promise {
+ const stats = await this.statfiles(filepath)
+ return stats.filter(stat => stat.dir).map(stat => stat.filename)
+ }
+
+ public async listfiles(filepath: string): Promise {
+ const stats = await this.statfiles(filepath)
+ return stats.filter(stat => stat.file).map(stat => stat.filename)
+ }
+
+ public async save(filepath: string, data: T): Promise {
+ await this.writefile(filepath, JSON.stringify(data, null, 2))
+ }
+
+ public async statfile(filepath: string): Promise {
+ return new Promise((resolve, reject) => {
+ fs.stat(filepath, (error: NodeJS.ErrnoException, stats: fs.Stats) => {
+ if (error) {
+ reject(error)
+ } else {
+ resolve(stats)
+ }
+ })
+ })
+ }
+
+ public statfiles(filepath: string): Promise {
+ return new Promise((resolve, reject) => {
+ fs.readdir(filepath, async (error: NodeJS.ErrnoException, files: string[]) => {
+ if (error) {
+ reject(error)
+ } else {
+ const promises = files.map(async (filename): Promise => {
+ const fullpath = path.join(filepath, filename)
+ const stat = await this.statfile(fullpath)
+ return {
+ dir: stat.isDirectory(),
+ file: stat.isFile(),
+ filename: fullpath,
+ }
+ })
+
+ const stats = await Promise.all(promises)
+
+ resolve(stats)
+ }
+ })
+ })
+ }
+
+ public writefile(filepath: string, data: any): Promise {
+ return new Promise((resolve, reject) => {
+ fs.writeFile(filepath, data, (error: NodeJS.ErrnoException) => {
+ if (error) {
+ reject(error)
+ } else {
+ resolve()
+ }
+ })
+ })
+ }
+}
+
+export interface Files {
+ exists(filepath: string): Promise
+ extensionless(filename: string): string
+ join(...args: string[]): string
+ json(filepath: string): Promise
+ readfile(filepath: string): Promise
+ listdirs(filepath: string): Promise
+ listfiles(filepath: string): Promise
+ save(filepath: string, data: T): Promise
+ statfile(filepath: string): Promise
+ statfiles(filepath: string): Promise
+ writefile(filepath: string, data: any): Promise
+}
+
+export const Files: Files = new InternalFiles()
diff --git a/src/Core/Interfaces/Dictionary.ts b/src/Core/Interfaces/Dictionary.ts
new file mode 100644
index 0000000..a6a4e04
--- /dev/null
+++ b/src/Core/Interfaces/Dictionary.ts
@@ -0,0 +1,3 @@
+export interface Dictionary {
+ [key: string]: T
+}
diff --git a/src/Core/Interfaces/NPM.ts b/src/Core/Interfaces/NPM.ts
new file mode 100644
index 0000000..c4db253
--- /dev/null
+++ b/src/Core/Interfaces/NPM.ts
@@ -0,0 +1,20 @@
+import { Dictionary } from './Dictionary'
+
+export interface NPM {
+ author?: string | string[] | Dictionary
+ bugs?: string | { type: string, url: string }
+ dependencies?: Dictionary
+ description?: string
+ devDependencies?: Dictionary
+ homepage?: string
+ license?: string
+ name: string
+ private?: boolean
+ repository?: string | { type: string, url: string }
+ scripts?: Dictionary
+ types?: string,
+ typeScriptVersion: string,
+ typings?: string
+ version: string
+ workspace?: string[]
+}
diff --git a/src/Core/Interfaces/Updater.ts b/src/Core/Interfaces/Updater.ts
new file mode 100644
index 0000000..771c48b
--- /dev/null
+++ b/src/Core/Interfaces/Updater.ts
@@ -0,0 +1,17 @@
+import { Project } from '../Project'
+
+export enum UpdaterType {
+ Root = 'root',
+ Projects = 'projects',
+}
+
+export interface Updater {
+ name: string
+ type: UpdaterType
+ exec(rootpath: string): Promise
+ workspace(project: Project): Promise
+}
+
+export type Updaters = {
+ [key: string]: Updater
+}
diff --git a/src/Core/Interfaces/index.ts b/src/Core/Interfaces/index.ts
new file mode 100644
index 0000000..a2063c5
--- /dev/null
+++ b/src/Core/Interfaces/index.ts
@@ -0,0 +1,3 @@
+export * from './Dictionary'
+export * from './NPM'
+export * from './Updater'
diff --git a/src/Core/Logger.ts b/src/Core/Logger.ts
new file mode 100644
index 0000000..50d9f0f
--- /dev/null
+++ b/src/Core/Logger.ts
@@ -0,0 +1,38 @@
+import * as chalk from 'chalk'
+
+export interface Log {
+ debug(...args: any[]): void
+ error(...args: any[]): void
+ info(...args: any[]): void
+ start(...args: any[]): void
+ done(...args: any[]): void
+ task(...args: any[]): void
+}
+
+export function Logger(name: string, category?: string): Log {
+ const cat = category ? `:${category}` : ''
+ const bold = (name: string) => chalk.default.bold(`[${name}${cat}]`)
+
+ return {
+ debug: (...args: any[]): void => {
+ if (process.env.NODE_ENV !== 'production') {
+ console.log(chalk.default.yellow.inverse(bold(name), ...args))
+ }
+ },
+ error: (...args: any[]): void => {
+ console.log(chalk.default.red.inverse(bold(name), ...args))
+ },
+ info: (...args: any[]): void => {
+ console.log(chalk.default.grey.italic(bold(name), ...args))
+ },
+ start: (...args: any[]): void => {
+ console.log(chalk.default.grey.dim(bold(name), ...args))
+ },
+ done: (...args: any[]): void => {
+ console.log(chalk.default.grey.dim(bold(name), ...args))
+ },
+ task: (...args: any[]): void => {
+ console.log(chalk.default.blue(bold(name), ...args))
+ }
+ }
+}
diff --git a/src/Core/Project.ts b/src/Core/Project.ts
new file mode 100644
index 0000000..32b0137
--- /dev/null
+++ b/src/Core/Project.ts
@@ -0,0 +1,30 @@
+import { Files } from './Files'
+import { NPM } from './Interfaces'
+
+export class Project {
+ private readonly _name: string
+ private readonly _owner: Project
+ private readonly _path: string
+
+ constructor(name: string, path: string, owner?: Project) {
+ this._name = name
+ this._owner = owner || this
+ this._path = path
+ }
+
+ public get name(): string {
+ return this._name
+ }
+
+ public get owner(): Project {
+ return this._owner
+ }
+
+ public get package(): Promise {
+ return Files.json(Files.join(this.path, 'package.json'))
+ }
+
+ public get path(): string {
+ return this._path
+ }
+}
diff --git a/src/Core/Registry.ts b/src/Core/Registry.ts
new file mode 100644
index 0000000..a4606c6
--- /dev/null
+++ b/src/Core/Registry.ts
@@ -0,0 +1,29 @@
+import { Dictionary, Updater, Updaters } from './Interfaces'
+
+export class Registry {
+ private static readonly registrations: Updaters = {}
+
+ public static add(name: string, updater: Updater): void {
+ this.registrations[name.toLowerCase()] = updater
+ }
+
+ public static all(): Dictionary {
+ return Object.assign({}, this.registrations)
+ }
+
+ public static execute(root: string, ...args: string[]): Promise {
+ return Promise.all(
+ args.map(arg => arg.toLowerCase())
+ .map(name => this.registrations[name].exec(root))
+ )
+ }
+
+ public static get(name: string): Updater {
+ const key = name.toLowerCase()
+ if (this.registrations[key]) {
+ return this.registrations[key]
+ }
+
+ throw new Error(`no registered updaters named ${name}`)
+ }
+}
diff --git a/src/Core/UpdateScript.ts b/src/Core/UpdateScript.ts
new file mode 100644
index 0000000..46d8150
--- /dev/null
+++ b/src/Core/UpdateScript.ts
@@ -0,0 +1,76 @@
+import * as cp from 'child_process'
+import * as path from 'path'
+
+import { Files, Log, Logger, NPM, Project, Updater, UpdaterType } from './index'
+
+export abstract class UpdateScript implements Updater {
+ protected readonly log: Log
+ private readonly _name: string
+ private readonly _type: UpdaterType
+
+ constructor(name: string, type: UpdaterType) {
+ this._name = name
+ this._type = type
+ this.log = Logger(name)
+ }
+
+ public get name(): string {
+ return this._name
+ }
+
+ public get testing(): boolean {
+ const env = process.env.NODE_ENV || ''
+ return ['test', 'testing'].some(value => value === env.toLowerCase())
+ }
+
+ public get type(): UpdaterType {
+ return this._type
+ }
+
+ public exec(rootpath: string): Promise {
+ return Promise.resolve()
+ }
+
+ public workspace(project: Project): Promise {
+ return Promise.resolve()
+ }
+
+ protected async npm(basepath: string): Promise {
+ const filename = path.join(basepath, 'package.json')
+
+ if (await Files.exists(filename)) {
+ return Files.json(filename)
+ }
+
+ throw Error(`could not find 'package.json' in ${basepath}`)
+ }
+
+ protected run(project: Project, command: string, ...args: string[]): Promise {
+ return new Promise((resolve, reject) => {
+ this.log.debug('run', project.name, command, ...args)
+ const child = cp.exec(`${command} ${args.join(' ')}`, { cwd: project.path }, error => {
+ if (error) this.log.error(error)
+ })
+ child.stderr.on('data', data => this.args(project, process.stderr, data).map(lines => lines).forEach(args => this.log.error(...args)))
+ child.stdout.on('data', data => this.args(project, process.stdout, data).map(lines => lines).forEach(args => this.log.task(...args)))
+ child.addListener('exit', (code: number, signal: string) => {
+ if (code === 0) {
+ resolve()
+ } else {
+ reject(signal)
+ }
+ })
+ })
+ }
+
+ private args(project: Project, stream: NodeJS.WriteStream, data: string | Buffer): string[][] {
+ const format = (lines: string[]): string[][] => {
+ return lines.filter(line => line.trim()).map(line => [project.name, '>', line])
+ }
+
+ if (data instanceof Buffer) {
+ return format(data.toString().replace('\r', '').split('\n'))
+ }
+ return format(data.replace('\r', '').split('\n'))
+ }
+}
diff --git a/src/Core/index.ts b/src/Core/index.ts
new file mode 100644
index 0000000..5a66884
--- /dev/null
+++ b/src/Core/index.ts
@@ -0,0 +1,9 @@
+export * from './Interfaces'
+
+export * from './Files'
+export * from './Logger'
+export * from './Project'
+export * from './Registry'
+export * from './UpdateScript'
+
+import './Actions'
diff --git a/src/actions/index.ts b/src/actions/index.ts
deleted file mode 100644
index 7d3d515..0000000
--- a/src/actions/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import './packages'
-import './typings'
diff --git a/src/actions/packages.ts b/src/actions/packages.ts
deleted file mode 100644
index ded00ae..0000000
--- a/src/actions/packages.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import * as files from '../files'
-import * as path from 'path'
-import { NPM, Register, Updater, Workspace } from '../registry'
-import { UpdateScript } from '../script'
-
-const ScriptName = files.noext(__filename)
-const log = files.Logger(ScriptName)
-const prefix = '@types'
-
-interface Dependency {
- filename: string
- filepath: string
- npmname: string
- scope?: string
- typings?: string
-}
-
-/*
- * Propogates changes from the root package.json to child
- * packages.
- **/
-class Script extends UpdateScript {
- constructor() {
- super(ScriptName)
- }
-
- public async workspace(workspace: Workspace): Promise {
- const source = await this.npm(workspace.root)
- const target = await this.npm(workspace.basepath)
- target.author = source.author
- target.bugs = source.bugs
- target.description = source.description
- target.homepage = source.homepage
- target.license = source.license
- target.repository = source.repository
-
- const filename = path.join(workspace.basepath, 'package.json')
- await files.save(filename, target)
- this.log.task('updated package info', filename)
- }
-}
-
-Register(ScriptName, new Script())
diff --git a/src/cli.ts b/src/cli.ts
deleted file mode 100644
index e7fab7c..0000000
--- a/src/cli.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import './actions'
-
-import * as path from 'path'
-
-import * as files from './files'
-import { Dictionary, GetRegistered, Registered, Updater, Workspace } from './registry'
-
-const log = files.Logger('scripts')
-
-const scripts = (command: string, ...args: string[]): Updater[] => {
- switch (command.toLowerCase()) {
- case 'all':
- return Registered().map(name => GetRegistered(name))
-
- default:
- return Registered()
- .filter(name => args.find(value => value === name))
- .map(name => GetRegistered(name))
- }
-}
-
-const workspaces = async (): Promise => {
- const CONFIGFILES = [
- '.babelrc',
- 'tsconfig.json',
- 'tslint.json',
- ]
-
- interface Config extends Dictionary {
- filename: string
- filepath: string
- }
-
- const packages = await files.listdirs(path.join(process.cwd(), 'packages'))
-
- const promises = packages.map(async (dir: string): Promise => {
- const available: Config[] = []
- const dirname = path.basename(dir)
-
- await Promise.all(CONFIGFILES.map(config => path.join(dir, config))
- .map(async configfile => {
- if (await files.exists(configfile)) {
- available.push({
- filename: path.basename(configfile),
- filepath: path.dirname(configfile),
- })
- }
- }))
-
- const config: any = {}
- available.forEach(c => config[c.filename] = path.join(c.filepath, c.filename))
-
- return {
- basepath: dir,
- configs: config,
- name: dirname,
- npm: path.join(dir, 'package.json'),
- root: process.cwd(),
- }
- })
-
- return Promise.all(promises)
-}
-
-const main = async (...args: string[]): Promise => {
- const command = args.length ? args[0] : 'all'
- log.debug('args', args.length, ...args)
-
- const promises = scripts(command, ...args)
- .map(async script => {
- await script.exec(process.cwd())
- const ws = await workspaces()
- return ws.map(async workspace => {
- try {
- log.start('script.start', workspace.name, script.name)
- await script.workspace(workspace)
- log.done('script.done', workspace.name, script.name)
- } catch (error) {
- log.error('error', workspace.name, script.name, error)
- }
- })
- })
-
- await Promise.all(promises)
-}
-
-main(...process.argv.slice(2))
diff --git a/src/files.ts b/src/files.ts
deleted file mode 100644
index d655d46..0000000
--- a/src/files.ts
+++ /dev/null
@@ -1,141 +0,0 @@
-import * as chalk from 'chalk'
-import * as fs from 'fs'
-import * as path from 'path'
-
-export interface Stat {
- dir: boolean
- file: boolean
- filename: string
-}
-
-export interface Log {
- debug(...args: any[]): void
- error(...args: any[]): void
- info(...args: any[]): void
- start(...args: any[]): void
- done(...args: any[]): void
- task(...args: any[]): void
-}
-
-export function Logger(name: string, category?: string): Log {
- const cat = category ? `:${category}` : ''
- const bold = (name: string) => chalk.default.bold(`[${name}${cat}]`)
-
- return {
- debug: (...args: any[]): void => {
- if (process.env.NODE_ENV !== 'production') {
- console.log(chalk.default.yellow.inverse(bold(name), ...args))
- }
- },
- error: (...args: any[]): void => {
- console.log(chalk.default.red.inverse(bold(name), ...args))
- },
- info: (...args: any[]): void => {
- console.log(chalk.default.grey.italic(bold(name), ...args))
- },
- start: (...args: any[]): void => {
- console.log(chalk.default.grey.dim(bold(name), ...args))
- },
- done: (...args: any[]): void => {
- console.log(chalk.default.grey.dim(bold(name), ...args))
- },
- task: (...args: any[]): void => {
- console.log(chalk.default.blue(bold(name), ...args))
- }
- }
-}
-
-export const exists = (filepath: string): Promise => {
- return new Promise((resolve, reject) => {
- fs.exists(filepath, (exists: boolean) => resolve(exists))
- })
-}
-
-export const noext = (filename: string): string => {
- const basename = path.basename(filename)
- const extname = path.extname(basename)
- return basename.replace(extname, '')
-}
-
-export const readfile = (filepath: string): Promise => {
- return new Promise((resolve, reject) => {
- fs.readFile(filepath, (error: NodeJS.ErrnoException, data: Buffer) => {
- if (error) {
- reject(error)
- } else {
- resolve(data)
- }
- })
- })
-}
-
-export const listdirs = async (filepath: string): Promise => {
- const stats = await statfiles(filepath)
- return stats.filter(stat => stat.dir).map(stat => stat.filename)
-}
-
-export const listfiles = async (filepath: string): Promise => {
- const stats = await statfiles(filepath)
- return stats.filter(stat => stat.file).map(stat => stat.filename)
-}
-
-export const statfile = (filepath: string): Promise => {
- return new Promise((resolve, reject) => {
- fs.stat(filepath, (error: NodeJS.ErrnoException, stats: fs.Stats) => {
- if (error) {
- reject(error)
- } else {
- resolve(stats)
- }
- })
- })
-}
-
-export const statfiles = (filepath: string): Promise => {
- return new Promise((resolve, reject) => {
- fs.readdir(filepath, async (error: NodeJS.ErrnoException, files: string[]) => {
- if (error) {
- reject(error)
- } else {
- const promises = files.map(async (filename): Promise => {
- const fullpath = path.join(filepath, filename)
- const stat = await statfile(fullpath)
- return {
- dir: stat.isDirectory(),
- file: stat.isFile(),
- filename: fullpath,
- }
- })
-
- const stats = await Promise.all(promises)
-
- resolve(stats)
- }
- })
- })
-}
-
-export const writefile = (filepath: string, data: any): Promise => {
- return new Promise((resolve, reject) => {
- fs.writeFile(filepath, data, (error: NodeJS.ErrnoException) => {
- if (error) {
- reject(error)
- } else {
- resolve()
- }
- })
- })
-}
-
-export async function json(filepath: string): Promise {
- if (await exists(filepath)) {
- const buffer = await readfile(filepath)
- return JSON.parse(buffer.toString())
- }
-
- throw new Error(`requested file ${filepath} does not exist`)
-}
-
-export async function save(filepath: string, data: T): Promise {
- await writefile(filepath, JSON.stringify(data, null, 2))
-}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..cb5a92b
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,3 @@
+export * from './Core'
+export * from './Chest'
+export * from './CLI'
diff --git a/src/registry.ts b/src/registry.ts
deleted file mode 100644
index da6f608..0000000
--- a/src/registry.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-export interface Dictionary {
- [key: string]: string
-}
-
-export interface NPM {
- author?: string | string[] | Dictionary
- bugs?: string | { type: string, url: string }
- dependencies?: Dictionary
- description?: string
- devDependencies?: Dictionary
- homepage?: string
- license?: string
- name: string
- private?: boolean
- repository?: string | { type: string, url: string }
- scripts?: Dictionary
- types?: string,
- typeScriptVersion: string,
- typings?: string
- version: string
- workspace?: string[]
-}
-
-export interface Updater {
- name: string
- exec(rootpath: string): Promise
- workspace(workspace: Workspace): Promise
-}
-
-export type Updaters = {
- [key: string]: Updater
-}
-
-export interface Workspace {
- basepath: string
- configs: Dictionary
- name: string
- npm: string
- root: string
-}
-
-const registrations: Updaters = {}
-
-export function GetRegistered(name: string): Updater {
- return registrations[name]
-}
-
-export function Register(name: string, updater: Updater): void {
- registrations[name] = updater
-}
-
-export function Registered(): string[] {
- return Object.keys(registrations)
-}
diff --git a/src/script.ts b/src/script.ts
deleted file mode 100644
index 65a844e..0000000
--- a/src/script.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import * as files from './files'
-import * as path from 'path'
-import { NPM, Updater, Workspace } from './registry'
-
-export abstract class UpdateScript implements Updater {
- protected readonly log: files.Log
- private readonly _name: string
-
- constructor(name: string) {
- this._name = name
- this.log = files.Logger(name)
- }
-
- public get name(): string {
- return this._name
- }
-
- public exec(rootpath: string): Promise {
- return Promise.resolve()
- }
-
- public workspace(workspace: Workspace): Promise {
- return Promise.resolve()
- }
-
- protected async npm(basepath: string): Promise {
- const filename = path.join(basepath, 'package.json')
-
- if (await files.exists(filename)) {
- return await files.json(filename)
- }
-
- throw Error(`could not find 'package.json' in ${basepath}`)
- }
-}
diff --git a/src/shell.ts b/src/shell.ts
deleted file mode 100644
index 4312e3d..0000000
--- a/src/shell.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import * as cp from 'child_process'
-
-import { Workspace } from './registry'
-import { UpdateScript } from './script'
-
-export abstract class UpdateShell extends UpdateScript {
- constructor(name: string) {
- super(name)
- }
-
- protected run(workspace: Workspace, command: string, ...args: string[]): Promise {
- return new Promise((resolve, reject) => {
- this.log.debug('run', workspace.name, command, ...args)
- const child = cp.exec(`${command} ${args.join(' ')}`, { cwd: workspace.basepath }, error => {
- if (error) this.log.error(error)
- })
- child.stderr.on('data', data => this.args(workspace, process.stderr, data).map(lines => lines).forEach(args => this.log.error(...args)))
- child.stdout.on('data', data => this.args(workspace, process.stdout, data).map(lines => lines).forEach(args => this.log.task(...args)))
- child.addListener('exit', (code, signal) => {
- if (code === 0) {
- resolve()
- } else {
- reject(signal)
- }
- })
- })
- }
-
- private args(workspace: Workspace, stream: NodeJS.WriteStream, data: string | Buffer): string[][] {
- const format = (lines: string[]): string[][] => {
- return lines.filter(line => line.trim()).map(line => [workspace.name, '>', line])
- }
-
- if (data instanceof Buffer) {
- return format(data.toString().replace('\r', '').split('\n'))
- }
- return format(data.replace('\r', '').split('\n'))
- }
-}
diff --git a/testables/single/package.json b/testables/single/package.json
new file mode 100644
index 0000000..a6cd6e0
--- /dev/null
+++ b/testables/single/package.json
@@ -0,0 +1,11 @@
+{
+ "dependencies": {
+ "chalk": "*"
+ },
+ "description": "single project",
+ "devDependencies": {
+ "@types/chalk": "*"
+ },
+ "name": "project-single",
+ "version": "1.0.0"
+}
diff --git a/testables/workspaces-invalid/package.json b/testables/workspaces-invalid/package.json
new file mode 100644
index 0000000..9d1a800
--- /dev/null
+++ b/testables/workspaces-invalid/package.json
@@ -0,0 +1,14 @@
+{
+ "dependencies": {
+ "chalk": "*"
+ },
+ "description": "invalid workspace project",
+ "devDependencies": {
+ "@types/chalk": "*"
+ },
+ "name": "project-single",
+ "version": "1.0.0",
+ "workspace": [
+ "packages/*"
+ ]
+}
diff --git a/testables/workspaces/package.json b/testables/workspaces/package.json
new file mode 100644
index 0000000..fc4e478
--- /dev/null
+++ b/testables/workspaces/package.json
@@ -0,0 +1,10 @@
+{
+ "description": "project with workspaces",
+ "name": "project-workspaces",
+ "private": true,
+ "workspace": [
+ "packages/*",
+ "projects/*"
+ ],
+ "version": "1.0.0"
+}
diff --git a/testables/workspaces/packages/simple-package/package.json b/testables/workspaces/packages/simple-package/package.json
new file mode 100644
index 0000000..133973c
--- /dev/null
+++ b/testables/workspaces/packages/simple-package/package.json
@@ -0,0 +1,11 @@
+{
+ "dependencies": {
+ "chalk": "*"
+ },
+ "description": "simple package",
+ "devDependencies": {
+ "@types/chalk": "*"
+ },
+ "name": "simple-package",
+ "version": "1.0.0"
+}
diff --git a/testables/workspaces/projects/simple-project/package.json b/testables/workspaces/projects/simple-project/package.json
new file mode 100644
index 0000000..15fd88e
--- /dev/null
+++ b/testables/workspaces/projects/simple-project/package.json
@@ -0,0 +1,11 @@
+{
+ "dependencies": {
+ "chalk": "*"
+ },
+ "description": "simple project",
+ "devDependencies": {
+ "@types/chalk": "*"
+ },
+ "name": "simple-project",
+ "version": "1.0.0"
+}
diff --git a/tsconfig.json b/tsconfig.json
index dedb6c2..d634d0c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,7 @@
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
- "baseUrl": "./src",
+ "baseUrl": ".",
"declaration": true,
"diagnostics": true,
"emitDecoratorMetadata": true,
@@ -19,7 +19,6 @@
"outDir": "lib",
"pretty": true,
"removeComments": true,
- "rootDir": "./src",
"sourceMap": true,
"strict": true,
"strictNullChecks": true,
@@ -35,4 +34,4 @@
"include": [
"src/**/*.ts"
]
-}
\ No newline at end of file
+}
diff --git a/yarn.lock b/yarn.lock
index 1acb282..fc2d35d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,20 +2,59 @@
# yarn lockfile v1
+"@types/chai-as-promised@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9"
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^4.0.4":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.4.tgz#fe86315d9a66827feeb16f73bc954688ec950e18"
+
"@types/chalk@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-2.2.0.tgz#b7f6e446f4511029ee8e3f43075fb5b73fbaa0ba"
dependencies:
chalk "*"
+"@types/mocha@^2.2.44":
+ version "2.2.44"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e"
+
"@types/node@^8.0.52":
version "8.0.52"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.52.tgz#8e7f47747868e7687f2cd4922966e2d6af78d22d"
+ajv@^5.1.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -26,11 +65,73 @@ ansi-styles@^3.1.0:
dependencies:
color-convert "^1.9.0"
-arrify@^1.0.0:
+any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+
+append-transform@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ dependencies:
+ default-require-extensions "^1.0.0"
+
+archy@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-babel-code-frame@^6.22.0:
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assertion-error@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+
+async@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+
+aws4@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies:
@@ -38,14 +139,95 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
+babel-generator@^6.18.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.6"
+ trim-right "^1.0.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
+babel-traverse@^6.18.0, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.18.0, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
bin-shebang@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/bin-shebang/-/bin-shebang-1.0.11.tgz#296dd2b8229518f35db1a0aeaf663b0454b350c6"
+boom@4.x.x:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+ dependencies:
+ hoek "4.x.x"
+
+boom@5.x.x:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+ dependencies:
+ hoek "4.x.x"
+
brace-expansion@^1.1.7:
version "1.1.8"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
@@ -53,10 +235,66 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-builtin-modules@^1.1.1:
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+
+builtin-modules@^1.0.0, builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+caching-transform@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1"
+ dependencies:
+ md5-hex "^1.2.0"
+ mkdirp "^0.5.1"
+ write-file-atomic "^1.1.4"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chai-as-promised@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
+ dependencies:
+ check-error "^1.0.2"
+
+chai@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c"
+ dependencies:
+ assertion-error "^1.0.1"
+ check-error "^1.0.1"
+ deep-eql "^3.0.0"
+ get-func-name "^2.0.0"
+ pathval "^1.0.0"
+ type-detect "^4.0.0"
+
chalk@*, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
@@ -75,6 +313,34 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
+check-error@^1.0.1, check-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
color-convert@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
@@ -85,31 +351,311 @@ color-name@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-commander@^2.9.0:
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.11.0, commander@^2.9.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+convert-source-map@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+
+core-js@^2.4.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+
+core-util-is@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+coveralls@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.0.tgz#22ef730330538080d29b8c151dc9146afde88a99"
+ dependencies:
+ js-yaml "^3.6.1"
+ lcov-parse "^0.0.10"
+ log-driver "^1.2.5"
+ minimist "^1.2.0"
+ request "^2.79.0"
+
+cross-env@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.1.tgz#b6d8ab97f304c0f71dae7277b75fe424c08dfa74"
+ dependencies:
+ cross-spawn "^5.1.0"
+ is-windows "^1.0.0"
+
+cross-spawn@^4:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cryptiles@3.x.x:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+ dependencies:
+ boom "5.x.x"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+debug-log@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+
+debug@3.1.0, debug@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-eql@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
+ dependencies:
+ type-detect "^4.0.0"
+
+default-require-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ dependencies:
+ strip-bom "^2.0.0"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ dependencies:
+ repeating "^2.0.0"
+
+diff@3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
+
diff@^3.1.0, diff@^3.2.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+doctrine@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523"
+ dependencies:
+ esutils "^1.1.6"
+ isarray "0.0.1"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+
+esutils@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375"
+
esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+fast-deep-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+for-in@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+foreground-child@^1.5.3, foreground-child@^1.5.6:
+ version "1.5.6"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9"
+ dependencies:
+ cross-spawn "^4"
+ signal-exit "^3.0.0"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-glob@^7.0.5, glob@^7.1.1:
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-func-name@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@7.1.2, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@@ -120,22 +666,92 @@ glob@^7.0.5, glob@^7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
+globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+growl@1.10.3:
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
+
+handlebars@^4.0.3:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
dependencies:
ansi-regex "^2.0.0"
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+hawk@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+ dependencies:
+ boom "4.x.x"
+ cryptiles "3.x.x"
+ hoek "4.x.x"
+ sntp "2.x.x"
+
+he@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hoek@4.x.x:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+
homedir-polyfill@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
dependencies:
parse-passwd "^1.0.0"
+hosted-git-info@^2.1.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -147,14 +763,341 @@ inherits@2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-js-tokens@^3.0.2:
+invariant@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-windows@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+
+istanbul-lib-hook@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
+ dependencies:
+ append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.1.1"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
+ dependencies:
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
+ dependencies:
+ debug "^3.1.0"
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
+ dependencies:
+ handlebars "^4.0.3"
+
+js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+js-yaml@^3.6.1:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+kind-of@^3.0.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+lcov-parse@^0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash@^4.17.4:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+log-driver@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ dependencies:
+ js-tokens "^3.0.0"
+
+lru-cache@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
make-error@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
+md5-hex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4"
+ dependencies:
+ md5-o-matic "^0.1.1"
+
+md5-o-matic@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3"
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+merge-source-map@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f"
+ dependencies:
+ source-map "^0.5.6"
+
+micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.30.0:
+ version "1.30.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+
+mime-types@^2.1.12, mime-types@~2.1.17:
+ version "2.1.17"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+ dependencies:
+ mime-db "~1.30.0"
+
+mimic-fn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -169,80 +1112,536 @@ minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-mkdirp@^0.5.1:
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
+mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
+mocha@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b"
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.11.0"
+ debug "3.1.0"
+ diff "3.3.1"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.3"
+ he "1.1.1"
+ mkdirp "0.5.1"
+ supports-color "4.4.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+normalize-package-data@^2.3.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+nyc@^11.3.0:
+ version "11.3.0"
+ resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.3.0.tgz#a42bc17b3cfa41f7b15eb602bc98b2633ddd76f0"
+ dependencies:
+ archy "^1.0.0"
+ arrify "^1.0.1"
+ caching-transform "^1.0.0"
+ convert-source-map "^1.3.0"
+ debug-log "^1.0.1"
+ default-require-extensions "^1.0.0"
+ find-cache-dir "^0.1.1"
+ find-up "^2.1.0"
+ foreground-child "^1.5.3"
+ glob "^7.0.6"
+ istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-hook "^1.1.0"
+ istanbul-lib-instrument "^1.9.1"
+ istanbul-lib-report "^1.1.2"
+ istanbul-lib-source-maps "^1.2.2"
+ istanbul-reports "^1.1.3"
+ md5-hex "^1.2.0"
+ merge-source-map "^1.0.2"
+ micromatch "^2.3.11"
+ mkdirp "^0.5.0"
+ resolve-from "^2.0.0"
+ rimraf "^2.5.4"
+ signal-exit "^3.0.1"
+ spawn-wrap "=1.3.8"
+ test-exclude "^4.1.1"
+ yargs "^10.0.3"
+ yargs-parser "^8.0.0"
+
+oauth-sign@~0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+os-homedir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
parse-passwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
path-parse@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pathval@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+qs@~6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+
+randomatic@^1.1.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+regenerator-runtime@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.83.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ hawk "~6.0.2"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ stringstream "~0.0.5"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+
resolve@^1.3.2:
version "1.5.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
dependencies:
path-parse "^1.0.5"
-rimraf@^2.6.2:
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@^2.3.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
glob "^7.0.5"
-semver@^5.3.0:
+safe-buffer@^5.0.1, safe-buffer@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+
+"semver@2 || 3 || 4 || 5", semver@^5.3.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+sntp@2.x.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
+ dependencies:
+ hoek "4.x.x"
+
source-map-support@^0.4.0:
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
dependencies:
source-map "^0.5.6"
-source-map@^0.5.6:
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-strip-ansi@^3.0.0:
+spawn-wrap@=1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.3.8.tgz#fa2a79b990cbb0bb0018dca6748d88367b19ec31"
+ dependencies:
+ foreground-child "^1.5.6"
+ mkdirp "^0.5.0"
+ os-homedir "^1.0.1"
+ rimraf "^2.3.3"
+ signal-exit "^3.0.2"
+ which "^1.2.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+stringstream@~0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
dependencies:
ansi-regex "^2.0.0"
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
strip-json-comments@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+supports-color@4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
+ dependencies:
+ has-flag "^2.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+supports-color@^3.1.2:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
supports-color@^4.0.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
dependencies:
has-flag "^2.0.0"
+test-exclude@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+
+tough-cookie@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+ dependencies:
+ punycode "^1.4.1"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
ts-node@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69"
@@ -258,6 +1657,21 @@ ts-node@^3.3.0:
v8flags "^3.0.0"
yn "^2.0.0"
+tsconfig-paths@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-2.3.0.tgz#98eb4df8c793a3c1eb25d1bdfa8dff273be1063c"
+ dependencies:
+ tsconfig "^5.0.3"
+
+tsconfig@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-5.0.3.tgz#5f4278e701800967a8fc383fd19648878f2a6e3a"
+ dependencies:
+ any-promise "^1.3.0"
+ parse-json "^2.2.0"
+ strip-bom "^2.0.0"
+ strip-json-comments "^2.0.0"
+
tsconfig@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032"
@@ -265,10 +1679,24 @@ tsconfig@^6.0.0:
strip-bom "^3.0.0"
strip-json-comments "^2.0.0"
-tslib@^1.7.1:
+tslib@^1.0.0, tslib@^1.7.1:
version "1.8.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.0.tgz#dc604ebad64bcbf696d613da6c954aa0e7ea1eb6"
+tslint-config-standard@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/tslint-config-standard/-/tslint-config-standard-7.0.0.tgz#47bbf25578ed2212456f892d51e1abe884a29f15"
+ dependencies:
+ tslint-eslint-rules "^4.1.1"
+
+tslint-eslint-rules@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz#7c30e7882f26bc276bff91d2384975c69daf88ba"
+ dependencies:
+ doctrine "^0.7.2"
+ tslib "^1.0.0"
+ tsutils "^1.4.0"
+
tslint@^5.8.0:
version "5.8.0"
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13"
@@ -285,26 +1713,153 @@ tslint@^5.8.0:
tslib "^1.7.1"
tsutils "^2.12.1"
+tsutils@^1.4.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0"
+
tsutils@^2.12.1:
version "2.12.2"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.12.2.tgz#ad58a4865d17ec3ddb6631b6ca53be14a5656ff3"
dependencies:
tslib "^1.7.1"
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-detect@^4.0.0:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.5.tgz#d70e5bc81db6de2a381bcaca0c6e0cbdc7635de2"
+
typescript@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631"
+uglify-js@^2.6:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uuid@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+
v8flags@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.1.tgz#dce8fc379c17d9f2c9e9ed78d89ce00052b1b76b"
dependencies:
homedir-polyfill "^1.0.1"
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+
+which@^1.2.4, which@^1.2.9:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+ dependencies:
+ isexe "^2.0.0"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+write-file-atomic@^1.1.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yargs-parser@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^10.0.3:
+ version "10.0.3"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae"
+ dependencies:
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ find-up "^2.1.0"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^8.0.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
yn@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"