├── fixtures ├── attachments │ ├── public │ │ └── foo.txt │ ├── shows │ │ └── simple.js │ └── expected.json ├── basic │ ├── lib │ │ ├── foo.js │ │ ├── commonjs │ │ │ ├── whynot.js │ │ │ └── upper.js │ │ └── stringzone.js │ ├── shows │ │ ├── simple.js │ │ └── requirey.js │ ├── views │ │ ├── test.reduce.js │ │ └── test.map.js │ └── expected.json ├── gamma │ ├── bar.js │ ├── shows │ │ └── foo.js │ └── expected.json ├── custom-dirs │ ├── s │ │ └── foo.js │ ├── v │ │ └── bar.map.js │ └── expected.json ├── babel-plugin │ ├── bar.js │ ├── shows │ │ └── foo.js │ └── expected.json └── template │ ├── template.js │ └── expected.json ├── cmd.js ├── .gitignore ├── .npmignore ├── src ├── types.ts ├── index.ts ├── helpers.ts ├── test │ ├── client.ts │ └── couchify.ts ├── error.ts ├── interfaces.ts ├── client.ts ├── formatters.ts ├── cmd.ts └── couchify.ts ├── .travis.yml ├── docker-compose.yml ├── .vscode └── tasks.json ├── tsconfig.json ├── LICENSE ├── package.json ├── tslint.json ├── README.md └── yarn.lock /fixtures/attachments/public/foo.txt: -------------------------------------------------------------------------------- 1 | tun up 2 | -------------------------------------------------------------------------------- /fixtures/basic/lib/foo.js: -------------------------------------------------------------------------------- 1 | exports.bar = 41 2 | -------------------------------------------------------------------------------- /fixtures/gamma/bar.js: -------------------------------------------------------------------------------- 1 | export const x = 'fruits' 2 | -------------------------------------------------------------------------------- /cmd.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('./lib/cmd') 4 | -------------------------------------------------------------------------------- /fixtures/basic/lib/commonjs/whynot.js: -------------------------------------------------------------------------------- 1 | exports.test = require('../stringzone') 2 | -------------------------------------------------------------------------------- /fixtures/basic/lib/stringzone.js: -------------------------------------------------------------------------------- 1 | exports.string = 'plankton' + (require('./foo').bar + 1) 2 | -------------------------------------------------------------------------------- /fixtures/custom-dirs/s/foo.js: -------------------------------------------------------------------------------- 1 | export default () => () => { 2 | return 'show' 3 | } 4 | -------------------------------------------------------------------------------- /fixtures/attachments/shows/simple.js: -------------------------------------------------------------------------------- 1 | export default () => () => { 2 | return 'ok' 3 | } 4 | -------------------------------------------------------------------------------- /fixtures/babel-plugin/bar.js: -------------------------------------------------------------------------------- 1 | module.exports = function(y) { 2 | return this.x + y 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /lib/ 2 | /node_modules/ 3 | /tmp/ 4 | /.vscode/launch.json 5 | /.vscode/settings.json 6 | -------------------------------------------------------------------------------- /fixtures/basic/lib/commonjs/upper.js: -------------------------------------------------------------------------------- 1 | exports.testing = require('./whynot').test.string.toUpperCase() 2 | -------------------------------------------------------------------------------- /fixtures/basic/shows/simple.js: -------------------------------------------------------------------------------- 1 | var x = 'ok' 2 | 3 | export default () => () => { 4 | return x 5 | } 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | * 2 | !.README.md 3 | !package.json 4 | !yarn.lock 5 | !cmd.js 6 | !lib/* 7 | !dist/* 8 | lib/test 9 | -------------------------------------------------------------------------------- /fixtures/custom-dirs/v/bar.map.js: -------------------------------------------------------------------------------- 1 | export default ({ require }) => (doc) => { 2 | return 'okmap' 3 | } 4 | -------------------------------------------------------------------------------- /fixtures/template/template.js: -------------------------------------------------------------------------------- 1 | module.exports = options => ({ 2 | foo: 'bar', 3 | baz: options.id 4 | }); 5 | -------------------------------------------------------------------------------- /fixtures/basic/views/test.reduce.js: -------------------------------------------------------------------------------- 1 | export default () => (keys) => { 2 | return Math.max.apply(null, keys) 3 | } 4 | -------------------------------------------------------------------------------- /fixtures/basic/views/test.map.js: -------------------------------------------------------------------------------- 1 | export default ({ emit }) => (doc) => { 2 | emit(doc._id, require('../lib/foo').bar) 3 | } 4 | -------------------------------------------------------------------------------- /fixtures/basic/shows/requirey.js: -------------------------------------------------------------------------------- 1 | export default ({ require }) => () => { 2 | var lib = require('../lib/commonjs/upper'); 3 | return lib.testing; 4 | } 5 | -------------------------------------------------------------------------------- /fixtures/template/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/template", 3 | "language": "javascript", 4 | "foo": "bar", 5 | "baz": "template" 6 | } 7 | -------------------------------------------------------------------------------- /fixtures/gamma/shows/foo.js: -------------------------------------------------------------------------------- 1 | export default ({ require }) => () => { 2 | const gamma = require('gamma') 3 | return require('../bar').x + gamma(5) + '\n' 4 | } 5 | -------------------------------------------------------------------------------- /fixtures/babel-plugin/shows/foo.js: -------------------------------------------------------------------------------- 1 | export default () => () => { 2 | const bar = require('../bar') 3 | const ctx = { x: 663 } 4 | return String(ctx::bar(3)) 5 | } 6 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { FunctionResolution } from './interfaces' 2 | 3 | export type ViewFunctionResolution = FunctionResolution | { 4 | source: { map: string, reduce: string } 5 | } 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | services: 4 | - docker 5 | 6 | env: 7 | DOCKER_COMPOSE_VERSION: 1.14.0 8 | 9 | script: 10 | - docker-compose up --abort-on-container-exit 11 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './client' 2 | export * from './couchify' 3 | export * from './error' 4 | export * from './formatters' 5 | export * from './interfaces' 6 | export * from './types' 7 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | couchdb: 4 | image: couchdb:1.6.1 5 | ports: 6 | - 5984:5984 7 | couchify: 8 | image: mhart/alpine-node:8.5.0 9 | command: sh -c "cd /build && yarn && npm run lint && NODE_ENV=docker npm run test" 10 | links: 11 | - "couchdb" 12 | depends_on: 13 | - couchdb 14 | volumes: 15 | - .:/build 16 | -------------------------------------------------------------------------------- /fixtures/custom-dirs/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/custom-dirs", 3 | "language": "javascript", 4 | "shows": { 5 | "foo": "(function(){\n\nreturn function () {\n return 'show';\n };\n\n}())" 6 | }, 7 | "views": { 8 | "bar": { 9 | "map": "(function(){\n\nreturn function (doc) {\n return 'okmap';\n };\n\n}())" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /fixtures/attachments/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/attachments", 3 | "language": "javascript", 4 | "_attachments": { 5 | "foo.txt": { 6 | "content_type": "text/plain; charset=utf-8", 7 | "data": "dHVuIHVwCg==" 8 | } 9 | }, 10 | "shows": { 11 | "simple": "(function(){\n\nreturn function () {\n return 'ok';\n };\n\n}())" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /fixtures/babel-plugin/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/babel-plugin", 3 | "language": "javascript", 4 | "commons": { 5 | "0": "\"use strict\";\n\nmodule.exports = function (y) {\n return this.x + y;\n};" 6 | }, 7 | "shows": { 8 | "foo": "(function(){\n\nreturn function () {\n var bar = require('commons/0');\n var ctx = { x: 663 };\n return String(bar.call(ctx, 3));\n };\n\n}())" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/helpers.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs' 2 | import * as $glob from 'glob' 3 | import * as util from 'util' 4 | 5 | export const readFileAsync = util.promisify(fs.readFile) 6 | 7 | export const accessAsync = util.promisify(fs.access) 8 | 9 | export function glob(pattern: string, globOptions: $glob.IOptions): Promise { 10 | return new Promise((resolve, reject) => { 11 | $glob(pattern, globOptions, (err, files) => err === null ? resolve(files) : reject(err)) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "0.1.0", 5 | "tasks": [ 6 | { 7 | "taskName": "watch", 8 | "command": "npm", 9 | "isBuildCommand": true, 10 | "isShellCommand": true, 11 | "args": [ 12 | "run", 13 | "--prefix \"${workspaceRoot}\"", 14 | "build", 15 | "--", 16 | "--watch" 17 | ], 18 | "showOutput": "always", 19 | "isBackground": true 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.4.2", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "module": "commonjs", 6 | "outDir": "lib", 7 | "target": "es2016", 8 | "experimentalDecorators": true, 9 | "noUnusedLocals": true, 10 | "noImplicitReturns": true, 11 | "sourceMap": true, 12 | "lib": [ 13 | "es2017.object", 14 | "es2015" 15 | ] 16 | }, 17 | "include": [ 18 | "src/cmd.ts", 19 | "src/index.ts", 20 | "src/test/**/*.ts" 21 | ], 22 | "exclude": [] 23 | } 24 | -------------------------------------------------------------------------------- /src/test/client.ts: -------------------------------------------------------------------------------- 1 | import * as test from 'tape' 2 | import { urlToCouchdbOptions } from '../client' 3 | 4 | test('url to couchdb options', t => { 5 | t.deepEqual(80, urlToCouchdbOptions('https://host:80/a').port, 'should not override port number') 6 | t.deepEqual(5984, urlToCouchdbOptions('https://host/a').port, 'should provide default port') 7 | t.deepEqual('http', urlToCouchdbOptions('localhost').protocol, 'should provide default protocol') 8 | t.deepEqual('localhost', urlToCouchdbOptions('http://localhost:80').host, 'should not include port in host') 9 | t.deepEqual('magnet', urlToCouchdbOptions('magnet://localhost:80').protocol, 'should not include colon in protocol') 10 | t.end() 11 | }) 12 | -------------------------------------------------------------------------------- /src/error.ts: -------------------------------------------------------------------------------- 1 | export enum ErrorType { 2 | NOT_FOUND_BASE_DOCUMENTS_DIR, 3 | NOT_PROVIDED_BASE_DOCUMENTS_DIR, 4 | NOT_PROVIDED_ID, 5 | NOT_UNIQUE_DIRNAMES, 6 | COULD_NOT_INSERT, 7 | NO_EXPORT 8 | } 9 | 10 | const messages = { 11 | [ErrorType.COULD_NOT_INSERT]: 'could not insert data', 12 | [ErrorType.NOT_FOUND_BASE_DOCUMENTS_DIR]: 'base directory does not exist', 13 | [ErrorType.NOT_PROVIDED_BASE_DOCUMENTS_DIR]: 'you must provide a directory', 14 | [ErrorType.NOT_PROVIDED_ID]: 'you must provide a design document name', 15 | [ErrorType.NOT_UNIQUE_DIRNAMES]: 'design function directory names must be unique', 16 | [ErrorType.NO_EXPORT]: 'a design document did not export a default function' 17 | } 18 | 19 | export class CouchifyError extends Error { 20 | constructor(public type: ErrorType, public extra?: string) { 21 | super(messages[type] + (extra ? ': ' + extra : '')) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /fixtures/basic/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/basic", 3 | "language": "javascript", 4 | "commons": { 5 | "0": "\"use strict\";\n\nexports.bar = 41;", 6 | "1": "'use strict';\n\nexports.string = 'plankton' + (require('./0').bar + 1);", 7 | "2": "'use strict';\n\nexports.test = require('./1');", 8 | "3": "'use strict';\n\nexports.testing = require('./2').test.string.toUpperCase();" 9 | }, 10 | "shows": { 11 | "requirey": "(function(){\n\nreturn function () {\n var lib = require('commons/3');\n return lib.testing;\n };\n\n}())", 12 | "simple": "(function(){\n\nvar x = 'ok';\n\nreturn function () {\n return x;\n };\n\n}())" 13 | }, 14 | "views": { 15 | "test": { 16 | "map": "(function(){\n\nreturn function (doc) {\n emit(doc._id, require('views/lib/0').bar);\n };\n\n}())", 17 | "reduce": "(function(){\n\nreturn function (keys) {\n return Math.max.apply(null, keys);\n };\n\n}())" 18 | }, 19 | "lib": { 20 | "0": "\"use strict\";\n\nexports.bar = 41;" 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 wearereasonablepeople (http://wearereasonablepeople.nl/) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface Attachment { 2 | id?: string 3 | content_type: string 4 | data: string 5 | } 6 | 7 | export interface CouchifyOptions { 8 | id?: string 9 | baseDocumentsDir?: string 10 | attachmentsDir?: string 11 | babelPlugins?: any[] 12 | babelPresets?: any[] 13 | filtersDir?: string 14 | listsDir?: string 15 | showsDir?: string 16 | updatesDir?: string 17 | viewsDir?: string 18 | globIgnorePatterns?: string[] 19 | } 20 | 21 | export interface DependencyResolution { 22 | entry?: boolean 23 | deps: { [s: string]: string } 24 | file: string 25 | id: string 26 | source: string 27 | } 28 | 29 | export interface FunctionResolution extends DependencyResolution { 30 | output: string 31 | resolvedDeps: DependencyResolution[] 32 | path: string[] 33 | } 34 | 35 | export interface DesignDocument { 36 | _id: string 37 | language: string 38 | _rev?: string 39 | _attachments?: { [key: string]: Attachment } 40 | commons?: { [key: string]: string } 41 | views?: { 42 | [key: string]: string | { [key: string]: string } 43 | } & { lib?: { [key: string]: string } } 44 | shows?: { [key: string]: string } 45 | lists?: { [key: string]: string } 46 | filters?: { [key: string]: string } 47 | updates?: { [key: string]: string } 48 | rewrites?: Rewrite[] 49 | } 50 | 51 | export interface Rewrite { 52 | from: string 53 | to: string 54 | method: string 55 | query: { [key: string]: string } 56 | } 57 | -------------------------------------------------------------------------------- /src/client.ts: -------------------------------------------------------------------------------- 1 | import { parse } from 'url' 2 | import { CouchifyError, ErrorType } from './error' 3 | import { DesignDocument } from './interfaces' 4 | const NodeCouchDb = require('node-couchdb') 5 | 6 | export function urlToCouchdbOptions(remote: string) : any { 7 | const opts = parse(remote) 8 | return { 9 | host: opts.hostname, 10 | port: Number(opts.port) || 5984, 11 | protocol: opts.protocol ? opts.protocol.replace(':', '') : 'http', 12 | auth: opts.auth && {user: opts.auth.split(':')[0], pass: opts.auth.split(':')[1]}, 13 | timeout: 5000 14 | } 15 | } 16 | 17 | export type DeployOptions = { 18 | remote: string 19 | db: string 20 | doc: DesignDocument 21 | timeout?: number 22 | } 23 | 24 | export function deploy({ remote, db, doc, timeout }: DeployOptions) { 25 | const opts = urlToCouchdbOptions(remote) 26 | if (timeout) { 27 | opts.timeout = timeout 28 | } 29 | const couch = new NodeCouchDb(opts) 30 | 31 | return couch 32 | .get(db, doc._id) 33 | .then(({ data: getData, headers: getHeaders, status: getStatus }) => 34 | couch.update(db, { ...doc, ...{ _rev: getData._rev } }).then(({ data: updateData }) => updateData), 35 | (getErr) => { 36 | if (getErr.code === 'EDOCMISSING') { 37 | return couch 38 | .insert(db, doc) 39 | .then(({ data: insertData, headers: insertHeaders, status: insertStatus }) => { 40 | return insertData 41 | }, (insertErr) => { 42 | return Promise.reject(new CouchifyError(ErrorType.COULD_NOT_INSERT, `${insertErr.message}. reason: ${insertErr.body.reason}`)) 43 | }) 44 | } else { 45 | return Promise.reject(getErr) 46 | } 47 | }) 48 | 49 | } 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "couchify", 3 | "description": "use next generation JS in your CouchDB apps", 4 | "version": "0.5.0", 5 | "main": "lib/index.js", 6 | "author": "wearereasonablepeople", 7 | "license": "MIT", 8 | "scripts": { 9 | "build": "rimraf lib && tsc", 10 | "lint": "tslint src/**/*.ts --project tsconfig.json --type-check", 11 | "pretest": "npm run build", 12 | "test": "tape lib/test/**/*.js | tap-diff", 13 | "release": "xyz --edit --repo git@github.com:wearereasonablepeople/couchify.git --increment" 14 | }, 15 | "bin": { 16 | "couchify": "cmd.js" 17 | }, 18 | "typings": "lib/index", 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/wearereasonablepeople/couchify.git" 22 | }, 23 | "dependencies": { 24 | "acorn": "^5.1.1", 25 | "babel-preset-es2015": "^6.24.1", 26 | "babelify": "^7.3.0", 27 | "deps-sort": "^2.0.0", 28 | "glob": "^7.1.2", 29 | "mime-types": "^2.1.16", 30 | "minimist": "^1.2.0", 31 | "module-deps": "^4.1.1", 32 | "node-couchdb": "^1.2.0", 33 | "pump": "^1.0.2", 34 | "stream-to-array": "^2.3.0", 35 | "toposort": "^1.0.3", 36 | "transform-deps": "^2.0.0", 37 | "uniq": "^1.0.1", 38 | "xyz": "^2.1.0" 39 | }, 40 | "devDependencies": { 41 | "@types/acorn": "^4.0.2", 42 | "@types/glob": "^5.0.32", 43 | "@types/mime-types": "^2.1.0", 44 | "@types/minimist": "^1.2.0", 45 | "@types/node": "^8.0.24", 46 | "@types/pump": "^1.0.1", 47 | "@types/tape": "^4.2.30", 48 | "@types/uniq": "^0.0.27", 49 | "babel-plugin-transform-function-bind": "^6.22.0", 50 | "couchdb-client": "^1.0.14", 51 | "gamma": "^1.0.0", 52 | "rimraf": "^2.6.1", 53 | "tap-diff": "^0.1.1", 54 | "tape": "^4.8.0", 55 | "tslint": "^5.6.0", 56 | "tslint-eslint-rules": "^4.1.1", 57 | "typescript": "^2.4.2" 58 | }, 59 | "files": [ 60 | "lib", 61 | "cmd.js" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /fixtures/gamma/expected.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/gamma", 3 | "language": "javascript", 4 | "commons": { 5 | "0": "// transliterated from the python snippet here:\n// http://en.wikipedia.org/wiki/Lanczos_approximation\n\nvar g = 7;\nvar p = [\n 0.99999999999980993,\n 676.5203681218851,\n -1259.1392167224028,\n 771.32342877765313,\n -176.61502916214059,\n 12.507343278686905,\n -0.13857109526572012,\n 9.9843695780195716e-6,\n 1.5056327351493116e-7\n];\n\nvar g_ln = 607/128;\nvar p_ln = [\n 0.99999999999999709182,\n 57.156235665862923517,\n -59.597960355475491248,\n 14.136097974741747174,\n -0.49191381609762019978,\n 0.33994649984811888699e-4,\n 0.46523628927048575665e-4,\n -0.98374475304879564677e-4,\n 0.15808870322491248884e-3,\n -0.21026444172410488319e-3,\n 0.21743961811521264320e-3,\n -0.16431810653676389022e-3,\n 0.84418223983852743293e-4,\n -0.26190838401581408670e-4,\n 0.36899182659531622704e-5\n];\n\n// Spouge approximation (suitable for large arguments)\nfunction lngamma(z) {\n\n if(z < 0) return Number('0/0');\n var x = p_ln[0];\n for(var i = p_ln.length - 1; i > 0; --i) x += p_ln[i] / (z + i);\n var t = z + g_ln + 0.5;\n return .5*Math.log(2*Math.PI)+(z+.5)*Math.log(t)-t+Math.log(x)-Math.log(z);\n}\n\nmodule.exports = function gamma (z) {\n if (z < 0.5) {\n return Math.PI / (Math.sin(Math.PI * z) * gamma(1 - z));\n }\n else if(z > 100) return Math.exp(lngamma(z));\n else {\n z -= 1;\n var x = p[0];\n for (var i = 1; i < g + 2; i++) {\n x += p[i] / (z + i);\n }\n var t = z + g + 0.5;\n\n return Math.sqrt(2 * Math.PI)\n * Math.pow(t, z + 0.5)\n * Math.exp(-t)\n * x\n ;\n }\n};\n\nmodule.exports.log = lngamma;\n", 6 | "1": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar x = exports.x = 'fruits';" 7 | }, 8 | "shows": { 9 | "foo": "(function(){\n\nreturn function () {\n var gamma = require('commons/0');\n return require('commons/1').x + gamma(5) + '\\n';\n };\n\n}())" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/formatters.ts: -------------------------------------------------------------------------------- 1 | import * as acorn from 'acorn' 2 | import * as mime from 'mime-types' 3 | import * as path from 'path' 4 | import { Attachment, CouchifyOptions, DependencyResolution, FunctionResolution } from './interfaces' 5 | import {CouchifyError, ErrorType} from './error' 6 | 7 | const designFunctionTypes = ['filters', 'lists', 'shows', 'updates', 'views'] 8 | 9 | const esModuleTagMatcher = new RegExp('^Object.defineProperty\\(exports\\, "__esModule"\, \{\\s+value\:\\s+true\\s+\}\\)\;') 10 | const useStrictMatcher = /^[\'\"]{1,}use strict[\'\"]{1,}\;\s+/ 11 | 12 | export function formatAsDesignFunctionEntry(relativePath: string, deps: DependencyResolution[], options: CouchifyOptions): FunctionResolution { 13 | const entry = deps[deps.length - 1] as FunctionResolution 14 | const pathFragments = relativePath.split(/[/.]/).slice(0, -1) 15 | const iife = transformExportsToIife(entry.source) 16 | if (!iife) throw new CouchifyError(ErrorType.NO_EXPORT, relativePath) 17 | const root = designFunctionTypes[[ 18 | options.filtersDir, 19 | options.listsDir, 20 | options.showsDir, 21 | options.updatesDir, 22 | options.viewsDir 23 | ].indexOf(pathFragments[0])] 24 | return { 25 | ...entry, 26 | output: iife, 27 | resolvedDeps: deps.slice(0, -1), 28 | path: [root, ...pathFragments.slice(1)] 29 | } 30 | } 31 | 32 | export function formatAsAttachmentEntry(attachmentsDir: string, relativePath: string, absPath: string, data: any): Attachment { 33 | const contentType = mime.contentType(path.basename(absPath)) 34 | return { 35 | id: relativePath, 36 | content_type: contentType || 'application/octet-stream', 37 | data: data.toString('base64') 38 | } 39 | } 40 | 41 | /** 42 | * Traverse an [[ESTree.Program]] and extract the enclosed functions with the CouchDB signature. 43 | * 44 | * @param source CommonJS source. 45 | */ 46 | function transformExportsToIife(source: string): string | null { 47 | const ast = acorn.parse(source) 48 | 49 | if (!Array.isArray(ast.body)) { 50 | return null 51 | } 52 | 53 | const exportExpression:any = ast.body.find(node => 54 | node && 55 | node.type === 'ExpressionStatement' && 56 | typeof node.expression === 'object' && 57 | node.expression.type === 'AssignmentExpression' && 58 | typeof node.expression.left === 'object' && 59 | node.expression.left.type === 'MemberExpression' && 60 | typeof node.expression.right === 'object' && 61 | node.expression.right.type === 'FunctionExpression' 62 | ) 63 | 64 | if (!exportExpression) { 65 | return null 66 | } 67 | 68 | const functionBody = exportExpression.expression.right.body; 69 | const returnValue = functionBody.body[functionBody.body.length - 1] as any 70 | const extractedReturnValue = source.slice(0, exportExpression.start) 71 | + source.slice(returnValue.start, returnValue.end) 72 | + source.slice(exportExpression.end) 73 | 74 | const cleanedReturnValue = extractedReturnValue.replace(useStrictMatcher, '') 75 | .replace(esModuleTagMatcher, '') 76 | .trim() 77 | 78 | return '(function(){\n\n' + cleanedReturnValue + '\n\n}())' 79 | } 80 | -------------------------------------------------------------------------------- /src/cmd.ts: -------------------------------------------------------------------------------- 1 | import * as minimist from 'minimist' 2 | import * as path from 'path' 3 | import * as client from './client' 4 | import { couchify } from './couchify' 5 | import { CouchifyOptions, DesignDocument } from './interfaces' 6 | 7 | const argv: any = minimist(process.argv.slice(2), { 8 | alias: { 9 | r: 'remote', 10 | n: 'name', 11 | y: 'dry', 12 | v: 'version', 13 | h: 'help', 14 | t: 'timeout' 15 | }, 16 | default: { 17 | name: 'default', 18 | db: 'default', 19 | remote: 'http://localhost:5984', 20 | dry: false 21 | } 22 | }) 23 | 24 | const dir: string = argv._[0] 25 | 26 | if ((!dir && !argv.version) || argv.help) { 27 | showUsage() 28 | } else if (argv.version) { 29 | console.log('v' + require(__dirname + '/../package.json').version) 30 | process.exit(0) 31 | } else { 32 | const baseDocumentsDir = path.resolve(dir) 33 | 34 | const options = { 35 | baseDocumentsDir: baseDocumentsDir, 36 | id: argv.name 37 | } as CouchifyOptions 38 | 39 | ;['filters-dir', 'shows-dir', 'lists-dir', 'updates-dir', 'views-dir'].forEach(key => { 40 | if (argv.hasOwnProperty(key)) { 41 | options[kebabToCamelCase(key)] = argv[key] 42 | } 43 | }) 44 | 45 | 46 | couchify(options).then((designDocument: DesignDocument) => { 47 | 48 | const deployOptions = { 49 | remote: argv.remote, 50 | db: argv.db, 51 | doc: designDocument, 52 | timeout: Number(argv.timeout) || 5000 53 | } 54 | 55 | if (!argv.dry) { 56 | return client 57 | .deploy(deployOptions) 58 | .then(res => { 59 | if (res.ok) { 60 | console.log(JSON.stringify(res)) 61 | process.exit(0) 62 | } else { 63 | console.error('[error] unexpected response: \n' + JSON.stringify(res, null, 2)) 64 | process.exit(1) 65 | } 66 | }) 67 | } else { 68 | console.log(JSON.stringify(designDocument, null, 2)) 69 | process.exit(0) 70 | } 71 | }).catch(er => { 72 | console.error('[error] ' + er.message) 73 | process.exit(1) 74 | }) 75 | 76 | } 77 | 78 | function showUsage() { 79 | const usage = 80 | `couchify DIR [OPTIONS] 81 | 82 | Options: 83 | --db Database name. [default: default] 84 | -n, --name Design document name. [default: default] 85 | -r, --remote CouchDB endpoint. [default: http://localhost:5984] 86 | -t, --timeout CouchDB timeout (ms). [default: 5000] 87 | --filters-dir Filters directory. [default: filters] 88 | --lists-dir Lists directory. [default: lists] 89 | --shows-dir Shows directory. [default: shows] 90 | --updates-dir Updates directory. [default: updates] 91 | --views-dir Views directory. [default: views] 92 | -y, --dry Dry run. [default: false] 93 | -v, --version Show version number. 94 | -h, --help Show this message. 95 | ` 96 | console.log(usage) 97 | process.exit(0) 98 | } 99 | 100 | function kebabToCamelCase(s: string): string { 101 | return s.replace(/(\-\w)/g, m => m[1].toUpperCase()) 102 | } 103 | -------------------------------------------------------------------------------- /src/test/couchify.ts: -------------------------------------------------------------------------------- 1 | import * as http from 'http' 2 | import * as test from 'tape' 3 | import { deploy } from '../client' 4 | import { couchify } from '../couchify' 5 | import { DesignDocument } from '../interfaces' 6 | 7 | const fixturesDir = __dirname + '/../../fixtures' 8 | 9 | const CouchDBClient = require('couchdb-client') 10 | 11 | const remoteHost = process.env.NODE_ENV === 'docker' ? 'couchdb' : 'localhost' 12 | 13 | const client = new CouchDBClient({ 14 | host: remoteHost, 15 | port: 5984 16 | }) 17 | 18 | const extraOptions = { 19 | 'babel-plugin': { 20 | babelPlugins: ['transform-function-bind'] 21 | } 22 | } 23 | 24 | const testDb = 'couchify-test' 25 | 26 | const expected = { 27 | basic: [ 28 | 'simple:ok', 29 | 'requirey:PLANKTON42' 30 | ], 31 | gamma: [ 32 | 'foo:fruits23.999999999999996\n' 33 | ], 34 | 'babel-plugin': [ 35 | 'foo:666' 36 | ] 37 | } 38 | 39 | test('couchdb', t => { 40 | client.welcome((welcomeErr, welcomeData) => { 41 | t.error(welcomeErr) 42 | t.equal(JSON.parse(welcomeData).couchdb, 'Welcome') 43 | 44 | client.getDB(testDb, (getErr, getData) => { 45 | if (getErr) { 46 | if (getErr.error === 'not_found') { 47 | client.createDB(testDb, (createErr, createData) => { 48 | t.error(createErr) 49 | t.ok(createData.ok) 50 | t.end() 51 | runTests() 52 | }) 53 | } else { 54 | t.error(getErr) 55 | } 56 | } else { 57 | t.end() 58 | runTests() 59 | } 60 | }) 61 | }) 62 | }) 63 | 64 | function runTests() { 65 | [ 66 | 'babel-plugin', 67 | 'basic', 68 | 'gamma' 69 | ].forEach(d => { 70 | test('fixtures/' + d, t => { 71 | let opts = { 72 | id: d, 73 | baseDocumentsDir: fixturesDir + '/' + d 74 | } 75 | 76 | if (extraOptions.hasOwnProperty(d)) { 77 | opts = { ...opts, ...extraOptions[d] } 78 | } 79 | 80 | couchify(opts) 81 | .then((doc: DesignDocument) => { 82 | deploy({ remote: `http://${remoteHost}:5984`, db: testDb, doc }) 83 | .then(res => { 84 | t.ok(res.ok) 85 | t.equal(res.id, doc._id) 86 | let i = 0 87 | 88 | expected[d].forEach(pair => { 89 | const [fnName, expectedText] = pair.split(':') 90 | http.request({ 91 | host: remoteHost, 92 | port: 5984, 93 | method: 'GET', 94 | path: `/${testDb}/${doc._id}/_show/${fnName}` 95 | }, httpRes => { 96 | httpRes.on('data', data => { 97 | t.equal(data.toString(), expectedText) 98 | if (++i === expected[d].length) { 99 | t.end() 100 | } 101 | }) 102 | httpRes.on('error', t.error) 103 | }).end() 104 | }) 105 | }) 106 | .catch(deployErr => { 107 | t.error(deployErr) 108 | }) 109 | }).catch(er => { 110 | t.error(er) 111 | }) 112 | }) 113 | }) 114 | 115 | ; 116 | 117 | [ 118 | 'attachments', 119 | 'babel-plugin', 120 | 'basic', 121 | 'gamma', 122 | 'template' 123 | ].forEach(d => { 124 | test('fixtures/' + d, t => { 125 | let opts = { 126 | id: d, 127 | baseDocumentsDir: fixturesDir + '/' + d 128 | } 129 | 130 | if (extraOptions.hasOwnProperty(d)) { 131 | opts = { ...opts, ...extraOptions[d] } 132 | } 133 | 134 | couchify(opts).then(actual => { 135 | t.deepEqual(require(fixturesDir + '/' + d + '/expected.json'), actual) 136 | t.end() 137 | }).catch(er => t.error(er)) 138 | }) 139 | }) 140 | } 141 | 142 | test('fixtures/custom-dirs', t => { 143 | let opts = { 144 | id: 'custom-dirs', 145 | baseDocumentsDir: fixturesDir + '/custom-dirs', 146 | showsDir: 's', 147 | viewsDir: 'v' 148 | } 149 | 150 | couchify(opts).then(actual => { 151 | t.deepEqual(require(fixturesDir + '/custom-dirs/expected.json'), actual) 152 | t.end() 153 | }).catch(er => t.error(er)) 154 | }) 155 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "tslint-eslint-rules" 4 | ], 5 | "rules": { 6 | "adjacent-overload-signatures": true, 7 | "align": [ 8 | true, 9 | "parameters", 10 | "statements" 11 | ], 12 | "array-type": [ 13 | true, 14 | "array" 15 | ], 16 | "arrow-parens": false, 17 | "ban": false, 18 | "class-name": true, 19 | "comment-format": [ 20 | true, 21 | "check-space" 22 | ], 23 | "curly": true, 24 | "cyclomatic-complexity": [ 25 | false 26 | ], 27 | "eofline": true, 28 | "forin": false, 29 | "indent": [ 30 | true, 31 | "spaces" 32 | ], 33 | "jsdoc-format": true, 34 | "label-position": true, 35 | "linebreak-style": [ 36 | true, 37 | "LF" 38 | ], 39 | "max-classes-per-file": [ 40 | false, 41 | 1 42 | ], 43 | "max-line-length": [ 44 | true, 45 | 180 46 | ], 47 | "member-access": false, 48 | "member-ordering": [ 49 | true, 50 | { 51 | "order": [ 52 | "static-field", 53 | "instance-field", 54 | "constructor", 55 | "public-instance-method", 56 | "protected-instance-method", 57 | "private-instance-method" 58 | ] 59 | } 60 | ], 61 | "new-parens": false, 62 | "no-angle-bracket-type-assertion": true, 63 | "no-any": false, 64 | "no-arg": true, 65 | "no-bitwise": true, 66 | "no-conditional-assignment": true, 67 | "no-consecutive-blank-lines": [ 68 | true 69 | ], 70 | "no-console": [ 71 | false 72 | ], 73 | "no-construct": true, 74 | "no-debugger": true, 75 | "no-default-export": true, 76 | "no-duplicate-variable": true, 77 | "no-empty": true, 78 | "no-eval": true, 79 | "no-inferrable-types": [ 80 | false 81 | ], 82 | "no-internal-module": true, 83 | "no-require-imports": false, 84 | "no-shadowed-variable": true, 85 | "no-string-literal": false, 86 | "no-switch-case-fall-through": true, 87 | "no-trailing-whitespace": true, 88 | "no-reference": true, 89 | "no-unsafe-finally": true, 90 | "no-unused-expression": true, 91 | "no-unused-vars": [ 92 | "error", 93 | { 94 | "vars": "all", 95 | "args": "after-used", 96 | "ignoreRestSiblings": false 97 | } 98 | ], 99 | "no-use-before-declare": true, 100 | "no-var-keyword": true, 101 | "no-var-requires": false, 102 | "object-literal-key-quotes": [ 103 | true, 104 | "as-needed" 105 | ], 106 | "object-literal-shorthand": false, 107 | "object-literal-sort-keys": false, 108 | "one-line": [ 109 | true, 110 | "check-open-brace", 111 | "check-whitespace" 112 | ], 113 | "one-variable-per-declaration": [ 114 | true 115 | ], 116 | "only-arrow-functions": [ 117 | false, 118 | "allow-declarations", 119 | "allow-named-functions" 120 | ], 121 | "ordered-imports": [ 122 | true, 123 | { 124 | "import-sources-order": "case-insensitive", 125 | "named-imports-order": "case-insensitive" 126 | } 127 | ], 128 | "prefer-for-of": true, 129 | "quotemark": [ 130 | true, 131 | "single", 132 | "avoid-escape" 133 | ], 134 | "radix": true, 135 | "semicolon": [ 136 | true, 137 | "never" 138 | ], 139 | "switch-default": false, 140 | "trailing-comma": [ 141 | true, 142 | { 143 | "multiline": "never", 144 | "singleline": "never" 145 | } 146 | ], 147 | "triple-equals": true, 148 | "typedef": [ 149 | true, 150 | "property-declaration" 151 | ], 152 | "typedef-whitespace": [ 153 | true, 154 | { 155 | "call-signature": "nospace", 156 | "index-signature": "nospace", 157 | "parameter": "nospace", 158 | "property-declaration": "nospace", 159 | "variable-declaration": "nospace" 160 | }, 161 | { 162 | "call-signature": "space", 163 | "index-signature": "space", 164 | "parameter": "space", 165 | "property-declaration": "space", 166 | "variable-declaration": "space" 167 | } 168 | ], 169 | "variable-name": [ 170 | true, 171 | "check-format", 172 | "allow-pascal-case", 173 | "allow-leading-underscore", 174 | "ban-keywords" 175 | ], 176 | "whitespace": [ 177 | true, 178 | "check-branch", 179 | "check-decl", 180 | "check-operator", 181 | "check-module", 182 | "check-separator", 183 | "check-type" 184 | ], 185 | /* tslint-eslint */ 186 | "array-bracket-spacing": [ 187 | false, 188 | "never" 189 | ], 190 | "block-spacing": [ 191 | true, 192 | "always" 193 | ], 194 | "brace-style": [ 195 | true, 196 | "1tbs", 197 | { 198 | "allowSingleLine": true 199 | } 200 | ], 201 | "no-multi-spaces": [ 202 | true, 203 | { 204 | "exceptions": { 205 | "PropertyAssignment": false 206 | } 207 | } 208 | ], 209 | "object-curly-spacing": [ 210 | true, 211 | "always" 212 | ] 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # couchify 2 | 3 | use next generation JS in your [CouchDB](http://couchdb.apache.org) apps. 4 | 5 | [![Build Status](https://travis-ci.org/wearereasonablepeople/couchify.svg?branch=master)](https://travis-ci.org/wearereasonablepeople/couchify) 6 | 7 | `couchify` uses [babel](https://babeljs.io) to transpile your modular ES2015 application code into ES5, and will recursively analyze the `require()` calls in order to build a flat representation of your application's dependency tree in CouchDB. 8 | 9 | # Install 10 | 11 | With `npm` or `yarn`, do: 12 | 13 | ``` 14 | npm install couchify 15 | ``` 16 | 17 | # Example 18 | 19 | Following example shows how you can create a _show_ function which uses `gamma` module from npm. 20 | 21 | So, given this directory structure: 22 | 23 | ``` 24 | myapp/ 25 | ├── shows/ 26 | │ └── foo.js 27 | └── bar.js 28 | ``` 29 | 30 | `foo.js` looks like this: 31 | 32 | ```js 33 | export default ({ require }) => () => { 34 | const gamma = require('gamma') 35 | return require('../bar').x + gamma(5) + '\n' 36 | } 37 | ``` 38 | 39 | `couchify` needs to know where your list/update/view/show/etc functions are located in the first place. By default, it assumes that they are under the `baseDocumentsDir` you provided, so, by default, _view_ functions are searched in the `views` folder, _show_ functions in the _shows_, and so on. 40 | 41 | Unlike normal CouchDB functions, you need to explicitly provide the CouchDB globals (e.g. `require`, `emit` and so on) into these functions. This makes it possible to test your functions easily during development. Just use `require()` in your design functions how you would normally use it in other places, and everything will be fine. 42 | 43 | and `bar.js` (which is only put there to demonstrate that you can `require()` from anywhere): 44 | 45 | ```js 46 | export const x = 'fruits' 47 | ``` 48 | 49 | in this case, a hypothetical `foo.js` test could look like this: 50 | 51 | ```js 52 | const assert = require('assert') 53 | const foo = require('./shows/foo')({ require }) /* providing 'require' here */ 54 | const doc = { n: 555 } 55 | assert.equal(foo(doc), 'fruits' + 3.345252661316333e+49) 56 | ``` 57 | 58 | and you can deploy it with: 59 | 60 | ```sh 61 | λ ~ couchify myapp/ --name myapp --db mydb 62 | {"ok":true,"id":"_design/myapp","rev":"41-c40f6ce36f17579bbbd2b4371d48c8ce"} 63 | ``` 64 | 65 | and test the _show_ API using `cURL`: 66 | 67 | ```sh 68 | λ ~ curl -X GET http://127.0.0.1:5984/mydb/_design/myapp/_show/foo 69 | fruits23.999999999999996 70 | ``` 71 | 72 | # API 73 | 74 | ```js 75 | const couchify = require('couchify').couchify 76 | ``` 77 | 78 | `couchify` expects some `CouchifyOptions` and returns a `Promise`. When this promise is resolved, you get a [design document](http://guide.couchdb.org/draft/design.html) JSON back. 79 | 80 | ```ts 81 | type CouchifyOptions = { 82 | id?: string 83 | baseDocumentsDir?: string 84 | babelPlugins?: any[] 85 | babelPresets?: any[] 86 | filtersDir?: string 87 | listsDir?: string 88 | showsDir?: string 89 | updatesDir?: string 90 | viewsDir?: string 91 | globIgnorePatterns?: string[] 92 | } 93 | ``` 94 | 95 | * `id` is the design document ID (without the `_design/` part). 96 | * `baseDocumentsDir` is where your source code is located. This directory should contain at least one of the `filtersDir`, `listsDir`, `showsDir`, `updatesDir` or `viewsDir` directories. These are respectively is been set to: `filters`, `lists`, `shows`, `updates` and `views`. 97 | * By default, `couchify` only applies [ES2015 preset](https://babeljs.io/docs/plugins/preset-es2015/), you can add extra Babel plugins and presets with `babelPlugins` and `babelPresets` options. 98 | 99 | ### Custom fields 100 | 101 | You can customize the design document by adding a `template.json` to the base 102 | folder. Its contents will be merged with the final design document. 103 | 104 | For more advanced templating, you can use a `template.js`-file exporting a 105 | function instead. The function will be called with the CouchifyOptions to 106 | produce the template. 107 | 108 | For example: 109 | 110 | ```js 111 | module.exports = options => ({ 112 | name: options.id, 113 | version: require('../package.json').version, 114 | rewrites: [ 115 | { 116 | from: '', 117 | to: 'index.html', 118 | method: 'GET', 119 | query: {} 120 | } 121 | ] 122 | }) 123 | ``` 124 | 125 | ### Deploying 126 | 127 | ```js 128 | const deploy = require('couchify').deploy 129 | ``` 130 | 131 | Deploy a CouchDB design document. 132 | 133 | ```ts 134 | type DeployOptions = { 135 | remote: string 136 | db: string 137 | doc: DesignDocument 138 | timeout?: number 139 | } 140 | ``` 141 | 142 | # CLI 143 | 144 | ``` 145 | couchify DIR [OPTIONS] 146 | 147 | Options: 148 | --db Database name. [default: default] 149 | -n, --name Design document name. [default: default] 150 | -r, --remote CouchDB endpoint. [default: http://localhost:5984] 151 | -t, --timeout CouchDB timeout (ms). [default: 5000] 152 | --filters-dir Filters directory. [default: filters] 153 | --lists-dir Lists directory. [default: lists] 154 | --shows-dir Shows directory. [default: shows] 155 | --updates-dir Updates directory. [default: updates] 156 | --views-dir Views directory. [default: views] 157 | -y, --dry Dry run. [default: false] 158 | -v, --version Show version number. 159 | -h, --help Show this message. 160 | ``` 161 | 162 | Design document name must be unique per database. It is set to `default`, by default. 163 | 164 | When `--dry` flag is set, `couchify` will only output the design document JSON and not deploy it. 165 | 166 | # Limitations 167 | 168 | * You can use `require()` inside the body of your design functions only, top-level `require()` calls are ignored. 169 | * Currently `require()` does not work in _reduce_ functions. (See: https://wiki.apache.org/couchdb/CommonJS_Modules) 170 | 171 | # Roadmap 172 | 173 | See the [Issues page](https://github.com/wearereasonablepeople/couchify/issues) for a list of known bugs & planned features. 174 | 175 | # Development 176 | 177 | To install dependencies, do: 178 | 179 | ``` 180 | yarn 181 | ``` 182 | 183 | Start TypeScript compiler in watch mode: 184 | 185 | ``` 186 | npm run build -- --watch 187 | ``` 188 | 189 | Run linter: 190 | 191 | ``` 192 | npm run lint 193 | ``` 194 | 195 | Run tests: 196 | 197 | ``` 198 | npm run test 199 | ``` 200 | -------------------------------------------------------------------------------- /src/couchify.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path' 2 | import * as pump from 'pump' 3 | import * as uniq from 'uniq' 4 | import { CouchifyError, ErrorType } from './error' 5 | import { formatAsAttachmentEntry, formatAsDesignFunctionEntry } from './formatters' 6 | import { accessAsync, glob, readFileAsync } from './helpers' 7 | import { 8 | Attachment, 9 | CouchifyOptions, 10 | DependencyResolution, 11 | DesignDocument, 12 | FunctionResolution 13 | } from './interfaces' 14 | const babelify = require('babelify') 15 | const moduleDeps = require('module-deps') 16 | const moduleSort = require('deps-sort') 17 | const transformDeps = require('transform-deps') 18 | const toArray = require('stream-to-array') 19 | const toposort = require('toposort') 20 | 21 | const defaultOptions: CouchifyOptions = { 22 | attachmentsDir: 'public', 23 | filtersDir: 'filters', 24 | listsDir: 'lists', 25 | showsDir: 'shows', 26 | updatesDir: 'updates', 27 | viewsDir: 'views', 28 | globIgnorePatterns: ['**/node_modules/**'], 29 | babelPresets: [], 30 | babelPlugins: [] 31 | } 32 | 33 | const MODULE_EXPORTS = 'module.exports=' 34 | 35 | export function couchify(options: CouchifyOptions): Promise { 36 | options = { ...defaultOptions, ...options } 37 | 38 | if (!options.baseDocumentsDir) { 39 | return Promise.reject(new CouchifyError(ErrorType.NOT_PROVIDED_BASE_DOCUMENTS_DIR)) 40 | } 41 | 42 | if (!options.id) { 43 | return Promise.reject(new CouchifyError(ErrorType.NOT_PROVIDED_ID)) 44 | } 45 | 46 | const designFunctionDirs = uniq([ 47 | options.filtersDir, 48 | options.listsDir, 49 | options.showsDir, 50 | options.updatesDir, 51 | options.viewsDir 52 | ]) 53 | 54 | if (designFunctionDirs.length !== 5) { 55 | return Promise.reject(new CouchifyError(ErrorType.NOT_UNIQUE_DIRNAMES)) 56 | } 57 | 58 | const baseDocumentsDir = path.resolve(options.baseDocumentsDir) 59 | const attachmentsDir = path.join(baseDocumentsDir, options.attachmentsDir) 60 | 61 | const globOptions = { ignore: options.globIgnorePatterns, nodir: true } 62 | 63 | return accessAsync(baseDocumentsDir).then(() => _couchify(options, globOptions, designFunctionDirs, attachmentsDir, baseDocumentsDir)) 64 | } 65 | 66 | function _couchify(options: CouchifyOptions, globOptions, designFunctionDirs: string[], attachmentsDir: string, baseDocumentsDir: string): Promise { 67 | return Promise.all([ 68 | glob(`+(${designFunctionDirs.join('|')})/*.{${['js', 'json' /* TODO: test json */]}}`, { ...globOptions, ...{ cwd: baseDocumentsDir } }), 69 | glob('**/*', { ...globOptions, ...{ cwd: attachmentsDir } }) 70 | ]).then(([designFiles, attachmentFiles]) => { 71 | 72 | const designTasks = designFiles.map(relativePath => 73 | resolveDependencies(path.join(baseDocumentsDir, relativePath), options) 74 | .then(deps => formatAsDesignFunctionEntry(relativePath, deps, options)) 75 | ) 76 | 77 | const attachmentTasks = attachmentFiles.map(relativePath => { 78 | const absPath = path.join(attachmentsDir, relativePath) 79 | return readFileAsync(absPath).then(data => formatAsAttachmentEntry(attachmentsDir, relativePath, absPath, data)) 80 | }) 81 | 82 | return Promise.all([Promise.all(designTasks), Promise.all(attachmentTasks)]).then(([entries, attachments]) => { 83 | 84 | const resolvedDeps: DependencyResolution[] = [] 85 | const rewriteTasks: Promise[] = [] 86 | const resolutionIndex = {} 87 | 88 | entries.forEach(entry => { 89 | entry.resolvedDeps 90 | .filter(d => !(resolutionIndex.hasOwnProperty(d.file))) 91 | .forEach(d => { 92 | resolvedDeps.push(d) 93 | resolutionIndex[d.file] = resolvedDeps.length - 1 94 | rewriteTasks.push( 95 | rewriteRequires(d.source, name => `./${resolutionIndex[d.deps[name]]}`).then(code => { 96 | d.source = code 97 | return d 98 | }) 99 | ) 100 | }) 101 | 102 | const depRoot = entry.path[0] === 'views' ? 'views/lib' : 'commons' 103 | 104 | rewriteTasks.push( 105 | rewriteRequires(MODULE_EXPORTS + entry.output, name => `${depRoot}/${resolutionIndex[entry.deps[name]]}`) 106 | .then(code => { 107 | entry.source = code.slice(MODULE_EXPORTS.length) 108 | return entry 109 | }) 110 | ) 111 | }) 112 | 113 | return Promise.all(rewriteTasks).then(values => designDocument(values, resolutionIndex, resolvedDeps, attachments, options)) 114 | }) 115 | }) 116 | } 117 | 118 | function resolveDependencies(file: string, options: CouchifyOptions): Promise { 119 | return new Promise((resolve, reject) => { 120 | 121 | const resolver = moduleDeps({ 122 | transform: [[babelify, { 123 | presets: [['es2015', {}]].concat(options.babelPresets || []), 124 | plugins: options.babelPlugins || [], 125 | babelrc: false, 126 | ast: false, 127 | comments: false, 128 | sourceMaps: false 129 | }]] 130 | }) 131 | 132 | const sorter = moduleSort({ dedupe: true }) 133 | 134 | toArray(pump(resolver, sorter), (err, res) => { 135 | if (err) { 136 | console.log(err) 137 | return reject(err) 138 | } 139 | 140 | if (res.length < 2) { 141 | return resolve(res) 142 | } 143 | 144 | const graph = [] 145 | res.forEach(d => { 146 | Object.values(d.deps).forEach(dep => { 147 | graph.push([ d.file, dep ]) 148 | }) 149 | }) 150 | 151 | const sortedDeps = toposort(graph).reverse().map(d => { 152 | return res[res.findIndex(el => el.id === d)] 153 | }) 154 | 155 | const entryIx = sortedDeps.findIndex(d => d.entry === true) 156 | sortedDeps.push(sortedDeps.splice(entryIx, 1)[0]) 157 | 158 | resolve(sortedDeps) 159 | }) 160 | 161 | resolver.end({ file: file }) 162 | }) 163 | } 164 | 165 | function rewriteRequires(src: string, fn: (name: string) => string | void): Promise { 166 | return new Promise((resolve) => resolve(transformDeps(src, fn))) 167 | } 168 | 169 | function designDocument(values: FunctionResolution[], resolutionIndex, resolvedDeps: DependencyResolution[], attachments: Attachment[], options: CouchifyOptions) { 170 | 171 | const res: DesignDocument = createDesignDocumentTemplate(options) 172 | 173 | if (attachments.length) { 174 | res._attachments = attachments.reduce((acc, attachment) => { 175 | acc[attachment.id] = { content_type: attachment.content_type, data: attachment.data } 176 | return acc 177 | }, {} as { [key: string]: Attachment }) 178 | } 179 | 180 | const viewsLib: { [key: string]: string } = {} 181 | 182 | values.forEach(value => { 183 | if (!value.entry) { 184 | (res.commons || (res.commons = {}))[String(resolutionIndex[value.id])] = value.source 185 | return 186 | } 187 | 188 | let ref:any = res 189 | 190 | value.path.forEach((k, i) => { 191 | if (i === value.path.length - 1) { 192 | ref[k] = value.source 193 | } else { 194 | ref = ref[k] || (ref[k] = {}) 195 | } 196 | }) 197 | 198 | if (value.path[0] !== 'views') { 199 | return 200 | } 201 | 202 | value.resolvedDeps.forEach(dep => { 203 | viewsLib[String(resolutionIndex[dep.id])] = resolvedDeps[resolutionIndex[dep.id]].source 204 | }) 205 | }) 206 | 207 | if (Object.keys(viewsLib).length) { 208 | res.views.lib = viewsLib 209 | } 210 | 211 | return res 212 | } 213 | 214 | function createDesignDocumentTemplate(options: CouchifyOptions): DesignDocument { 215 | const overrides: DesignDocument = { 216 | _id: `_design/${options.id}`, 217 | language: 'javascript' 218 | } 219 | 220 | let tmpl; 221 | 222 | try{ 223 | tmpl = require(path.resolve(options.baseDocumentsDir, 'template')) 224 | } catch (e) { 225 | try { 226 | tmpl = require(path.resolve(options.baseDocumentsDir, 'template.cjs')) 227 | } catch (e) { 228 | return overrides 229 | } 230 | } 231 | 232 | const template = typeof tmpl === 'function' ? tmpl(options) : tmpl 233 | return {...template, ...overrides} 234 | } 235 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.5.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 8 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.5.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 15 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@types/acorn@^4.0.2": 22 | version "4.0.5" 23 | resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.5.tgz#e29fdf884695e77be4e99e67d748f5147255752d" 24 | integrity sha512-603sPiZ4GVRHPvn6vNgEAvJewKsy+zwRWYS2MeIMemgoAtcjlw2G3lALxrb9OPA17J28bkB71R33yXlQbUatCA== 25 | dependencies: 26 | "@types/estree" "*" 27 | 28 | "@types/estree@*": 29 | version "0.0.39" 30 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 31 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 32 | 33 | "@types/events@*": 34 | version "3.0.0" 35 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 36 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 37 | 38 | "@types/glob@^5.0.32": 39 | version "5.0.36" 40 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2" 41 | integrity sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg== 42 | dependencies: 43 | "@types/events" "*" 44 | "@types/minimatch" "*" 45 | "@types/node" "*" 46 | 47 | "@types/mime-types@^2.1.0": 48 | version "2.1.0" 49 | resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" 50 | integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM= 51 | 52 | "@types/minimatch@*": 53 | version "3.0.3" 54 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 55 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 56 | 57 | "@types/minimist@^1.2.0": 58 | version "1.2.0" 59 | resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" 60 | integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= 61 | 62 | "@types/node@*": 63 | version "12.12.6" 64 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.6.tgz#a47240c10d86a9a57bb0c633f0b2e0aea9ce9253" 65 | integrity sha512-FjsYUPzEJdGXjwKqSpE0/9QEh6kzhTAeObA54rn6j3rR4C/mzpI9L0KNfoeASSPMMdxIsoJuCLDWcM/rVjIsSA== 66 | 67 | "@types/node@^8.0.24": 68 | version "8.10.58" 69 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.58.tgz#98c14ce95a634701bd2d59d52df882c0610dd0eb" 70 | integrity sha512-NNcUk/rAdR7Pie7WiA5NHp345dTkD62qaxqscQXVIjCjog/ZXsrG8Wo7dZMZAzE7PSpA+qR2S3TYTeFCKuBFxQ== 71 | 72 | "@types/pump@^1.0.1": 73 | version "1.1.0" 74 | resolved "https://registry.yarnpkg.com/@types/pump/-/pump-1.1.0.tgz#ed5214af511da32b6ee85c8d33ad3d59bb79ad8f" 75 | integrity sha512-YGGbsqf5o7sF8gGANP8ZYxgaRGlFgEAImx5tCvA4YKRCfqbsDQZO48UmWynZzSjbhn0ZWSlsWOcb5NwvOx8KcQ== 76 | dependencies: 77 | "@types/node" "*" 78 | 79 | "@types/tape@^4.2.30": 80 | version "4.2.33" 81 | resolved "https://registry.yarnpkg.com/@types/tape/-/tape-4.2.33.tgz#3583953eaff5f8a77e65ad6ff197741457aaaab9" 82 | integrity sha512-ltfyuY5BIkYlGuQfwqzTDT8f0q8Z5DGppvUnWGs39oqDmMd6/UWhNpX3ZMh/VYvfxs3rFGHMrLC/eGRdLiDGuw== 83 | dependencies: 84 | "@types/node" "*" 85 | 86 | "@types/uniq@^0.0.27": 87 | version "0.0.27" 88 | resolved "https://registry.yarnpkg.com/@types/uniq/-/uniq-0.0.27.tgz#b1060a7256f13d8dc82c9591e5732a6245912ea2" 89 | integrity sha1-sQYKclbxPY3ILJWR5XMqYkWRLqI= 90 | 91 | JSONStream@^1.0.3: 92 | version "1.3.5" 93 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 94 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 95 | dependencies: 96 | jsonparse "^1.2.0" 97 | through ">=2.2.7 <3" 98 | 99 | acorn@^1.0.3: 100 | version "1.2.2" 101 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" 102 | integrity sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ= 103 | 104 | acorn@^5.1.1, acorn@^5.2.1: 105 | version "5.7.4" 106 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 107 | integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== 108 | 109 | ajv@^6.5.5: 110 | version "6.10.2" 111 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" 112 | integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== 113 | dependencies: 114 | fast-deep-equal "^2.0.1" 115 | fast-json-stable-stringify "^2.0.0" 116 | json-schema-traverse "^0.4.1" 117 | uri-js "^4.2.2" 118 | 119 | ansi-regex@^2.0.0: 120 | version "2.1.1" 121 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 122 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 123 | 124 | ansi-styles@^2.2.1: 125 | version "2.2.1" 126 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 127 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 128 | 129 | ansi-styles@^3.2.1: 130 | version "3.2.1" 131 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 132 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 133 | dependencies: 134 | color-convert "^1.9.0" 135 | 136 | any-promise@^1.1.0: 137 | version "1.3.0" 138 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 139 | integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= 140 | 141 | argparse@^1.0.7: 142 | version "1.0.10" 143 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 144 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 145 | dependencies: 146 | sprintf-js "~1.0.2" 147 | 148 | asn1@~0.2.3: 149 | version "0.2.4" 150 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 151 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 152 | dependencies: 153 | safer-buffer "~2.1.0" 154 | 155 | assert-plus@1.0.0, assert-plus@^1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 158 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 159 | 160 | asynckit@^0.4.0: 161 | version "0.4.0" 162 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 163 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 164 | 165 | aws-sign2@~0.7.0: 166 | version "0.7.0" 167 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 168 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 169 | 170 | aws4@^1.8.0: 171 | version "1.8.0" 172 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 173 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 174 | 175 | babel-code-frame@^6.26.0: 176 | version "6.26.0" 177 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 178 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 179 | dependencies: 180 | chalk "^1.1.3" 181 | esutils "^2.0.2" 182 | js-tokens "^3.0.2" 183 | 184 | babel-core@^6.0.14, babel-core@^6.26.0: 185 | version "6.26.3" 186 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" 187 | integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== 188 | dependencies: 189 | babel-code-frame "^6.26.0" 190 | babel-generator "^6.26.0" 191 | babel-helpers "^6.24.1" 192 | babel-messages "^6.23.0" 193 | babel-register "^6.26.0" 194 | babel-runtime "^6.26.0" 195 | babel-template "^6.26.0" 196 | babel-traverse "^6.26.0" 197 | babel-types "^6.26.0" 198 | babylon "^6.18.0" 199 | convert-source-map "^1.5.1" 200 | debug "^2.6.9" 201 | json5 "^0.5.1" 202 | lodash "^4.17.4" 203 | minimatch "^3.0.4" 204 | path-is-absolute "^1.0.1" 205 | private "^0.1.8" 206 | slash "^1.0.0" 207 | source-map "^0.5.7" 208 | 209 | babel-generator@^6.26.0: 210 | version "6.26.1" 211 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 212 | integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== 213 | dependencies: 214 | babel-messages "^6.23.0" 215 | babel-runtime "^6.26.0" 216 | babel-types "^6.26.0" 217 | detect-indent "^4.0.0" 218 | jsesc "^1.3.0" 219 | lodash "^4.17.4" 220 | source-map "^0.5.7" 221 | trim-right "^1.0.1" 222 | 223 | babel-helper-call-delegate@^6.24.1: 224 | version "6.24.1" 225 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 226 | integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= 227 | dependencies: 228 | babel-helper-hoist-variables "^6.24.1" 229 | babel-runtime "^6.22.0" 230 | babel-traverse "^6.24.1" 231 | babel-types "^6.24.1" 232 | 233 | babel-helper-define-map@^6.24.1: 234 | version "6.26.0" 235 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 236 | integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= 237 | dependencies: 238 | babel-helper-function-name "^6.24.1" 239 | babel-runtime "^6.26.0" 240 | babel-types "^6.26.0" 241 | lodash "^4.17.4" 242 | 243 | babel-helper-function-name@^6.24.1: 244 | version "6.24.1" 245 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 246 | integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= 247 | dependencies: 248 | babel-helper-get-function-arity "^6.24.1" 249 | babel-runtime "^6.22.0" 250 | babel-template "^6.24.1" 251 | babel-traverse "^6.24.1" 252 | babel-types "^6.24.1" 253 | 254 | babel-helper-get-function-arity@^6.24.1: 255 | version "6.24.1" 256 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 257 | integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= 258 | dependencies: 259 | babel-runtime "^6.22.0" 260 | babel-types "^6.24.1" 261 | 262 | babel-helper-hoist-variables@^6.24.1: 263 | version "6.24.1" 264 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 265 | integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= 266 | dependencies: 267 | babel-runtime "^6.22.0" 268 | babel-types "^6.24.1" 269 | 270 | babel-helper-optimise-call-expression@^6.24.1: 271 | version "6.24.1" 272 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 273 | integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= 274 | dependencies: 275 | babel-runtime "^6.22.0" 276 | babel-types "^6.24.1" 277 | 278 | babel-helper-regex@^6.24.1: 279 | version "6.26.0" 280 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 281 | integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= 282 | dependencies: 283 | babel-runtime "^6.26.0" 284 | babel-types "^6.26.0" 285 | lodash "^4.17.4" 286 | 287 | babel-helper-replace-supers@^6.24.1: 288 | version "6.24.1" 289 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 290 | integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= 291 | dependencies: 292 | babel-helper-optimise-call-expression "^6.24.1" 293 | babel-messages "^6.23.0" 294 | babel-runtime "^6.22.0" 295 | babel-template "^6.24.1" 296 | babel-traverse "^6.24.1" 297 | babel-types "^6.24.1" 298 | 299 | babel-helpers@^6.24.1: 300 | version "6.24.1" 301 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 302 | integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= 303 | dependencies: 304 | babel-runtime "^6.22.0" 305 | babel-template "^6.24.1" 306 | 307 | babel-messages@^6.23.0: 308 | version "6.23.0" 309 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 310 | integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= 311 | dependencies: 312 | babel-runtime "^6.22.0" 313 | 314 | babel-plugin-check-es2015-constants@^6.22.0: 315 | version "6.22.0" 316 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 317 | integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= 318 | dependencies: 319 | babel-runtime "^6.22.0" 320 | 321 | babel-plugin-syntax-function-bind@^6.8.0: 322 | version "6.13.0" 323 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" 324 | integrity sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y= 325 | 326 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 327 | version "6.22.0" 328 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 329 | integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= 330 | dependencies: 331 | babel-runtime "^6.22.0" 332 | 333 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 334 | version "6.22.0" 335 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 336 | integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= 337 | dependencies: 338 | babel-runtime "^6.22.0" 339 | 340 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 341 | version "6.26.0" 342 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 343 | integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= 344 | dependencies: 345 | babel-runtime "^6.26.0" 346 | babel-template "^6.26.0" 347 | babel-traverse "^6.26.0" 348 | babel-types "^6.26.0" 349 | lodash "^4.17.4" 350 | 351 | babel-plugin-transform-es2015-classes@^6.24.1: 352 | version "6.24.1" 353 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 354 | integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= 355 | dependencies: 356 | babel-helper-define-map "^6.24.1" 357 | babel-helper-function-name "^6.24.1" 358 | babel-helper-optimise-call-expression "^6.24.1" 359 | babel-helper-replace-supers "^6.24.1" 360 | babel-messages "^6.23.0" 361 | babel-runtime "^6.22.0" 362 | babel-template "^6.24.1" 363 | babel-traverse "^6.24.1" 364 | babel-types "^6.24.1" 365 | 366 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 367 | version "6.24.1" 368 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 369 | integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= 370 | dependencies: 371 | babel-runtime "^6.22.0" 372 | babel-template "^6.24.1" 373 | 374 | babel-plugin-transform-es2015-destructuring@^6.22.0: 375 | version "6.23.0" 376 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 377 | integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= 378 | dependencies: 379 | babel-runtime "^6.22.0" 380 | 381 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 382 | version "6.24.1" 383 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 384 | integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= 385 | dependencies: 386 | babel-runtime "^6.22.0" 387 | babel-types "^6.24.1" 388 | 389 | babel-plugin-transform-es2015-for-of@^6.22.0: 390 | version "6.23.0" 391 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 392 | integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= 393 | dependencies: 394 | babel-runtime "^6.22.0" 395 | 396 | babel-plugin-transform-es2015-function-name@^6.24.1: 397 | version "6.24.1" 398 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 399 | integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= 400 | dependencies: 401 | babel-helper-function-name "^6.24.1" 402 | babel-runtime "^6.22.0" 403 | babel-types "^6.24.1" 404 | 405 | babel-plugin-transform-es2015-literals@^6.22.0: 406 | version "6.22.0" 407 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 408 | integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= 409 | dependencies: 410 | babel-runtime "^6.22.0" 411 | 412 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 413 | version "6.24.1" 414 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 415 | integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= 416 | dependencies: 417 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 418 | babel-runtime "^6.22.0" 419 | babel-template "^6.24.1" 420 | 421 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 422 | version "6.26.2" 423 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" 424 | integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== 425 | dependencies: 426 | babel-plugin-transform-strict-mode "^6.24.1" 427 | babel-runtime "^6.26.0" 428 | babel-template "^6.26.0" 429 | babel-types "^6.26.0" 430 | 431 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 432 | version "6.24.1" 433 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 434 | integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= 435 | dependencies: 436 | babel-helper-hoist-variables "^6.24.1" 437 | babel-runtime "^6.22.0" 438 | babel-template "^6.24.1" 439 | 440 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 441 | version "6.24.1" 442 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 443 | integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= 444 | dependencies: 445 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 446 | babel-runtime "^6.22.0" 447 | babel-template "^6.24.1" 448 | 449 | babel-plugin-transform-es2015-object-super@^6.24.1: 450 | version "6.24.1" 451 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 452 | integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= 453 | dependencies: 454 | babel-helper-replace-supers "^6.24.1" 455 | babel-runtime "^6.22.0" 456 | 457 | babel-plugin-transform-es2015-parameters@^6.24.1: 458 | version "6.24.1" 459 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 460 | integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= 461 | dependencies: 462 | babel-helper-call-delegate "^6.24.1" 463 | babel-helper-get-function-arity "^6.24.1" 464 | babel-runtime "^6.22.0" 465 | babel-template "^6.24.1" 466 | babel-traverse "^6.24.1" 467 | babel-types "^6.24.1" 468 | 469 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 470 | version "6.24.1" 471 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 472 | integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= 473 | dependencies: 474 | babel-runtime "^6.22.0" 475 | babel-types "^6.24.1" 476 | 477 | babel-plugin-transform-es2015-spread@^6.22.0: 478 | version "6.22.0" 479 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 480 | integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= 481 | dependencies: 482 | babel-runtime "^6.22.0" 483 | 484 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 485 | version "6.24.1" 486 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 487 | integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= 488 | dependencies: 489 | babel-helper-regex "^6.24.1" 490 | babel-runtime "^6.22.0" 491 | babel-types "^6.24.1" 492 | 493 | babel-plugin-transform-es2015-template-literals@^6.22.0: 494 | version "6.22.0" 495 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 496 | integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= 497 | dependencies: 498 | babel-runtime "^6.22.0" 499 | 500 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 501 | version "6.23.0" 502 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 503 | integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= 504 | dependencies: 505 | babel-runtime "^6.22.0" 506 | 507 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 508 | version "6.24.1" 509 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 510 | integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= 511 | dependencies: 512 | babel-helper-regex "^6.24.1" 513 | babel-runtime "^6.22.0" 514 | regexpu-core "^2.0.0" 515 | 516 | babel-plugin-transform-function-bind@^6.22.0: 517 | version "6.22.0" 518 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" 519 | integrity sha1-xvuOlqwpajELjPjqQBRiQH3fapc= 520 | dependencies: 521 | babel-plugin-syntax-function-bind "^6.8.0" 522 | babel-runtime "^6.22.0" 523 | 524 | babel-plugin-transform-regenerator@^6.24.1: 525 | version "6.26.0" 526 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 527 | integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= 528 | dependencies: 529 | regenerator-transform "^0.10.0" 530 | 531 | babel-plugin-transform-strict-mode@^6.24.1: 532 | version "6.24.1" 533 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 534 | integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= 535 | dependencies: 536 | babel-runtime "^6.22.0" 537 | babel-types "^6.24.1" 538 | 539 | babel-preset-es2015@^6.24.1: 540 | version "6.24.1" 541 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 542 | integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= 543 | dependencies: 544 | babel-plugin-check-es2015-constants "^6.22.0" 545 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 546 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 547 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 548 | babel-plugin-transform-es2015-classes "^6.24.1" 549 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 550 | babel-plugin-transform-es2015-destructuring "^6.22.0" 551 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 552 | babel-plugin-transform-es2015-for-of "^6.22.0" 553 | babel-plugin-transform-es2015-function-name "^6.24.1" 554 | babel-plugin-transform-es2015-literals "^6.22.0" 555 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 556 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 557 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 558 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 559 | babel-plugin-transform-es2015-object-super "^6.24.1" 560 | babel-plugin-transform-es2015-parameters "^6.24.1" 561 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 562 | babel-plugin-transform-es2015-spread "^6.22.0" 563 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 564 | babel-plugin-transform-es2015-template-literals "^6.22.0" 565 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 566 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 567 | babel-plugin-transform-regenerator "^6.24.1" 568 | 569 | babel-register@^6.26.0: 570 | version "6.26.0" 571 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 572 | integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= 573 | dependencies: 574 | babel-core "^6.26.0" 575 | babel-runtime "^6.26.0" 576 | core-js "^2.5.0" 577 | home-or-tmp "^2.0.0" 578 | lodash "^4.17.4" 579 | mkdirp "^0.5.1" 580 | source-map-support "^0.4.15" 581 | 582 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 583 | version "6.26.0" 584 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 585 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 586 | dependencies: 587 | core-js "^2.4.0" 588 | regenerator-runtime "^0.11.0" 589 | 590 | babel-template@^6.24.1, babel-template@^6.26.0: 591 | version "6.26.0" 592 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 593 | integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= 594 | dependencies: 595 | babel-runtime "^6.26.0" 596 | babel-traverse "^6.26.0" 597 | babel-types "^6.26.0" 598 | babylon "^6.18.0" 599 | lodash "^4.17.4" 600 | 601 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: 602 | version "6.26.0" 603 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 604 | integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= 605 | dependencies: 606 | babel-code-frame "^6.26.0" 607 | babel-messages "^6.23.0" 608 | babel-runtime "^6.26.0" 609 | babel-types "^6.26.0" 610 | babylon "^6.18.0" 611 | debug "^2.6.8" 612 | globals "^9.18.0" 613 | invariant "^2.2.2" 614 | lodash "^4.17.4" 615 | 616 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: 617 | version "6.26.0" 618 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 619 | integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= 620 | dependencies: 621 | babel-runtime "^6.26.0" 622 | esutils "^2.0.2" 623 | lodash "^4.17.4" 624 | to-fast-properties "^1.0.3" 625 | 626 | babelify@^7.3.0: 627 | version "7.3.0" 628 | resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" 629 | integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= 630 | dependencies: 631 | babel-core "^6.0.14" 632 | object-assign "^4.0.0" 633 | 634 | babylon@^6.18.0: 635 | version "6.18.0" 636 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 637 | integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== 638 | 639 | balanced-match@^1.0.0: 640 | version "1.0.0" 641 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 642 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 643 | 644 | bcrypt-pbkdf@^1.0.0: 645 | version "1.0.2" 646 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 647 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 648 | dependencies: 649 | tweetnacl "^0.14.3" 650 | 651 | brace-expansion@^1.1.7: 652 | version "1.1.11" 653 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 654 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 655 | dependencies: 656 | balanced-match "^1.0.0" 657 | concat-map "0.0.1" 658 | 659 | browser-resolve@^1.7.0: 660 | version "1.11.3" 661 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 662 | integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 663 | dependencies: 664 | resolve "1.1.7" 665 | 666 | builtin-modules@^1.1.1: 667 | version "1.1.1" 668 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 669 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 670 | 671 | cached-path-relative@^1.0.0: 672 | version "1.0.2" 673 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" 674 | integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== 675 | 676 | caseless@~0.12.0: 677 | version "0.12.0" 678 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 679 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 680 | 681 | chalk@^1.1.1, chalk@^1.1.3: 682 | version "1.1.3" 683 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 684 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 685 | dependencies: 686 | ansi-styles "^2.2.1" 687 | escape-string-regexp "^1.0.2" 688 | has-ansi "^2.0.0" 689 | strip-ansi "^3.0.0" 690 | supports-color "^2.0.0" 691 | 692 | chalk@^2.0.0, chalk@^2.3.0: 693 | version "2.4.2" 694 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 695 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 696 | dependencies: 697 | ansi-styles "^3.2.1" 698 | escape-string-regexp "^1.0.5" 699 | supports-color "^5.3.0" 700 | 701 | color-convert@^1.9.0: 702 | version "1.9.3" 703 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 704 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 705 | dependencies: 706 | color-name "1.1.3" 707 | 708 | color-name@1.1.3: 709 | version "1.1.3" 710 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 711 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 712 | 713 | combined-stream@^1.0.6, combined-stream@~1.0.6: 714 | version "1.0.8" 715 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 716 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 717 | dependencies: 718 | delayed-stream "~1.0.0" 719 | 720 | commander@^2.12.1: 721 | version "2.20.3" 722 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 723 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 724 | 725 | concat-map@0.0.1: 726 | version "0.0.1" 727 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 728 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 729 | 730 | concat-stream@~1.5.0: 731 | version "1.5.2" 732 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" 733 | integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= 734 | dependencies: 735 | inherits "~2.0.1" 736 | readable-stream "~2.0.0" 737 | typedarray "~0.0.5" 738 | 739 | convert-source-map@^1.5.1: 740 | version "1.7.0" 741 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 742 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 743 | dependencies: 744 | safe-buffer "~5.1.1" 745 | 746 | core-js@^2.4.0, core-js@^2.5.0: 747 | version "2.6.10" 748 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" 749 | integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== 750 | 751 | core-util-is@1.0.2, core-util-is@~1.0.0: 752 | version "1.0.2" 753 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 754 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 755 | 756 | couchdb-client@^1.0.14: 757 | version "1.0.14" 758 | resolved "https://registry.yarnpkg.com/couchdb-client/-/couchdb-client-1.0.14.tgz#cf89b73fe8b5bb3d07a3bd6e9a30a4cbbbfa1b91" 759 | integrity sha1-z4m3P+i1uz0Ho71umjCky7v6G5E= 760 | dependencies: 761 | request "^2.72.0" 762 | 763 | dashdash@^1.12.0: 764 | version "1.14.1" 765 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 766 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 767 | dependencies: 768 | assert-plus "^1.0.0" 769 | 770 | debug@^2.6.8, debug@^2.6.9: 771 | version "2.6.9" 772 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 773 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 774 | dependencies: 775 | ms "2.0.0" 776 | 777 | deep-equal@~1.0.1: 778 | version "1.0.1" 779 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 780 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= 781 | 782 | define-properties@^1.1.2, define-properties@^1.1.3: 783 | version "1.1.3" 784 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 785 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 786 | dependencies: 787 | object-keys "^1.0.12" 788 | 789 | defined@^1.0.0, defined@~1.0.0: 790 | version "1.0.0" 791 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 792 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 793 | 794 | delayed-stream@~1.0.0: 795 | version "1.0.0" 796 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 797 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 798 | 799 | deps-sort@^2.0.0: 800 | version "2.0.1" 801 | resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" 802 | integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== 803 | dependencies: 804 | JSONStream "^1.0.3" 805 | shasum-object "^1.0.0" 806 | subarg "^1.0.0" 807 | through2 "^2.0.0" 808 | 809 | detect-indent@^4.0.0: 810 | version "4.0.0" 811 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 812 | integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= 813 | dependencies: 814 | repeating "^2.0.0" 815 | 816 | detective@^4.0.0: 817 | version "4.7.1" 818 | resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" 819 | integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== 820 | dependencies: 821 | acorn "^5.2.1" 822 | defined "^1.0.0" 823 | 824 | diff@^2.2.1: 825 | version "2.2.3" 826 | resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" 827 | integrity sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k= 828 | 829 | diff@^4.0.1: 830 | version "4.0.1" 831 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 832 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 833 | 834 | doctrine@^0.7.2: 835 | version "0.7.2" 836 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" 837 | integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= 838 | dependencies: 839 | esutils "^1.1.6" 840 | isarray "0.0.1" 841 | 842 | duplexer2@^0.1.2, duplexer2@~0.1.0: 843 | version "0.1.4" 844 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 845 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 846 | dependencies: 847 | readable-stream "^2.0.2" 848 | 849 | duplexer@^0.1.1: 850 | version "0.1.1" 851 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 852 | integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= 853 | 854 | ecc-jsbn@~0.1.1: 855 | version "0.1.2" 856 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 857 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 858 | dependencies: 859 | jsbn "~0.1.0" 860 | safer-buffer "^2.1.0" 861 | 862 | end-of-stream@^1.1.0: 863 | version "1.4.4" 864 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 865 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 866 | dependencies: 867 | once "^1.4.0" 868 | 869 | es-abstract@^1.5.0: 870 | version "1.16.0" 871 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" 872 | integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== 873 | dependencies: 874 | es-to-primitive "^1.2.0" 875 | function-bind "^1.1.1" 876 | has "^1.0.3" 877 | has-symbols "^1.0.0" 878 | is-callable "^1.1.4" 879 | is-regex "^1.0.4" 880 | object-inspect "^1.6.0" 881 | object-keys "^1.1.1" 882 | string.prototype.trimleft "^2.1.0" 883 | string.prototype.trimright "^2.1.0" 884 | 885 | es-to-primitive@^1.2.0: 886 | version "1.2.0" 887 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 888 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 889 | dependencies: 890 | is-callable "^1.1.4" 891 | is-date-object "^1.0.1" 892 | is-symbol "^1.0.2" 893 | 894 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 895 | version "1.0.5" 896 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 897 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 898 | 899 | esprima@^4.0.0: 900 | version "4.0.1" 901 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 902 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 903 | 904 | esutils@^1.1.6: 905 | version "1.1.6" 906 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" 907 | integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= 908 | 909 | esutils@^2.0.2: 910 | version "2.0.3" 911 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 912 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 913 | 914 | events-to-array@^1.0.1: 915 | version "1.1.2" 916 | resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" 917 | integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= 918 | 919 | extend@~3.0.2: 920 | version "3.0.2" 921 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 922 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 923 | 924 | extsprintf@1.3.0: 925 | version "1.3.0" 926 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 927 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 928 | 929 | extsprintf@^1.2.0: 930 | version "1.4.0" 931 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 932 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 933 | 934 | falafel@^1.2.0: 935 | version "1.2.0" 936 | resolved "https://registry.yarnpkg.com/falafel/-/falafel-1.2.0.tgz#c18d24ef5091174a497f318cd24b026a25cddab4" 937 | integrity sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ= 938 | dependencies: 939 | acorn "^1.0.3" 940 | foreach "^2.0.5" 941 | isarray "0.0.1" 942 | object-keys "^1.0.6" 943 | 944 | fast-deep-equal@^2.0.1: 945 | version "2.0.1" 946 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 947 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 948 | 949 | fast-json-stable-stringify@^2.0.0: 950 | version "2.0.0" 951 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 952 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 953 | 954 | fast-safe-stringify@^2.0.7: 955 | version "2.0.7" 956 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" 957 | integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== 958 | 959 | figures@^1.4.0: 960 | version "1.7.0" 961 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 962 | integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= 963 | dependencies: 964 | escape-string-regexp "^1.0.5" 965 | object-assign "^4.1.0" 966 | 967 | for-each@~0.3.3: 968 | version "0.3.3" 969 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 970 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 971 | dependencies: 972 | is-callable "^1.1.3" 973 | 974 | foreach@^2.0.5: 975 | version "2.0.5" 976 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 977 | integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= 978 | 979 | forever-agent@~0.6.1: 980 | version "0.6.1" 981 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 982 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 983 | 984 | form-data@~2.3.2: 985 | version "2.3.3" 986 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 987 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 988 | dependencies: 989 | asynckit "^0.4.0" 990 | combined-stream "^1.0.6" 991 | mime-types "^2.1.12" 992 | 993 | fs.realpath@^1.0.0: 994 | version "1.0.0" 995 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 996 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 997 | 998 | function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: 999 | version "1.1.1" 1000 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1001 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1002 | 1003 | gamma@^1.0.0: 1004 | version "1.0.0" 1005 | resolved "https://registry.yarnpkg.com/gamma/-/gamma-1.0.0.tgz#983c1c939fe23d932701585711e1d9a430cb74cb" 1006 | integrity sha1-mDwck5/iPZMnAVhXEeHZpDDLdMs= 1007 | 1008 | getpass@^0.1.1: 1009 | version "0.1.7" 1010 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1011 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 1012 | dependencies: 1013 | assert-plus "^1.0.0" 1014 | 1015 | glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.4: 1016 | version "7.1.6" 1017 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1018 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1019 | dependencies: 1020 | fs.realpath "^1.0.0" 1021 | inflight "^1.0.4" 1022 | inherits "2" 1023 | minimatch "^3.0.4" 1024 | once "^1.3.0" 1025 | path-is-absolute "^1.0.0" 1026 | 1027 | globals@^9.18.0: 1028 | version "9.18.0" 1029 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1030 | integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== 1031 | 1032 | har-schema@^2.0.0: 1033 | version "2.0.0" 1034 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1035 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 1036 | 1037 | har-validator@~5.1.0: 1038 | version "5.1.3" 1039 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 1040 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 1041 | dependencies: 1042 | ajv "^6.5.5" 1043 | har-schema "^2.0.0" 1044 | 1045 | has-ansi@^2.0.0: 1046 | version "2.0.0" 1047 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1048 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 1049 | dependencies: 1050 | ansi-regex "^2.0.0" 1051 | 1052 | has-flag@^3.0.0: 1053 | version "3.0.0" 1054 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1055 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1056 | 1057 | has-symbols@^1.0.0: 1058 | version "1.0.0" 1059 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1060 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 1061 | 1062 | has@^1.0.1, has@^1.0.3, has@~1.0.3: 1063 | version "1.0.3" 1064 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1065 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1066 | dependencies: 1067 | function-bind "^1.1.1" 1068 | 1069 | home-or-tmp@^2.0.0: 1070 | version "2.0.0" 1071 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1072 | integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= 1073 | dependencies: 1074 | os-homedir "^1.0.0" 1075 | os-tmpdir "^1.0.1" 1076 | 1077 | http-signature@~1.2.0: 1078 | version "1.2.0" 1079 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1080 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 1081 | dependencies: 1082 | assert-plus "^1.0.0" 1083 | jsprim "^1.2.2" 1084 | sshpk "^1.7.0" 1085 | 1086 | inflight@^1.0.4: 1087 | version "1.0.6" 1088 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1089 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1090 | dependencies: 1091 | once "^1.3.0" 1092 | wrappy "1" 1093 | 1094 | inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: 1095 | version "2.0.4" 1096 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1097 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1098 | 1099 | invariant@^2.2.2: 1100 | version "2.2.4" 1101 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1102 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 1103 | dependencies: 1104 | loose-envify "^1.0.0" 1105 | 1106 | is-callable@^1.1.3, is-callable@^1.1.4: 1107 | version "1.1.4" 1108 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1109 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1110 | 1111 | is-date-object@^1.0.1: 1112 | version "1.0.1" 1113 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1114 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 1115 | 1116 | is-finite@^1.0.0, is-finite@^1.0.1: 1117 | version "1.0.2" 1118 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1119 | integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 1120 | dependencies: 1121 | number-is-nan "^1.0.0" 1122 | 1123 | is-regex@^1.0.4: 1124 | version "1.0.4" 1125 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1126 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 1127 | dependencies: 1128 | has "^1.0.1" 1129 | 1130 | is-symbol@^1.0.2: 1131 | version "1.0.2" 1132 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 1133 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 1134 | dependencies: 1135 | has-symbols "^1.0.0" 1136 | 1137 | is-typedarray@~1.0.0: 1138 | version "1.0.0" 1139 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1140 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1141 | 1142 | isarray@0.0.1: 1143 | version "0.0.1" 1144 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1145 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 1146 | 1147 | isarray@~1.0.0: 1148 | version "1.0.0" 1149 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1150 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1151 | 1152 | isstream@~0.1.2: 1153 | version "0.1.2" 1154 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1155 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1156 | 1157 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1158 | version "4.0.0" 1159 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1160 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1161 | 1162 | js-tokens@^3.0.2: 1163 | version "3.0.2" 1164 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1165 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 1166 | 1167 | js-yaml@^3.13.1, js-yaml@^3.2.7: 1168 | version "3.13.1" 1169 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1170 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1171 | dependencies: 1172 | argparse "^1.0.7" 1173 | esprima "^4.0.0" 1174 | 1175 | jsbn@~0.1.0: 1176 | version "0.1.1" 1177 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1178 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1179 | 1180 | jsesc@^1.3.0: 1181 | version "1.3.0" 1182 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1183 | integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= 1184 | 1185 | jsesc@~0.5.0: 1186 | version "0.5.0" 1187 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1188 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1189 | 1190 | json-schema-traverse@^0.4.1: 1191 | version "0.4.1" 1192 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1193 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1194 | 1195 | json-schema@0.2.3: 1196 | version "0.2.3" 1197 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1198 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1199 | 1200 | json-stringify-safe@~5.0.1: 1201 | version "5.0.1" 1202 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1203 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1204 | 1205 | json5@^0.5.1: 1206 | version "0.5.1" 1207 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1208 | integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= 1209 | 1210 | jsonparse@^1.2.0: 1211 | version "1.3.1" 1212 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1213 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 1214 | 1215 | jsprim@^1.2.2: 1216 | version "1.4.1" 1217 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1218 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 1219 | dependencies: 1220 | assert-plus "1.0.0" 1221 | extsprintf "1.3.0" 1222 | json-schema "0.2.3" 1223 | verror "1.10.0" 1224 | 1225 | lodash@^4.17.4: 1226 | version "4.17.21" 1227 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1228 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1229 | 1230 | loose-envify@^1.0.0: 1231 | version "1.4.0" 1232 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1233 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1234 | dependencies: 1235 | js-tokens "^3.0.0 || ^4.0.0" 1236 | 1237 | mime-db@1.40.0: 1238 | version "1.40.0" 1239 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 1240 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 1241 | 1242 | mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19: 1243 | version "2.1.24" 1244 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 1245 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 1246 | dependencies: 1247 | mime-db "1.40.0" 1248 | 1249 | minimatch@^3.0.4: 1250 | version "3.0.4" 1251 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1252 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1253 | dependencies: 1254 | brace-expansion "^1.1.7" 1255 | 1256 | minimist@0.0.8: 1257 | version "0.0.8" 1258 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1259 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1260 | 1261 | minimist@^1.1.0, minimist@^1.2.0, minimist@~1.2.0: 1262 | version "1.2.6" 1263 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1264 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1265 | 1266 | mkdirp@^0.5.1: 1267 | version "0.5.1" 1268 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1269 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1270 | dependencies: 1271 | minimist "0.0.8" 1272 | 1273 | module-deps@^4.1.1: 1274 | version "4.1.1" 1275 | resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" 1276 | integrity sha1-IyFYM/HaE/1gbMuAh7RIUty4If0= 1277 | dependencies: 1278 | JSONStream "^1.0.3" 1279 | browser-resolve "^1.7.0" 1280 | cached-path-relative "^1.0.0" 1281 | concat-stream "~1.5.0" 1282 | defined "^1.0.0" 1283 | detective "^4.0.0" 1284 | duplexer2 "^0.1.2" 1285 | inherits "^2.0.1" 1286 | parents "^1.0.0" 1287 | readable-stream "^2.0.2" 1288 | resolve "^1.1.3" 1289 | stream-combiner2 "^1.1.1" 1290 | subarg "^1.0.0" 1291 | through2 "^2.0.0" 1292 | xtend "^4.0.0" 1293 | 1294 | ms@2.0.0: 1295 | version "2.0.0" 1296 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1297 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1298 | 1299 | node-couchdb@^1.2.0: 1300 | version "1.3.0" 1301 | resolved "https://registry.yarnpkg.com/node-couchdb/-/node-couchdb-1.3.0.tgz#a0b335d21f47806d639980878a8ea3459a74eb96" 1302 | integrity sha1-oLM10h9HgG1jmYCHio6jRZp065Y= 1303 | dependencies: 1304 | request "^2.79.0" 1305 | 1306 | number-is-nan@^1.0.0: 1307 | version "1.0.1" 1308 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1309 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1310 | 1311 | oauth-sign@~0.9.0: 1312 | version "0.9.0" 1313 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1314 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1315 | 1316 | object-assign@^4.0.0, object-assign@^4.1.0: 1317 | version "4.1.1" 1318 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1319 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1320 | 1321 | object-inspect@^1.6.0, object-inspect@~1.6.0: 1322 | version "1.6.0" 1323 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" 1324 | integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== 1325 | 1326 | object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: 1327 | version "1.1.1" 1328 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1329 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1330 | 1331 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1332 | version "1.4.0" 1333 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1334 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1335 | dependencies: 1336 | wrappy "1" 1337 | 1338 | os-homedir@^1.0.0: 1339 | version "1.0.2" 1340 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1341 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1342 | 1343 | os-tmpdir@^1.0.1: 1344 | version "1.0.2" 1345 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1346 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1347 | 1348 | parents@^1.0.0: 1349 | version "1.0.1" 1350 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" 1351 | integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= 1352 | dependencies: 1353 | path-platform "~0.11.15" 1354 | 1355 | parse-ms@^1.0.0: 1356 | version "1.0.1" 1357 | resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" 1358 | integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= 1359 | 1360 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1361 | version "1.0.1" 1362 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1363 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1364 | 1365 | path-parse@^1.0.6: 1366 | version "1.0.6" 1367 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1368 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1369 | 1370 | path-platform@~0.11.15: 1371 | version "0.11.15" 1372 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 1373 | integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= 1374 | 1375 | performance-now@^2.1.0: 1376 | version "2.1.0" 1377 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1378 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1379 | 1380 | plur@^1.0.0: 1381 | version "1.0.0" 1382 | resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" 1383 | integrity sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY= 1384 | 1385 | pretty-ms@^2.1.0: 1386 | version "2.1.0" 1387 | resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" 1388 | integrity sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw= 1389 | dependencies: 1390 | is-finite "^1.0.1" 1391 | parse-ms "^1.0.0" 1392 | plur "^1.0.0" 1393 | 1394 | private@^0.1.6, private@^0.1.8: 1395 | version "0.1.8" 1396 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1397 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== 1398 | 1399 | process-nextick-args@~1.0.6: 1400 | version "1.0.7" 1401 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1402 | integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= 1403 | 1404 | process-nextick-args@~2.0.0: 1405 | version "2.0.1" 1406 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1407 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1408 | 1409 | psl@^1.1.24: 1410 | version "1.4.0" 1411 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" 1412 | integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== 1413 | 1414 | pump@^1.0.2: 1415 | version "1.0.3" 1416 | resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" 1417 | integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== 1418 | dependencies: 1419 | end-of-stream "^1.1.0" 1420 | once "^1.3.1" 1421 | 1422 | punycode@^1.4.1: 1423 | version "1.4.1" 1424 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1425 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 1426 | 1427 | punycode@^2.1.0: 1428 | version "2.1.1" 1429 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1430 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1431 | 1432 | qs@~6.5.2: 1433 | version "6.5.2" 1434 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1435 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1436 | 1437 | readable-stream@^2, readable-stream@^2.0.2, readable-stream@~2.3.6: 1438 | version "2.3.6" 1439 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1440 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1441 | dependencies: 1442 | core-util-is "~1.0.0" 1443 | inherits "~2.0.3" 1444 | isarray "~1.0.0" 1445 | process-nextick-args "~2.0.0" 1446 | safe-buffer "~5.1.1" 1447 | string_decoder "~1.1.1" 1448 | util-deprecate "~1.0.1" 1449 | 1450 | readable-stream@~2.0.0: 1451 | version "2.0.6" 1452 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 1453 | integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= 1454 | dependencies: 1455 | core-util-is "~1.0.0" 1456 | inherits "~2.0.1" 1457 | isarray "~1.0.0" 1458 | process-nextick-args "~1.0.6" 1459 | string_decoder "~0.10.x" 1460 | util-deprecate "~1.0.1" 1461 | 1462 | regenerate@^1.2.1: 1463 | version "1.4.0" 1464 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 1465 | integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== 1466 | 1467 | regenerator-runtime@^0.11.0: 1468 | version "0.11.1" 1469 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 1470 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 1471 | 1472 | regenerator-transform@^0.10.0: 1473 | version "0.10.1" 1474 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 1475 | integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== 1476 | dependencies: 1477 | babel-runtime "^6.18.0" 1478 | babel-types "^6.19.0" 1479 | private "^0.1.6" 1480 | 1481 | regexpu-core@^2.0.0: 1482 | version "2.0.0" 1483 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 1484 | integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= 1485 | dependencies: 1486 | regenerate "^1.2.1" 1487 | regjsgen "^0.2.0" 1488 | regjsparser "^0.1.4" 1489 | 1490 | regjsgen@^0.2.0: 1491 | version "0.2.0" 1492 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1493 | integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= 1494 | 1495 | regjsparser@^0.1.4: 1496 | version "0.1.5" 1497 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1498 | integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= 1499 | dependencies: 1500 | jsesc "~0.5.0" 1501 | 1502 | repeating@^2.0.0: 1503 | version "2.0.1" 1504 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1505 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 1506 | dependencies: 1507 | is-finite "^1.0.0" 1508 | 1509 | request@^2.72.0, request@^2.79.0: 1510 | version "2.88.0" 1511 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 1512 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 1513 | dependencies: 1514 | aws-sign2 "~0.7.0" 1515 | aws4 "^1.8.0" 1516 | caseless "~0.12.0" 1517 | combined-stream "~1.0.6" 1518 | extend "~3.0.2" 1519 | forever-agent "~0.6.1" 1520 | form-data "~2.3.2" 1521 | har-validator "~5.1.0" 1522 | http-signature "~1.2.0" 1523 | is-typedarray "~1.0.0" 1524 | isstream "~0.1.2" 1525 | json-stringify-safe "~5.0.1" 1526 | mime-types "~2.1.19" 1527 | oauth-sign "~0.9.0" 1528 | performance-now "^2.1.0" 1529 | qs "~6.5.2" 1530 | safe-buffer "^5.1.2" 1531 | tough-cookie "~2.4.3" 1532 | tunnel-agent "^0.6.0" 1533 | uuid "^3.3.2" 1534 | 1535 | resolve@1.1.7: 1536 | version "1.1.7" 1537 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1538 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 1539 | 1540 | resolve@^1.1.3, resolve@^1.3.2: 1541 | version "1.12.0" 1542 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" 1543 | integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== 1544 | dependencies: 1545 | path-parse "^1.0.6" 1546 | 1547 | resolve@~1.11.1: 1548 | version "1.11.1" 1549 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" 1550 | integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== 1551 | dependencies: 1552 | path-parse "^1.0.6" 1553 | 1554 | resumer@~0.0.0: 1555 | version "0.0.0" 1556 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 1557 | integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= 1558 | dependencies: 1559 | through "~2.3.4" 1560 | 1561 | rimraf@^2.6.1: 1562 | version "2.7.1" 1563 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1564 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1565 | dependencies: 1566 | glob "^7.1.3" 1567 | 1568 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1569 | version "5.2.0" 1570 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1571 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1572 | 1573 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1574 | version "5.1.2" 1575 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1576 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1577 | 1578 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1579 | version "2.1.2" 1580 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1581 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1582 | 1583 | semver@5.3.x: 1584 | version "5.3.0" 1585 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1586 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= 1587 | 1588 | semver@^5.3.0: 1589 | version "5.7.1" 1590 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1591 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1592 | 1593 | shasum-object@^1.0.0: 1594 | version "1.0.0" 1595 | resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" 1596 | integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== 1597 | dependencies: 1598 | fast-safe-stringify "^2.0.7" 1599 | 1600 | slash@^1.0.0: 1601 | version "1.0.0" 1602 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 1603 | integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= 1604 | 1605 | source-map-support@^0.4.15: 1606 | version "0.4.18" 1607 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 1608 | integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== 1609 | dependencies: 1610 | source-map "^0.5.6" 1611 | 1612 | source-map@^0.5.6, source-map@^0.5.7: 1613 | version "0.5.7" 1614 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1615 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1616 | 1617 | sprintf-js@~1.0.2: 1618 | version "1.0.3" 1619 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1620 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1621 | 1622 | sshpk@^1.7.0: 1623 | version "1.16.1" 1624 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1625 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1626 | dependencies: 1627 | asn1 "~0.2.3" 1628 | assert-plus "^1.0.0" 1629 | bcrypt-pbkdf "^1.0.0" 1630 | dashdash "^1.12.0" 1631 | ecc-jsbn "~0.1.1" 1632 | getpass "^0.1.1" 1633 | jsbn "~0.1.0" 1634 | safer-buffer "^2.0.2" 1635 | tweetnacl "~0.14.0" 1636 | 1637 | stream-combiner2@^1.1.1: 1638 | version "1.1.1" 1639 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" 1640 | integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= 1641 | dependencies: 1642 | duplexer2 "~0.1.0" 1643 | readable-stream "^2.0.2" 1644 | 1645 | stream-to-array@^2.3.0: 1646 | version "2.3.0" 1647 | resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" 1648 | integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= 1649 | dependencies: 1650 | any-promise "^1.1.0" 1651 | 1652 | string.prototype.trim@~1.1.2: 1653 | version "1.1.2" 1654 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 1655 | integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= 1656 | dependencies: 1657 | define-properties "^1.1.2" 1658 | es-abstract "^1.5.0" 1659 | function-bind "^1.0.2" 1660 | 1661 | string.prototype.trimleft@^2.1.0: 1662 | version "2.1.0" 1663 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" 1664 | integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== 1665 | dependencies: 1666 | define-properties "^1.1.3" 1667 | function-bind "^1.1.1" 1668 | 1669 | string.prototype.trimright@^2.1.0: 1670 | version "2.1.0" 1671 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" 1672 | integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== 1673 | dependencies: 1674 | define-properties "^1.1.3" 1675 | function-bind "^1.1.1" 1676 | 1677 | string_decoder@~0.10.x: 1678 | version "0.10.31" 1679 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1680 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= 1681 | 1682 | string_decoder@~1.1.1: 1683 | version "1.1.1" 1684 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1685 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1686 | dependencies: 1687 | safe-buffer "~5.1.0" 1688 | 1689 | strip-ansi@^3.0.0: 1690 | version "3.0.1" 1691 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1692 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1693 | dependencies: 1694 | ansi-regex "^2.0.0" 1695 | 1696 | subarg@^1.0.0: 1697 | version "1.0.0" 1698 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" 1699 | integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= 1700 | dependencies: 1701 | minimist "^1.1.0" 1702 | 1703 | supports-color@^2.0.0: 1704 | version "2.0.0" 1705 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1706 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1707 | 1708 | supports-color@^5.3.0: 1709 | version "5.5.0" 1710 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1711 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1712 | dependencies: 1713 | has-flag "^3.0.0" 1714 | 1715 | tap-diff@^0.1.1: 1716 | version "0.1.1" 1717 | resolved "https://registry.yarnpkg.com/tap-diff/-/tap-diff-0.1.1.tgz#8fbf3333d85643feea1bf1759b90820b04a37ddf" 1718 | integrity sha1-j78zM9hWQ/7qG/F1m5CCCwSjfd8= 1719 | dependencies: 1720 | chalk "^1.1.1" 1721 | diff "^2.2.1" 1722 | duplexer "^0.1.1" 1723 | figures "^1.4.0" 1724 | pretty-ms "^2.1.0" 1725 | tap-parser "^1.2.2" 1726 | through2 "^2.0.0" 1727 | 1728 | tap-parser@^1.2.2: 1729 | version "1.3.2" 1730 | resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-1.3.2.tgz#120c5089c88c3c8a793ef288867de321e18f8c22" 1731 | integrity sha1-EgxQiciMPIp5PvKIhn3jIeGPjCI= 1732 | dependencies: 1733 | events-to-array "^1.0.1" 1734 | inherits "~2.0.1" 1735 | js-yaml "^3.2.7" 1736 | optionalDependencies: 1737 | readable-stream "^2" 1738 | 1739 | tape@^4.8.0: 1740 | version "4.11.0" 1741 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1" 1742 | integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA== 1743 | dependencies: 1744 | deep-equal "~1.0.1" 1745 | defined "~1.0.0" 1746 | for-each "~0.3.3" 1747 | function-bind "~1.1.1" 1748 | glob "~7.1.4" 1749 | has "~1.0.3" 1750 | inherits "~2.0.4" 1751 | minimist "~1.2.0" 1752 | object-inspect "~1.6.0" 1753 | resolve "~1.11.1" 1754 | resumer "~0.0.0" 1755 | string.prototype.trim "~1.1.2" 1756 | through "~2.3.8" 1757 | 1758 | through2@^2.0.0: 1759 | version "2.0.5" 1760 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 1761 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 1762 | dependencies: 1763 | readable-stream "~2.3.6" 1764 | xtend "~4.0.1" 1765 | 1766 | "through@>=2.2.7 <3", through@~2.3.4, through@~2.3.8: 1767 | version "2.3.8" 1768 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1769 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1770 | 1771 | to-fast-properties@^1.0.3: 1772 | version "1.0.3" 1773 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 1774 | integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= 1775 | 1776 | toposort@^1.0.3: 1777 | version "1.0.7" 1778 | resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" 1779 | integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= 1780 | 1781 | tough-cookie@~2.4.3: 1782 | version "2.4.3" 1783 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 1784 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 1785 | dependencies: 1786 | psl "^1.1.24" 1787 | punycode "^1.4.1" 1788 | 1789 | transform-deps@^2.0.0: 1790 | version "2.0.0" 1791 | resolved "https://registry.yarnpkg.com/transform-deps/-/transform-deps-2.0.0.tgz#0afdb63aa5e589631cccd3c19823f3aa591ae559" 1792 | integrity sha1-Cv22OqXliWMczNPBmCPzqlka5Vk= 1793 | dependencies: 1794 | falafel "^1.2.0" 1795 | xtend "^4.0.0" 1796 | 1797 | trim-right@^1.0.1: 1798 | version "1.0.1" 1799 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1800 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 1801 | 1802 | tslib@^1.0.0, tslib@^1.8.0, tslib@^1.8.1: 1803 | version "1.10.0" 1804 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 1805 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 1806 | 1807 | tslint-eslint-rules@^4.1.1: 1808 | version "4.1.1" 1809 | resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz#7c30e7882f26bc276bff91d2384975c69daf88ba" 1810 | integrity sha1-fDDniC8mvCdr/5HSOEl1xp2viLo= 1811 | dependencies: 1812 | doctrine "^0.7.2" 1813 | tslib "^1.0.0" 1814 | tsutils "^1.4.0" 1815 | 1816 | tslint@^5.6.0: 1817 | version "5.20.1" 1818 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" 1819 | integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== 1820 | dependencies: 1821 | "@babel/code-frame" "^7.0.0" 1822 | builtin-modules "^1.1.1" 1823 | chalk "^2.3.0" 1824 | commander "^2.12.1" 1825 | diff "^4.0.1" 1826 | glob "^7.1.1" 1827 | js-yaml "^3.13.1" 1828 | minimatch "^3.0.4" 1829 | mkdirp "^0.5.1" 1830 | resolve "^1.3.2" 1831 | semver "^5.3.0" 1832 | tslib "^1.8.0" 1833 | tsutils "^2.29.0" 1834 | 1835 | tsutils@^1.4.0: 1836 | version "1.9.1" 1837 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0" 1838 | integrity sha1-ufmrROVa+WgYMdXyjQrur1x1DLA= 1839 | 1840 | tsutils@^2.29.0: 1841 | version "2.29.0" 1842 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 1843 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 1844 | dependencies: 1845 | tslib "^1.8.1" 1846 | 1847 | tunnel-agent@^0.6.0: 1848 | version "0.6.0" 1849 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1850 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1851 | dependencies: 1852 | safe-buffer "^5.0.1" 1853 | 1854 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1855 | version "0.14.5" 1856 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1857 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1858 | 1859 | typedarray@~0.0.5: 1860 | version "0.0.6" 1861 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1862 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1863 | 1864 | typescript@^2.4.2: 1865 | version "2.9.2" 1866 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" 1867 | integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== 1868 | 1869 | uniq@^1.0.1: 1870 | version "1.0.1" 1871 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 1872 | integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 1873 | 1874 | uri-js@^4.2.2: 1875 | version "4.2.2" 1876 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1877 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1878 | dependencies: 1879 | punycode "^2.1.0" 1880 | 1881 | util-deprecate@~1.0.1: 1882 | version "1.0.2" 1883 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1884 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1885 | 1886 | uuid@^3.3.2: 1887 | version "3.3.3" 1888 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" 1889 | integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== 1890 | 1891 | verror@1.10.0: 1892 | version "1.10.0" 1893 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1894 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1895 | dependencies: 1896 | assert-plus "^1.0.0" 1897 | core-util-is "1.0.2" 1898 | extsprintf "^1.2.0" 1899 | 1900 | wrappy@1: 1901 | version "1.0.2" 1902 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1903 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1904 | 1905 | xtend@^4.0.0, xtend@~4.0.1: 1906 | version "4.0.2" 1907 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1908 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1909 | 1910 | xyz@^2.1.0: 1911 | version "2.1.0" 1912 | resolved "https://registry.yarnpkg.com/xyz/-/xyz-2.1.0.tgz#c3ca897f156d2178bd818cd503f94b0a3b52fa6c" 1913 | integrity sha1-w8qJfxVtIXi9gYzVA/lLCjtS+mw= 1914 | dependencies: 1915 | semver "5.3.x" 1916 | --------------------------------------------------------------------------------