From a5d185485bb72ef88e5599f55cdfbd7077132608 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 5 Feb 2017 02:20:57 -0800 Subject: [PATCH 01/10] Progress --- .gitignore | 2 + registry/tools/acorn/index.js | 93 ++ registry/tools/acorn/package.json | 10 + registry/tools/babylon/v5/index.js | 111 +++ registry/tools/babylon/v5/package.json | 8 + registry/tools/babylon/v6/index.js | 87 ++ registry/tools/babylon/v6/package.json | 8 + server/build-worker.js | 44 + server/build.js | 206 +++++ server/constants.js | 13 +- server/handlers/parse.js | 5 +- server/handlers/tools.js | 119 +++ server/index.js | 18 +- server/logger.js | 19 + server/package.json | 22 +- server/yarn.lock | 1131 +++++++++++++++++++++++- 16 files changed, 1878 insertions(+), 18 deletions(-) create mode 100644 registry/tools/acorn/index.js create mode 100644 registry/tools/acorn/package.json create mode 100644 registry/tools/babylon/v5/index.js create mode 100644 registry/tools/babylon/v5/package.json create mode 100644 registry/tools/babylon/v6/index.js create mode 100644 registry/tools/babylon/v6/package.json create mode 100644 server/build-worker.js create mode 100755 server/build.js create mode 100644 server/handlers/tools.js create mode 100644 server/logger.js diff --git a/.gitignore b/.gitignore index 4747accc1..5f2fb9a4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /out node_modules +/bundles +/registry/**/.* diff --git a/registry/tools/acorn/index.js b/registry/tools/acorn/index.js new file mode 100644 index 000000000..cf5cd7578 --- /dev/null +++ b/registry/tools/acorn/index.js @@ -0,0 +1,93 @@ +import React from 'react'; +//import defaultParserInterface from './utils/defaultESTreeParserInterface'; +import pkg from 'acorn/package.json'; +import acorn from 'acorn'; +import acornLoose from 'acorn/dist/acorn_loose'; +import jsxInject from 'acorn-jsx/inject'; +import SettingsRenderer from 'SettingsRenderer'; + +const ID = 'acorn'; +const defaultOptions = { + ecmaVersion: 7, + sourceType: 'module', + allowReserved: false, + allowReturnOutsideFunction: false, + allowImportExportEverywhere: false, + allowHashBang: false, + locations: false, + loose: false, + ranges: false, + preserveParens: false, + 'plugins.jsx': true, +}; + +const settingsConfiguration = { + fields: [ + ['ecmaVersion', [3, 5, 6, 7, 8], x => Number(x)], + ['sourceType', ['script', 'module']], + 'allowReserved', + 'allowReturnOutsideFunction', + 'allowImportExportEverywhere', + 'allowHashBang', + 'locations', + 'loose', + 'ranges', + 'preserveParens', + 'plugins.jsx', + ], +}; + +export default { + ...defaultParserInterface, + + id: ID, + displayName: ID, + version: `${pkg.version}`, + homepage: pkg.homepage, + locationProps: new Set(['range', 'loc', 'start', 'end']), + + loadParser(callback) { + callback({ + acorn: jsxInject(acorn), + acornLoose, + }); + }, + + parse(parsers, code, options={}) { + options = Object.assign({}, defaultOptions, options); + const parser = options.loose ? + parsers.acornLoose.parse_dammit : + parsers.acorn.parse; + + // put deep option into correspondent place + return parser(code, { + ...options, + plugins: options['plugins.jsx'] && !options.loose ? { jsx: true } : {}, + }); + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + }, + + renderSettings(parserSettings, onChange) { + return ( +
+

+ + Option descriptions + +

+ +
+ ); + }, +}; diff --git a/registry/tools/acorn/package.json b/registry/tools/acorn/package.json new file mode 100644 index 000000000..caa82de90 --- /dev/null +++ b/registry/tools/acorn/package.json @@ -0,0 +1,10 @@ +{ + "name": "acorn", + "version": "1.0.0", + "private": true, + "dependencies": { + "acorn": "^4.0.0", + "acorn-jsx": "^3.0.1" + } +} + diff --git a/registry/tools/babylon/v5/index.js b/registry/tools/babylon/v5/index.js new file mode 100644 index 000000000..e78b92e27 --- /dev/null +++ b/registry/tools/babylon/v5/index.js @@ -0,0 +1,111 @@ +import React from 'react'; +// import defaultParserInterface from './utils/defaultESTreeParserInterface'; +import pkg from 'babylon/package.json'; +import babylon from 'babylon'; +import SettingsRenderer from 'SettingsRenderer'; + +const ID = 'babylon'; +const defaultOptions = { + sourceType: 'module', + allowReserved: false, + allowReturnOutsideFunction: false, + strictMode: false, + + features: { + 'es7.asyncFunctions': true, + 'es7.classProperties': true, + 'es7.comprehensions': true, + 'es7.decorators': true, + 'es7.exportExtensions': true, + 'es7.functionBind': true, + 'es7.objectRestSpread': true, + 'es7.trailingFunctionCommas': true, + }, + + plugins: { jsx: true, flow: true }, +}; + +const parserSettingsConfiguration = { + fields: [ + ['sourceType', ['module', 'script']], + 'allowReserved', + 'allowReturnOutsideFunction', + 'strictMode', + { + key: 'features', + title: 'Features', + fields: Object.keys(defaultOptions.features), + settings: settings => settings.features || {...defaultOptions.features}, + }, + { + key: 'plugins', + title: 'Plugins', + fields: Object.keys(defaultOptions.plugins), + settings: settings => settings.plugins || {...defaultOptions.plugins}, + values: plugins => Object.keys(defaultOptions.plugins).reduce( + (obj, name) => ((obj[name] = name in plugins), obj), + {} + ), + update: (plugins, name, value) => { + if (value) { + return {...plugins, [name]: true}; + } + plugins = {...plugins}; + delete plugins[name]; + return plugins; + }, + }, + ], +}; + +export default { + //...defaultParserInterface, + + id: ID, + displayName: ID, + version: pkg.version, + homepage: pkg.homepage, + locationProps: new Set(['loc', 'start', 'end']), + + loadParser(callback) { + callback(babylon); + }, + + parse(babylon, code, parserSettings) { + return babylon.parse( + code, + {...defaultOptions, ...parserSettings} + ); + }, + + getNodeName(node) { + switch (typeof node.type) { + case 'string': + return node.type; + case 'object': + return `Token (${node.type.label})`; + } + }, + + nodeToRange(node) { + if (typeof node.start !== 'undefined') { + return [node.start, node.end]; + } + }, + + _ignoredProperties: new Set([ + '__clone', + ]), + + renderSettings(parserSettings, onChange) { + return ( +
+ +
+ ); + }, +}; diff --git a/registry/tools/babylon/v5/package.json b/registry/tools/babylon/v5/package.json new file mode 100644 index 000000000..9620ec976 --- /dev/null +++ b/registry/tools/babylon/v5/package.json @@ -0,0 +1,8 @@ +{ + "name": "babylon", + "version": "1.0.0", + "private": true, + "dependencies": { + "babylon": "^5.0.0" + } +} diff --git a/registry/tools/babylon/v6/index.js b/registry/tools/babylon/v6/index.js new file mode 100644 index 000000000..f94b7445b --- /dev/null +++ b/registry/tools/babylon/v6/index.js @@ -0,0 +1,87 @@ +import React from 'react'; +// import defaultParserInterface from './utils/defaultESTreeParserInterface'; +import pkg from 'babylon/package.json'; +import babylon from 'babylon'; +import SettingsRenderer from 'SettingsRenderer'; + +const ID = 'babylon6'; +export const defaultOptions = { + sourceType: 'module', + allowImportExportEverywhere: false, + allowReturnOutsideFunction: false, + plugins: [ + 'asyncGenerators', + 'classConstructorCall', + 'classProperties', + 'decorators', + 'doExpressions', + 'exportExtensions', + 'flow', + 'functionSent', + 'functionBind', + 'jsx', + 'objectRestSpread', + 'dynamicImport', + ], +}; + +export const parserSettingsConfiguration = { + fields: [ + ['sourceType', ['module', 'script']], + 'allowReturnOutsideFunction', + 'allowImportExportEverywhere', + { + key: 'plugins', + title: 'Plugins', + fields: defaultOptions.plugins, + settings: settings => settings.plugins || defaultOptions.plugins, + values: plugins => defaultOptions.plugins.reduce( + (obj, name) => ((obj[name] = plugins.indexOf(name) > -1), obj), + {} + ), + }, + ], +}; + +export default { + ...defaultParserInterface, + + id: ID, + displayName: ID, + version: pkg.version, + homepage: pkg.homepage, + locationProps: new Set(['loc', 'start', 'end']), + + loadParser(callback) { + callback(babylon); + }, + + parse(babylon, code, options) { + return babylon.parse(code, {...defaultOptions, ...options}); + }, + + getNodeName(node) { + switch (typeof node.type) { + case 'string': + return node.type; + case 'object': + return `Token (${node.type.label})`; + } + }, + + nodeToRange(node) { + if (typeof node.start !== 'undefined') { + return [node.start, node.end]; + } + }, + + renderSettings(parserSettings, onChange) { + return ( + + ); + }, +}; diff --git a/registry/tools/babylon/v6/package.json b/registry/tools/babylon/v6/package.json new file mode 100644 index 000000000..6629621c6 --- /dev/null +++ b/registry/tools/babylon/v6/package.json @@ -0,0 +1,8 @@ +{ + "name": "babylon", + "version": "1.0.0", + "private": true, + "dependencies": { + "babylon": "^6.0.0" + } +} diff --git a/server/build-worker.js b/server/build-worker.js new file mode 100644 index 000000000..2985d9636 --- /dev/null +++ b/server/build-worker.js @@ -0,0 +1,44 @@ +const Queue = require('bee-queue'); +const child_process = require('child_process'); +const logger = require('./logger'); +const path = require('path'); + +const BUNDLE_DIR = path.resolve(process.env.BUNDLE_DIR); +const REGISTRY_DIR = path.resolve(process.env.REGISTRY); + +const buildQueue = new Queue('build'); + +buildQueue.process(2, (job, done) => { + const {tool, version} = job.data; + const key = `${tool}@${version}`; + const diff = measure(); + + child_process.fork( + path.join(__dirname, 'build.js'), + [tool, version], + { + env: { + REGISTRY_DIR, + BUNDLE_DIR, + PATH: process.env.PATH, + }, + } + ) + .on('close', code => { + console.log(`Done building.`); + if (code) { + const error = new Error( + `Unable to build package ${tool}@${version}` + ); + logger.error(error); + return done(error); + } + logger.log(`Built ${tool}@${version} in ${diff().toFixed(2)} sec`); + done(null, key); + }); +}); + +function measure() { + const startTime = Date.now(); + return () => ((Date.now() - startTime) / 1000); +} diff --git a/server/build.js b/server/build.js new file mode 100755 index 000000000..aa1b221b5 --- /dev/null +++ b/server/build.js @@ -0,0 +1,206 @@ +#!/usr/bin/env node + +require('isomorphic-fetch'); +const fs = require('fs-promise'); +const path = require('path'); +const semver = require('semver'); +const child_process = require('child_process'); +const rollup = require('rollup'); + +const REGISTRY_DIR = process.env.REGISTRY_DIR; +const BUNDLE_DIR = process.env.BUNDLE_DIR; + +const toolID = process.argv[2]; +const version = process.argv[3]; + +if (!(toolID && version)) { + console.error('You need to provide a tool ID and a version to build'); +} + +buildVersion(toolID, version) + .catch(error => { + console.log(error); + process.exit(1); + }); + +function buildVersion(toolID, version) { + const toolDir = path.join(REGISTRY_DIR, toolID); + if (!exists(toolDir)) { + return Promise.reject(new Error(`${toolID} doesn't exist.`)); + } + + return fetchInfo(toolID, version).then(npmPkg => { + return ( + exists(getPackagePath(toolDir)) ? + // Find package information + // ... in the folder itself + matchesVersion(toolID, toolDir, version) : + // ... or in subfolders + fs.readdir(toolDir) + .then(names => Promise.all( + names + .filter(withoutHidden) + .map(name => { + const versionPath = path.join(toolDir, name); + return exists(getPackagePath(versionPath)) ? + matchesVersion(toolID, versionPath, version) : + Promise.resolve(null); + }) + )) + .then(pkgs => pkgs.find(x => x != null)) + ) + .then(versionPath => { + if (!versionPath) { + throw new Error(`No suitable package found for ${toolID}@${version}.`); + } + return install(npmPkg, versionPath); + }) + .then(p => bundleVersion(p, npmPkg)); + }); +} + +function fetchInfo(name, version) { + console.log(`Fetching ${name}...`); + return fetch(`https://registry.npmjs.org/${name}/${version}`) + .then(response => { + if (!response.ok) { + throw new Error(response.status); + } + return response.json(); + }); +} + +function matchesVersion(toolID, versionPath, version) { + return fs.readJSON(getPackagePath(versionPath)) + .then( + pkg => semver.satisfies(version, pkg.dependencies[toolID]) ? + versionPath : + null + ); +} + +function preparePackage(npmPkg, packagePath) { + return fs.readJSON(getPackagePath(packagePath)) + .then(localPkg => { + // Get all versions that need to be built + const acceptedVersion = localPkg.dependencies[npmPkg.name]; + let versions = Object.keys(npmPkg.versions) + .filter(v => semver.satisfies(v, acceptedVersion)) + .filter(x => x); + if (versions.length === 0) { + // nothing to do + console.log(`Nothing to do for ${npmPkg.name}...`); + } + // versions = getLatestMinorVersions(versions); + versions = versions.slice(0,1); + // Install specific version and its dependencies + return Promise.all(versions.map( + v => install(npmPkg.versions[v], packagePath) + .then(bundleVersion) + .then(() => console.log('Bundle built')) + )); + }); +} + +function bundleVersion(p, npmPkg) { + return rollup.rollup({ + entry: path.join(p, 'index.js'), + plugins: [ + require('rollup-plugin-json')(), + require('rollup-plugin-babel')({ + externalHelpers: true, + presets: [ + require('babel-preset-es2015-rollup'), + require('babel-preset-react'), + ], + plugins: [ + [ + require('babel-plugin-transform-object-rest-spread'), + {"useBuiltIns": true}, + ], + ], + }), + require('rollup-plugin-node-resolve')(), + require('rollup-plugin-commonjs')(), + require('rollup-plugin-uglify')(), + ], + external: [ + 'react', + 'SettingsRenderer', + ], + }) + .then(bundle => ( + fs.ensureDir(BUNDLE_DIR) + .then(() => bundle.write({ + format: 'amd', + dest: path.join(BUNDLE_DIR, `${npmPkg.name}@${npmPkg.version}.js`), + exports: 'named', + moduleName: 'parser', + })) + .then(() => fs.remove(p)) + )); +} + +function install(npmVersion, p) { + console.log(`Installing ${npmVersion.name}@${npmVersion.version}...`); + // Create version folder + const cacheDir = path.join(p, '..', `.${npmVersion.name}@${npmVersion.version}`); + return fs.ensureDir(cacheDir) + .then(() => fs.copy(p, cacheDir)) + .then(() => run( + `yarn add --prefer-offline --exact --no-lockfile --prod --no-progress ${npmVersion.dist.tarball}`, + {cwd: cacheDir} + )) + .then(() => run( + 'yarn --prefer-offline --prod --no-lockfile --no-progress', + {cwd: cacheDir} + )) + .then(() => cacheDir); +} + +function getPackagePath(p) { + return path.join(p, 'package.json'); +} + +function exists(p) { + try { + fs.accessSync(p, fs.constants.R_OK); + return true; + } catch(e) {} + return false; +} + +// Given a list of versions, these function removes all but the latest patch +// version. E.g. +// In: [1.0.1, 1.0.2, 1.1.2, 1.1.3, 1.1.4] +// Out: [1.0.2, 1.1.4] +function getLatestMinorVersions(versions) { + const last = versions.length - 1; + return versions.sort(semver.compare) + .filter((v, i) => { + if (i === last) { + return true; + } + if (semver.diff(v, versions[i+1]) === 'minor') { + return true; + } + return false; + }); +} + +function run(command, options) { + options = Object.assign({}, options, {env: {PATH: process.env.PATH}}); + return new Promise((resolve, reject) => { + child_process.exec(command, options, (error, stdout, stderr) => { + if (error) { + reject({error, stdout, stderr}); + } else { + resolve({stdout, stderr}); + } + }); + }); +} + +function withoutHidden(p) { + return p[0] !== '.'; +} diff --git a/server/constants.js b/server/constants.js index ec990f40f..3aa3de12c 100644 --- a/server/constants.js +++ b/server/constants.js @@ -1,12 +1,9 @@ -if (!process.env.AUTH_TOKEN) { - console.error( - 'AUTH_TOKEN is not set! That will result in all gists being anonymous, ' + - 'which is probably not what you want.' - ); - process.exit(1); -} - module.exports = { AUTH_TOKEN: process.env.AUTH_TOKEN, SETTINGS_FORMAT: 2, + STATIC: process.env.STATIC, + REGISTRY: process.env.REGISTRY, + BUNDLE_DIR: process.env.BUNDLE_DIR, + SNIPPET_FILE: process.env.SNIPPET_FILE, + REVISION_FILE: process.env.REVISION_FILE, }; diff --git a/server/handlers/parse.js b/server/handlers/parse.js index f83a0f689..707c7f5da 100644 --- a/server/handlers/parse.js +++ b/server/handlers/parse.js @@ -1,7 +1,8 @@ const express = require('express'); const path = require('path'); -const snippets = prepareData(require(process.env.SNIPPET_FILE)); -const snippetRevisions = prepareData(require(process.env.REVISION_FILE)); +const constants = require('../constants'); +const snippets = prepareData(require(constants.SNIPPET_FILE)); +const snippetRevisions = prepareData(require(constants.REVISION_FILE)); function notFound(req, res) { console.error(`Not found: ${req.path}`); diff --git a/server/handlers/tools.js b/server/handlers/tools.js new file mode 100644 index 000000000..3ac789763 --- /dev/null +++ b/server/handlers/tools.js @@ -0,0 +1,119 @@ +const Queue = require('bee-queue'); +const child_process = require('child_process'); +const constants = require('../constants'); +const express = require('express'); +const fs = require('fs'); +const logger = require('../logger'); +const path = require('path'); +const redis = require('redis'); + +const BUNDLE_DIR = path.resolve(constants.BUNDLE_DIR); +const REGISTRY_DIR = path.resolve(constants.REGISTRY); + +const client = redis.createClient(); +const buildQueue = new Queue('build'); + +module.exports = express.Router() + .get('/:tool/:version', buildTool); + +function buildTool(req, res, next) { + const {tool, version} = req.params; + const bundlePath = path.join(BUNDLE_DIR, `${tool}@${version}.js`); + const buildKey = `ae:build:${tool}`; + + function sendFile() { + res.sendFile(bundlePath, error => { + if (error) { + return next(error); + } + }); + } + + function error(status, err) { + res.send(status).send(err.message || msg); + } + + // Is the version already built? Serve that one instead. + if (exists(bundlePath)) { + logger.log(`Serving ${tool}@${version} from file...`); + return sendFile(); + } + logger.log(`Requesting build of ${tool}@${version}...`); + + isBuildInProgress(buildKey, tool, version) + .then(yes => yes ? + waitForBuild(buildKey, tool, version) : + build(buildKey, tool, version) + ) + .then(() => { + cleanup(buildKey, version); + sendFile(); + }) + .catch(err => { + cleanup(buildKey, version); + res.status(500).send(err.message || err) + logger.error(`Error: ${err.message || err}`); + }); +} + +function isBuildInProgress(buildKey, tool, version) { + return new Promise((resolve, reject) => { + client.sismember(buildKey, version, function(err, yes) { + if (err) { + reject(err); + } else { + resolve(yes === 1); + } + }); + }); +} + +function waitForBuild(buildKey, tool, version) { + return new Promise((resolve, reject) => { + const handler = (jobID, result) => { + if (result === `${tool}@${version}`) { + clearTimeout(timer); + resolve(); + } + }; + // Cancel the request if we have to wait longer than 30 sec + const timer = setTimeout(() => { + buildQueue.removeListener('job succeeded', handler); + reject(new Error('Tool build timeout')); + }, 30000); + + buildQueue.on('job succeeded', handler); + }); +} + +function build(buildKey, tool, version) { + return new Promise((resolve, reject) => { + client.sadd(buildKey, version, err => { + if (err) { + return reject(err); + } + + buildQueue.createJob({tool, version}) + .timeout(30000) + .save((err, job) => { + if (err) { + reject(err); + } + }) + .on('succeeded', () => resolve()) + .on('failed', err => reject(err)); + }); + }); +} + +function exists(p) { + try { + fs.accessSync(p, fs.constants.R_OK); + return true; + } catch(e) {} + return false; +} + +function cleanup(key, version) { + client.srem(key, version); +} diff --git a/server/index.js b/server/index.js index 9d33d3007..16269dfaa 100644 --- a/server/index.js +++ b/server/index.js @@ -1,17 +1,26 @@ const bodyParser = require('body-parser'); const express = require('express'); const path = require('path'); +const constants = require('./constants'); const app = express(); app.use(bodyParser.json()); -app.use('/api/v1/gist', require('./handlers/gist')); +if (constants.AUTH_TOKEN) { + console.log('Enabling gists...'); + app.use('/api/v1/gist', require('./handlers/gist')); +} -if (process.env.SNIPPET_FILE && process.env.REVISION_FILE) { +if (constants.SNIPPET_FILE && constants.REVISION_FILE) { console.log('Serving Parse snippets enabled.'); app.use('/api/v1/parse', require('./handlers/parse')); } +if (constants.REGISTRY && constants.BUNDLE_DIR) { + console.log('Serving tools..'); + app.use('/api/v1/tool', require('./handlers/tools')); +} + // `next` is needed here to mark this as an error handler // eslint-disable-next-line no-unused-vars app.use((err, req, res, next) => { @@ -24,8 +33,9 @@ app.use((err, req, res, next) => { res.status(500).send('Something went wrong'); }); -if (process.env.STATIC) { - app.use(express.static(path.join(__dirname, process.env.STATIC))); +if (constants.STATIC) { + console.log('Serving static files...'); + app.use(express.static(path.join(__dirname, constants.STATIC))); } const PORT = process.env.PORT || 8080; diff --git a/server/logger.js b/server/logger.js new file mode 100644 index 000000000..8dd34fc97 --- /dev/null +++ b/server/logger.js @@ -0,0 +1,19 @@ +const winston = require('winston'); +winston.level = 'info'; + +exports.log = msg => { + winston.log('info', `${getDateString()} ${msg}`); +}; + +exports.error = msg => { + winston.log('error', `${getDateString()} ${msg}`); +}; + +function getDateString() { + const now = new Date(); + return `${now.getYear() + 1900}-${pad(now.getUTCMonth()+1)}-${pad(now.getUTCDate())} ${pad(now.getUTCHours())}:${pad(now.getUTCMinutes())}:${pad(now.getUTCSeconds())}`; +} + +function pad(v) { + return v < 10 ? '0' + v : v; +} diff --git a/server/package.json b/server/package.json index 37a271b6c..16a7fde52 100644 --- a/server/package.json +++ b/server/package.json @@ -5,11 +5,29 @@ "private": true, "author": "Felix Kling", "dependencies": { + "babel-plugin-transform-object-rest-spread": "^6.22.0", + "babel-preset-es2015-rollup": "^3.0.0", + "babel-preset-react": "^6.22.0", + "bee-queue": "^0.3.0", "body-parser": "^1.15.2", "express": "^4.14.0", - "github-api": "https://github.com/fkling/github.git" + "fs-extra": "^2.0.0", + "fs-promise": "^1.0.0", + "github-api": "https://github.com/fkling/github.git", + "isomorphic-fetch": "^2.2.1", + "redis": "^2.6.5", + "rollup": "^0.41.4", + "rollup-plugin-babel": "^2.7.1", + "rollup-plugin-commonjs": "^7.0.0", + "rollup-plugin-filesize": "^1.0.1", + "rollup-plugin-json": "^2.1.0", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-uglify": "^1.0.1", + "semver": "^5.3.0", + "winston": "^2.3.1" }, "scripts": { - "start": "STATIC=../out node index.js" + "start": "STATIC=../out REGISTRY=../registry/tools BUNDLE_DIR=../bundles node index.js", + "start-worker": "REGISTRY=../registry/tools BUNDLE_DIR=../bundles node build-worker.js" } } diff --git a/server/yarn.lock b/server/yarn.lock index 06325f177..8fb83c242 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -9,16 +9,544 @@ accepts@~1.3.3: mime-types "~2.1.11" negotiator "0.6.1" +acorn@^4.0.1: + version "4.0.8" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.8.tgz#f41e52020ce78118a3c68ed0e9215eb8fc68b5b1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + axios@^0.15.2: version "0.15.3" resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" dependencies: follow-redirects "1.0.0" +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@6, babel-core@^6.22.0: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.22.0" + babel-helpers "^6.22.0" + babel-messages "^6.22.0" + babel-register "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.1" + babel-types "^6.22.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" + dependencies: + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-builder-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-define-map@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" + dependencies: + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-get-function-arity@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-hoist-variables@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-optimise-call-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-replace-supers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" + dependencies: + babel-helper-optimise-call-expression "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-messages@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.18.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.22.0, babel-plugin-transform-es2015-classes@^6.9.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" + dependencies: + babel-helper-define-map "^6.22.0" + babel-helper-function-name "^6.22.0" + babel-helper-optimise-call-expression "^6.22.0" + babel-helper-replace-supers "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" + dependencies: + babel-plugin-transform-strict-mode "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-umd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" + dependencies: + babel-helper-replace-supers "^6.22.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" + dependencies: + babel-helper-call-delegate "^6.22.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" + dependencies: + babel-helper-builder-react-jsx "^6.22.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" + dependencies: + regenerator-transform "0.9.8" + +babel-plugin-transform-strict-mode@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-preset-es2015-rollup@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015-rollup/-/babel-preset-es2015-rollup-3.0.0.tgz#854b63ecde2ee98cac40e882f67bfcf185b1f24a" + dependencies: + babel-plugin-external-helpers "^6.18.0" + babel-preset-es2015 "^6.3.13" + require-relative "^0.8.7" + +babel-preset-es2015@^6.3.13: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.22.0" + babel-plugin-transform-es2015-classes "^6.22.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-systemjs "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.22.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + +babel-preset-react@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" + dependencies: + babel-plugin-syntax-flow "^6.3.13" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-plugin-transform-react-display-name "^6.22.0" + babel-plugin-transform-react-jsx "^6.22.0" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + +babel-register@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" + dependencies: + babel-core "^6.22.0" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.22.0, babel-traverse@^6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.19.0, babel-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +bee-queue@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/bee-queue/-/bee-queue-0.3.0.tgz#83928b81156fd97ec756cad1bb5d47f222cd77d4" + dependencies: + redis "1.0.0" + body-parser@^1.15.2: version "1.15.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67" @@ -34,10 +562,79 @@ body-parser@^1.15.2: raw-body "~2.1.7" type-is "~1.6.13" +boxen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.2.0.tgz#84f88e2512e2c3eebacee799932fed0226de6dcb" + dependencies: + chalk "^1.1.1" + filled-array "^1.0.0" + object-assign "^4.0.1" + repeating "^2.0.0" + string-width "^1.0.1" + widest-line "^1.0.0" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +builtin-modules@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.0, chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + content-disposition@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" @@ -46,6 +643,10 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" +convert-source-map@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -54,12 +655,30 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" -debug@^2.2.0, debug@~2.2.0: +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + +debug@^2.1.1, debug@^2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: ms "0.7.1" +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-assign@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" + dependencies: + is-obj "^1.0.0" + depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -68,6 +687,20 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -76,10 +709,32 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + +estree-walker@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.0.tgz#f67ca8f57b9ed66d886af816c099c779b315d4db" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + etag@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" @@ -115,6 +770,18 @@ express@^4.14.0: utils-merge "1.0.0" vary "~1.1.0" +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + +filesize@^3.2.0: + version "3.5.4" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.4.tgz#742fc7fb6aef4ee3878682600c22f840731e1fda" + +filled-array@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" + finalhandler@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" @@ -139,6 +806,30 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs-extra@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-1.0.0.tgz#4246a4cd45497d2ed57e6e4b22167d3864b23679" + dependencies: + any-promise "^1.0.0" + fs-extra "^1.0.0" + mz "^2.3.1" + thenify-all "^1.6.0" + "github-api@https://github.com/fkling/github.git": version "3.1.0" resolved "https://github.com/fkling/github.git#e0beb8eee48f2a0d0583a17fa96a309ba5f6afa4" @@ -148,6 +839,33 @@ fresh@0.3.0: js-base64 "^2.1.9" utf8 "^2.1.1" +globals@^9.0.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + http-errors@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" @@ -156,7 +874,7 @@ http-errors@~1.5.0: setprototypeof "1.0.2" statuses ">= 1.3.1 < 2" -iconv-lite@0.4.13: +iconv-lite@0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -164,14 +882,113 @@ inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + ipaddr.js@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lodash@^4.2.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +magic-string@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.0.tgz#198948217254e3e0b93080e01146b7c73b2a06b2" + dependencies: + vlq "^0.2.1" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -198,28 +1015,83 @@ mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +minimatch@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" +mz@^2.3.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +private@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + proxy-addr@~1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" @@ -243,6 +1115,154 @@ raw-body@~2.1.7: iconv-lite "0.4.13" unpipe "1.0.0" +redis-commands@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" + +redis-parser@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.4.0.tgz#018ea743077aae944d0b798b2fd12587320bf3c9" + +redis@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redis/-/redis-1.0.0.tgz#5612d832b2535a8c0e8d81b42c63af330d3bb677" + +redis@^2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/redis/-/redis-2.6.5.tgz#87c1eff4a489f94b70871f3d08b6988f23a95687" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.0.0" + +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + +regenerator-transform@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +require-relative@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.1.7: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rollup-plugin-babel@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" + dependencies: + babel-core "6" + babel-plugin-transform-es2015-classes "^6.9.0" + object-assign "^4.1.0" + rollup-pluginutils "^1.5.0" + +rollup-plugin-commonjs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-7.0.0.tgz#510762d5c423c761cd16d8e8451715b39f0ceb08" + dependencies: + acorn "^4.0.1" + estree-walker "^0.3.0" + magic-string "^0.19.0" + resolve "^1.1.7" + rollup-pluginutils "^1.5.1" + +rollup-plugin-filesize@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-1.0.1.tgz#0fe0a10ae2a8b52c7318f16eb8e87d75301920b7" + dependencies: + boxen "^0.2.0" + chalk "^1.1.1" + deep-assign "^2.0.0" + filesize "^3.2.0" + gzip-size "^3.0.0" + +rollup-plugin-json@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-2.1.0.tgz#7f8e1b2b156932dd934b938dc5547e4118d4121f" + dependencies: + rollup-pluginutils "^1.5.2" + +rollup-plugin-node-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.0.0.tgz#07e0ae94ac002a3ea36e8f33ca121d9f836b1309" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + resolve "^1.1.6" + +rollup-plugin-uglify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-1.0.1.tgz#11d0b0c8bcd2d07e6908f74fd16b0152390b922a" + dependencies: + uglify-js "^2.6.1" + +rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1, rollup-pluginutils@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup@^0.41.4: + version "0.41.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.4.tgz#a970580176329f9ead86854d7fd4c46de752aef8" + dependencies: + source-map-support "^0.4.0" + +semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + send@0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" @@ -274,10 +1294,62 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +source-map-support@^0.4.0, source-map-support@^0.4.2: + version "0.4.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" + dependencies: + source-map "^0.5.3" + +source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +stack-trace@0.0.x: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + "statuses@>= 1.3.1 < 2", statuses@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +thenify-all@^1.0.0, thenify-all@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.2.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" + dependencies: + any-promise "^1.0.0" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + type-is@~1.6.13: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" @@ -285,6 +1357,19 @@ type-is@~1.6.13: media-typer "0.3.0" mime-types "~2.1.13" +uglify-js@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -300,3 +1385,45 @@ utils-merge@1.0.0: vary@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + +vlq@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" + +whatwg-fetch@>=0.10.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" + +widest-line@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +winston@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 6c296410405fd5689d7cb0379e34ff99d0107b66 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 5 Feb 2017 20:53:30 -0800 Subject: [PATCH 02/10] Store parser object instead of ID in state --- website/src/store/reducers.js | 27 +++++++++++++++------------ website/src/store/selectors.js | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/website/src/store/reducers.js b/website/src/store/reducers.js index e1ce6da4c..553632541 100644 --- a/website/src/store/reducers.js +++ b/website/src/store/reducers.js @@ -48,7 +48,8 @@ export function persist(state) { return { ...pick(state, 'showTransformPanel', 'parserSettings', 'parserPerCategory'), workbench: { - ...pick(state.workbench, 'parser', 'code'), + parser: state.workbench.parser.id, + code: state.workbench.code, transform: pick(state.workbench.transform, 'code', 'transformer'), }, }; @@ -63,6 +64,7 @@ export function revive(state=initialState) { ...state, workbench: { ...state.workbench, + parser: getParserByID(state.workbench.parser), initialCode: state.workbench.code, parserSettings: state.parserSettings[state.workbench.parser] || {}, transform: { @@ -98,11 +100,12 @@ export function astexplorer(state=initialState, action) { function workbench(state=initialState.workbench, action, fullState) { function parserFromCategory(category) { - const parser = fullState.parserPerCategory[category.id] || - getDefaultParser(category).id; + const parser = getParserByID( + fullState.parserPerCategory[category.id] || getDefaultParser(category).id + ); return { parser, - parserSettings: fullState.parserSettings[parser] || {}, + parserSettings: fullState.parserSettings[parser.id] || {}, code: category.codeExample, initialCode: category.codeExample, }; @@ -127,7 +130,7 @@ function workbench(state=initialState.workbench, action, fullState) { return {...state, parserSettings: action.settings}; case actions.SET_PARSER: { - const newState = {...state, parser: action.parser.id}; + const newState = {...state, parser: action.parser}; if (action.parser !== state.parser) { // Update parser settings newState.parserSettings = @@ -140,7 +143,7 @@ function workbench(state=initialState.workbench, action, fullState) { case actions.SELECT_TRANSFORMER: { const differentParser = - action.transformer.defaultParserID !== state.parser; + action.transformer.defaultParserID !== state.parser.id; const differentTransformer = action.transformer.id !== state.transform.transformer ; @@ -151,7 +154,7 @@ function workbench(state=initialState.workbench, action, fullState) { const newState = {...state}; if (differentParser) { - newState.parser = action.transformer.defaultParserID; + newState.parser = getParserByID(action.transformer.defaultParserID); newState.parserSettings = fullState.parserSettings[action.transformer.defaultParserID] || {}; } @@ -190,7 +193,7 @@ function workbench(state=initialState.workbench, action, fullState) { return { ...state, - parser: parserID, + parser: getParserByID(parserID), parserSettings: revision.getParserSettings() || fullState.parserSettings[parserID] || {}, code: revision.getCode(), initialCode: revision.getCode(), @@ -208,9 +211,9 @@ function workbench(state=initialState.workbench, action, fullState) { const reset = Boolean(actions.RESET); const newState = { ...state, - parserSettings: fullState.parserSettings[state.parser] || {}, - code: getParserByID(state.parser).category.codeExample, - initialCode: getParserByID(state.parser).category.codeExample, + parserSettings: fullState.parserSettings[state.parser.id] || {}, + code: state.parser.category.codeExample, + initialCode: state.parser.category.codeExample, }; if (fullState.activeRevision && fullState.activeRevision.getTransformerID() || reset && state.transform.transformer) { // Clear transform as well @@ -238,7 +241,7 @@ function parserSettings(state=initialState.parserSettings, action, fullState) { } return { ...state, - [fullState.workbench.parser]: action.settings, + [fullState.workbench.parser.id]: action.settings, }; default: return state; diff --git a/website/src/store/selectors.js b/website/src/store/selectors.js index 54c90cfa3..4036a253a 100644 --- a/website/src/store/selectors.js +++ b/website/src/store/selectors.js @@ -35,7 +35,7 @@ export function isSaving(state) { // Parser related export function getParser(state) { - return getParserByID(state.workbench.parser); + return state.workbench.parser; } export function getParserSettings(state) { From e0690d59a2700149045fe58f94dfb177d2c2fd10 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Tue, 7 Feb 2017 23:34:30 -0800 Subject: [PATCH 03/10] Move build code into registry --- {server => registry}/build-worker.js | 2 - {server => registry}/build.js | 95 +- registry/categories/js/codeExample.txt | 19 + registry/categories/js/index.js | 4 + registry/logger.js | 19 + registry/package.json | 9 + registry/tools/acorn/base.js | 72 ++ registry/tools/acorn/index.js | 93 -- registry/tools/acorn/package.js | 46 + registry/tools/acorn/package.json | 10 - registry/tools/acorn/v2.js | 39 + registry/tools/acorn/v3.js | 39 + registry/tools/acorn/v4.js | 39 + registry/tools/babylon/v6/index.js | 2 +- registry/utils/SettingsRenderer.js | 125 +++ registry/utils/defaultParserInterface.js | 29 + registry/yarn.lock | 145 +++ server/handlers/tools.js | 4 +- server/package.json | 13 - server/yarn.lock | 1036 +--------------------- 20 files changed, 643 insertions(+), 1197 deletions(-) rename {server => registry}/build-worker.js (92%) rename {server => registry}/build.js (68%) create mode 100644 registry/categories/js/codeExample.txt create mode 100644 registry/categories/js/index.js create mode 100644 registry/logger.js create mode 100644 registry/package.json create mode 100644 registry/tools/acorn/base.js delete mode 100644 registry/tools/acorn/index.js create mode 100644 registry/tools/acorn/package.js delete mode 100644 registry/tools/acorn/package.json create mode 100644 registry/tools/acorn/v2.js create mode 100644 registry/tools/acorn/v3.js create mode 100644 registry/tools/acorn/v4.js create mode 100644 registry/utils/SettingsRenderer.js create mode 100644 registry/utils/defaultParserInterface.js create mode 100644 registry/yarn.lock diff --git a/server/build-worker.js b/registry/build-worker.js similarity index 92% rename from server/build-worker.js rename to registry/build-worker.js index 2985d9636..a356c1664 100644 --- a/server/build-worker.js +++ b/registry/build-worker.js @@ -4,7 +4,6 @@ const logger = require('./logger'); const path = require('path'); const BUNDLE_DIR = path.resolve(process.env.BUNDLE_DIR); -const REGISTRY_DIR = path.resolve(process.env.REGISTRY); const buildQueue = new Queue('build'); @@ -18,7 +17,6 @@ buildQueue.process(2, (job, done) => { [tool, version], { env: { - REGISTRY_DIR, BUNDLE_DIR, PATH: process.env.PATH, }, diff --git a/server/build.js b/registry/build.js similarity index 68% rename from server/build.js rename to registry/build.js index aa1b221b5..a79d15144 100755 --- a/server/build.js +++ b/registry/build.js @@ -7,7 +7,7 @@ const semver = require('semver'); const child_process = require('child_process'); const rollup = require('rollup'); -const REGISTRY_DIR = process.env.REGISTRY_DIR; +const REGISTRY_DIR = path.join(__dirname, 'tools'); const BUNDLE_DIR = process.env.BUNDLE_DIR; const toolID = process.argv[2]; @@ -30,33 +30,23 @@ function buildVersion(toolID, version) { } return fetchInfo(toolID, version).then(npmPkg => { - return ( - exists(getPackagePath(toolDir)) ? - // Find package information - // ... in the folder itself - matchesVersion(toolID, toolDir, version) : - // ... or in subfolders - fs.readdir(toolDir) - .then(names => Promise.all( - names - .filter(withoutHidden) - .map(name => { - const versionPath = path.join(toolDir, name); - return exists(getPackagePath(versionPath)) ? - matchesVersion(toolID, versionPath, version) : - Promise.resolve(null); - }) - )) - .then(pkgs => pkgs.find(x => x != null)) - ) - .then(versionPath => { - if (!versionPath) { + const toolConfig = require(path.resolve(path.join(toolDir, 'package.js'))); + const versionConfig = toolConfig.versions.find( + config => semver.satisfies(version, config.dependencies[toolID]) + ); + if (!versionConfig) { throw new Error(`No suitable package found for ${toolID}@${version}.`); - } - return install(npmPkg, versionPath); + } + + return install(npmPkg, toolDir, versionConfig) + .then(cacheDir => + bundleVersion( + cacheDir, + versionConfig, + npmPkg + ).then(() => fs.remove(cacheDir)) + ); }) - .then(p => bundleVersion(p, npmPkg)); - }); } function fetchInfo(name, version) { @@ -71,7 +61,7 @@ function fetchInfo(name, version) { } function matchesVersion(toolID, versionPath, version) { - return fs.readJSON(getPackagePath(versionPath)) + return fs.readJSON(versionPath) .then( pkg => semver.satisfies(version, pkg.dependencies[toolID]) ? versionPath : @@ -80,7 +70,7 @@ function matchesVersion(toolID, versionPath, version) { } function preparePackage(npmPkg, packagePath) { - return fs.readJSON(getPackagePath(packagePath)) + return fs.readJSON(packagePath) .then(localPkg => { // Get all versions that need to be built const acceptedVersion = localPkg.dependencies[npmPkg.name]; @@ -102,15 +92,17 @@ function preparePackage(npmPkg, packagePath) { }); } -function bundleVersion(p, npmPkg) { +function bundleVersion(packagePath, versionConfig, npmPkg) { + const localRollupConfig = versionConfig.getRollupConfig(packagePath); + return rollup.rollup({ - entry: path.join(p, 'index.js'), + entry: path.join(packagePath, versionConfig.main), + interop: false, plugins: [ require('rollup-plugin-json')(), require('rollup-plugin-babel')({ - externalHelpers: true, + exclude: path.join(packagePath, 'node_modules/**'), presets: [ - require('babel-preset-es2015-rollup'), require('babel-preset-react'), ], plugins: [ @@ -121,12 +113,28 @@ function bundleVersion(p, npmPkg) { ], }), require('rollup-plugin-node-resolve')(), - require('rollup-plugin-commonjs')(), - require('rollup-plugin-uglify')(), + require('rollup-plugin-commonjs')(Object.assign( + {}, + localRollupConfig['rollup-plugin-commonjs'] || {} + )), + require('rollup-plugin-babel')({ + exclude: path.join(packagePath, 'node_modules/**'), + presets: [ + require('babel-preset-es2015-rollup'), + ], + plugins: [ + require('babel-plugin-external-helpers'), + ], + }), + require('rollup-plugin-string')({ + include: path.join(REGISTRY_DIR, '..', '**', '*.txt'), + exclude: path.join(REGISTRY_DIR, '**', 'node_modules', '**'), + }), + //require('rollup-plugin-uglify')(), + require('rollup-plugin-filesize')(), ], external: [ 'react', - 'SettingsRenderer', ], }) .then(bundle => ( @@ -135,20 +143,25 @@ function bundleVersion(p, npmPkg) { format: 'amd', dest: path.join(BUNDLE_DIR, `${npmPkg.name}@${npmPkg.version}.js`), exports: 'named', - moduleName: 'parser', + moduleName: `${npmPkg.name}/${npmPkg.version}`, + banner: '(function(define) {', + footer: '}(astexplorerDefine));', })) - .then(() => fs.remove(p)) )); } -function install(npmVersion, p) { +function install(npmVersion, toolDir, versionConfig) { console.log(`Installing ${npmVersion.name}@${npmVersion.version}...`); // Create version folder - const cacheDir = path.join(p, '..', `.${npmVersion.name}@${npmVersion.version}`); + const cacheDir = path.join(toolDir, '..', `.${npmVersion.name}@${npmVersion.version}`); + const packagePath = path.join(cacheDir, 'package.json'); return fs.ensureDir(cacheDir) - .then(() => fs.copy(p, cacheDir)) + .then(() => Promise.all([ + fs.copy(toolDir, cacheDir), + fs.writeJSON(packagePath, versionConfig), + ])) .then(() => run( - `yarn add --prefer-offline --exact --no-lockfile --prod --no-progress ${npmVersion.dist.tarball}`, + `yarn add --prefer-offline --exact --no-lockfile --prod --no-progress ${npmVersion.name}@${npmVersion.version}`, {cwd: cacheDir} )) .then(() => run( diff --git a/registry/categories/js/codeExample.txt b/registry/categories/js/codeExample.txt new file mode 100644 index 000000000..6fd129803 --- /dev/null +++ b/registry/categories/js/codeExample.txt @@ -0,0 +1,19 @@ +/** + * Paste or drop some JavaScript here and explore + * the syntax tree created by chosen parser. + * You can use all the cool new features from ES6 + * and even more. Enjoy! + */ + +let tips = [ + "Click on any AST node with a '+' to expand it", + + "Hovering over a node highlights the \ + corresponding part in the source code", + + "Shift click on an AST node expands the whole substree" +]; + +function printTips() { + tips.forEach((tip, i) => console.log(`Tip ${i}:` + tip)); +} diff --git a/registry/categories/js/index.js b/registry/categories/js/index.js new file mode 100644 index 000000000..0041ee046 --- /dev/null +++ b/registry/categories/js/index.js @@ -0,0 +1,4 @@ +export const id = 'javascript'; +export const displayName = 'JavaScript'; +export const mimeTypes = ['text/javascript']; +export const fileExtension = 'js'; diff --git a/registry/logger.js b/registry/logger.js new file mode 100644 index 000000000..8dd34fc97 --- /dev/null +++ b/registry/logger.js @@ -0,0 +1,19 @@ +const winston = require('winston'); +winston.level = 'info'; + +exports.log = msg => { + winston.log('info', `${getDateString()} ${msg}`); +}; + +exports.error = msg => { + winston.log('error', `${getDateString()} ${msg}`); +}; + +function getDateString() { + const now = new Date(); + return `${now.getYear() + 1900}-${pad(now.getUTCMonth()+1)}-${pad(now.getUTCDate())} ${pad(now.getUTCHours())}:${pad(now.getUTCMinutes())}:${pad(now.getUTCSeconds())}`; +} + +function pad(v) { + return v < 10 ? '0' + v : v; +} diff --git a/registry/package.json b/registry/package.json new file mode 100644 index 000000000..43f59b627 --- /dev/null +++ b/registry/package.json @@ -0,0 +1,9 @@ +{ + "dependencies": { + "bee-queue": "^0.3.0", + "fs-promise": "^1.0.0", + "isomorphic-fetch": "^2.2.1", + "semver": "^5.3.0", + "winston": "^2.3.1" + } +} diff --git a/registry/tools/acorn/base.js b/registry/tools/acorn/base.js new file mode 100644 index 000000000..606c4f63e --- /dev/null +++ b/registry/tools/acorn/base.js @@ -0,0 +1,72 @@ +import React from 'react'; +import defaultParserInterface from '../../utils/defaultParserInterface'; +import SettingsRenderer from '../../utils/SettingsRenderer'; +import * as category from '../../categories/js'; +import codeExample from '../../categories/js/codeExample.txt'; + +import pkg from 'acorn/package.json'; +import * as acorn from 'acorn'; +import {parse_dammit} from 'acorn/dist/acorn_loose.js'; +import jsxInject from 'acorn-jsx/inject'; + +const ID = 'acorn'; +console.log(acorn); +console.log(acorn.parse); + +export default function getBase(defaultOptions, settingsConfiguration) { + return { + ...defaultParserInterface, + + displayName: ID, + homepage: pkg.homepage, + category, + codeExample, + + locationProps: new Set(['range', 'loc', 'start', 'end']), + + loadParser(callback) { + callback({ + acorn: jsxInject(acorn), + parse_dammit, + }); + }, + + parse(parsers, code, options={}) { + options = Object.assign({}, defaultOptions, options); + const parser = options.loose ? + parsers.parse_dammit : + parsers.acorn.parse; + + // put deep option into correspondent place + return parser(code, { + ...options, + plugins: options['plugins.jsx'] && !options.loose ? { jsx: true } : {}, + }); + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + }, + + renderSettings(parserSettings, onChange) { + return ( +
+

+ + Option descriptions + +

+ +
+ ); + }, + }; +} diff --git a/registry/tools/acorn/index.js b/registry/tools/acorn/index.js deleted file mode 100644 index cf5cd7578..000000000 --- a/registry/tools/acorn/index.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react'; -//import defaultParserInterface from './utils/defaultESTreeParserInterface'; -import pkg from 'acorn/package.json'; -import acorn from 'acorn'; -import acornLoose from 'acorn/dist/acorn_loose'; -import jsxInject from 'acorn-jsx/inject'; -import SettingsRenderer from 'SettingsRenderer'; - -const ID = 'acorn'; -const defaultOptions = { - ecmaVersion: 7, - sourceType: 'module', - allowReserved: false, - allowReturnOutsideFunction: false, - allowImportExportEverywhere: false, - allowHashBang: false, - locations: false, - loose: false, - ranges: false, - preserveParens: false, - 'plugins.jsx': true, -}; - -const settingsConfiguration = { - fields: [ - ['ecmaVersion', [3, 5, 6, 7, 8], x => Number(x)], - ['sourceType', ['script', 'module']], - 'allowReserved', - 'allowReturnOutsideFunction', - 'allowImportExportEverywhere', - 'allowHashBang', - 'locations', - 'loose', - 'ranges', - 'preserveParens', - 'plugins.jsx', - ], -}; - -export default { - ...defaultParserInterface, - - id: ID, - displayName: ID, - version: `${pkg.version}`, - homepage: pkg.homepage, - locationProps: new Set(['range', 'loc', 'start', 'end']), - - loadParser(callback) { - callback({ - acorn: jsxInject(acorn), - acornLoose, - }); - }, - - parse(parsers, code, options={}) { - options = Object.assign({}, defaultOptions, options); - const parser = options.loose ? - parsers.acornLoose.parse_dammit : - parsers.acorn.parse; - - // put deep option into correspondent place - return parser(code, { - ...options, - plugins: options['plugins.jsx'] && !options.loose ? { jsx: true } : {}, - }); - }, - - nodeToRange(node) { - if (typeof node.start === 'number') { - return [node.start, node.end]; - } - }, - - renderSettings(parserSettings, onChange) { - return ( -
-

- - Option descriptions - -

- -
- ); - }, -}; diff --git a/registry/tools/acorn/package.js b/registry/tools/acorn/package.js new file mode 100644 index 000000000..7ed1136ec --- /dev/null +++ b/registry/tools/acorn/package.js @@ -0,0 +1,46 @@ +const path = require('path'); + +function getRollupConfig(packageDir) { + return { + 'rollup-plugin-commonjs': { + namedExports: { + [path.join(packageDir, 'node_modules/acorn/dist/acorn_loose.js')]: [ + 'parse_dammit', + ], + [path.join(packageDir, 'node_modules/acorn/dist/acorn.js')]: [ + 'parse', + ], + }, + }, + }; +} + +module.exports = { + displayName: 'acorn', + versions: [ + { + main: './v2.js', + dependencies: { + acorn: '^2.0.0', + 'acorn-jsx': '^2.0.0' + }, + getRollupConfig, + }, + { + main: './v3.js', + dependencies: { + acorn: '^3.0.0', + 'acorn-jsx': '^3.0.0' + }, + getRollupConfig, + }, + { + main: './v4.js', + dependencies: { + acorn: '^4.0.0', + 'acorn-jsx': '^3.0.0' + }, + getRollupConfig, + }, + ], +}; diff --git a/registry/tools/acorn/package.json b/registry/tools/acorn/package.json deleted file mode 100644 index caa82de90..000000000 --- a/registry/tools/acorn/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "acorn", - "version": "1.0.0", - "private": true, - "dependencies": { - "acorn": "^4.0.0", - "acorn-jsx": "^3.0.1" - } -} - diff --git a/registry/tools/acorn/v2.js b/registry/tools/acorn/v2.js new file mode 100644 index 000000000..a380c2b42 --- /dev/null +++ b/registry/tools/acorn/v2.js @@ -0,0 +1,39 @@ +import getBase from './base.js'; +import pkg from 'acorn/package.json'; + +const defaultOptions = { + ecmaVersion: 6, + sourceType: 'module', + allowReserved: false, + allowReturnOutsideFunction: false, + allowImportExportEverywhere: false, + allowHashBang: false, + locations: false, + loose: false, + ranges: false, + preserveParens: false, + 'plugins.jsx': true, +}; + +const settingsConfiguration = { + fields: [ + ['ecmaVersion', [3, 5, 6], x => Number(x)], + ['sourceType', ['script', 'module']], + 'allowReserved', + 'allowReturnOutsideFunction', + 'allowImportExportEverywhere', + 'allowHashBang', + 'locations', + 'loose', + 'ranges', + 'preserveParens', + 'plugins.jsx', + ], +}; + +export default { + ...getBase(defaultOptions, settingsConfiguration), + + id: `acorn@${pkg.version}`, + version: `${pkg.version}`, +}; diff --git a/registry/tools/acorn/v3.js b/registry/tools/acorn/v3.js new file mode 100644 index 000000000..27b481424 --- /dev/null +++ b/registry/tools/acorn/v3.js @@ -0,0 +1,39 @@ +import getBase from './base.js'; +import pkg from 'acorn/package.json'; + +const defaultOptions = { + ecmaVersion: 7, + sourceType: 'module', + allowReserved: false, + allowReturnOutsideFunction: false, + allowImportExportEverywhere: false, + allowHashBang: false, + locations: false, + loose: false, + ranges: false, + preserveParens: false, + 'plugins.jsx': true, +}; + +const settingsConfiguration = { + fields: [ + ['ecmaVersion', [3, 5, 6, 7], x => Number(x)], + ['sourceType', ['script', 'module']], + 'allowReserved', + 'allowReturnOutsideFunction', + 'allowImportExportEverywhere', + 'allowHashBang', + 'locations', + 'loose', + 'ranges', + 'preserveParens', + 'plugins.jsx', + ], +}; + +export default { + ...getBase(defaultOptions, settingsConfiguration), + + id: `acorn@${pkg.version}`, + version: `${pkg.version}`, +}; diff --git a/registry/tools/acorn/v4.js b/registry/tools/acorn/v4.js new file mode 100644 index 000000000..f7229fc6b --- /dev/null +++ b/registry/tools/acorn/v4.js @@ -0,0 +1,39 @@ +import getBase from './base.js'; +import pkg from 'acorn/package.json'; + +const defaultOptions = { + ecmaVersion: 8, + sourceType: 'module', + allowReserved: false, + allowReturnOutsideFunction: false, + allowImportExportEverywhere: false, + allowHashBang: false, + locations: false, + loose: false, + ranges: false, + preserveParens: false, + 'plugins.jsx': true, +}; + +const settingsConfiguration = { + fields: [ + ['ecmaVersion', [3, 5, 6, 7, 8], x => Number(x)], + ['sourceType', ['script', 'module']], + 'allowReserved', + 'allowReturnOutsideFunction', + 'allowImportExportEverywhere', + 'allowHashBang', + 'locations', + 'loose', + 'ranges', + 'preserveParens', + 'plugins.jsx', + ], +}; + +export default { + ...getBase(defaultOptions, settingsConfiguration), + + id: `acorn@${pkg.version}`, + version: `${pkg.version}`, +}; diff --git a/registry/tools/babylon/v6/index.js b/registry/tools/babylon/v6/index.js index f94b7445b..d25a51753 100644 --- a/registry/tools/babylon/v6/index.js +++ b/registry/tools/babylon/v6/index.js @@ -44,7 +44,7 @@ export const parserSettingsConfiguration = { }; export default { - ...defaultParserInterface, + //...defaultParserInterface, id: ID, displayName: ID, diff --git a/registry/utils/SettingsRenderer.js b/registry/utils/SettingsRenderer.js new file mode 100644 index 000000000..072a17c01 --- /dev/null +++ b/registry/utils/SettingsRenderer.js @@ -0,0 +1,125 @@ +import React from 'react'; + +const identity = v => v; + +function valuesFromArray(settings) { + return settings.reduce( + (obj, name) => ( + (obj[name] = settings.indexOf(name) > -1), + obj + ), + {} + ); +} + +function getValuesFromSettings(settings) { + if (Array.isArray(settings)) { + return valuesFromArray(settings); + } + return settings; +} + +function defaultUpdater(settings, name, value) { + return {...settings, [name]: value}; +} + +function arrayUpdater(settings, name, value) { + settings = new Set(settings); + if (value) { + settings.add(name); + } else { + settings.delete(name); + } + return Array.from(settings); +} + +function getUpdateStrategy(settings) { + if (Array.isArray(settings)) { + return arrayUpdater; + } + return defaultUpdater; +} + +export default function SettingsRenderer(props) { + const {settingsConfiguration, parserSettings, onChange} = props; + const { + title, + fields, + required = new Set(), + update=getUpdateStrategy(parserSettings), + } = settingsConfiguration; + const values = + (settingsConfiguration.values || getValuesFromSettings)(parserSettings); + + return ( +
+ {title ?

{title}

: null} +
    + {fields.map(setting => { + if (typeof setting === 'string') { + return ( +
  • + +
  • + ); + } else if(Array.isArray(setting)) { + const [fieldName, options, converter=identity] = setting; + return ( +
  • + +
  • + ); + } else if (setting && typeof setting === 'object') { + return ( + onChange( + {...parserSettings, [setting.key]: settings} + ) + } + /> + ); + } + })} +
+
+ ); +} + +SettingsRenderer.propTypes = { + settingsConfiguration: React.PropTypes.object.isRequired, + parserSettings: React.PropTypes.oneOfType([ + React.PropTypes.object, + React.PropTypes.array, + ]).isRequired, + onChange: React.PropTypes.func.isRequired, +}; diff --git a/registry/utils/defaultParserInterface.js b/registry/utils/defaultParserInterface.js new file mode 100644 index 000000000..beba17a49 --- /dev/null +++ b/registry/utils/defaultParserInterface.js @@ -0,0 +1,29 @@ +export default { + _ignoredProperties: new Set(), + locationProps: new Set(), + + opensByDefault(/*node, key*/) { + return false; + }, + + nodeToRange(node) { + return node.range; + }, + + getNodeName(node) { + return node.type; + }, + + *forEachProperty(node) { + for (let prop in node) { + if (this._ignoredProperties.has(prop)) { + continue; + } + yield { + value: node[prop], + key: prop, + computed: false, + } + } + }, +}; diff --git a/registry/yarn.lock b/registry/yarn.lock new file mode 100644 index 000000000..f231061d7 --- /dev/null +++ b/registry/yarn.lock @@ -0,0 +1,145 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +async@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" + +bee-queue@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/bee-queue/-/bee-queue-0.3.0.tgz#83928b81156fd97ec756cad1bb5d47f222cd77d4" + dependencies: + redis "1.0.0" + +colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-1.0.0.tgz#4246a4cd45497d2ed57e6e4b22167d3864b23679" + dependencies: + any-promise "^1.0.0" + fs-extra "^1.0.0" + mz "^2.3.1" + thenify-all "^1.6.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +mz@^2.3.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +redis@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redis/-/redis-1.0.0.tgz#5612d832b2535a8c0e8d81b42c63af330d3bb677" + +semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +stack-trace@0.0.x: + version "0.0.9" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" + +thenify-all@^1.0.0, thenify-all@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.2.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" + dependencies: + any-promise "^1.0.0" + +whatwg-fetch@>=0.10.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" + +winston@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" + dependencies: + async "~1.0.0" + colors "1.0.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + stack-trace "0.0.x" diff --git a/server/handlers/tools.js b/server/handlers/tools.js index 3ac789763..2341aeb14 100644 --- a/server/handlers/tools.js +++ b/server/handlers/tools.js @@ -8,7 +8,6 @@ const path = require('path'); const redis = require('redis'); const BUNDLE_DIR = path.resolve(constants.BUNDLE_DIR); -const REGISTRY_DIR = path.resolve(constants.REGISTRY); const client = redis.createClient(); const buildQueue = new Queue('build'); @@ -17,7 +16,8 @@ module.exports = express.Router() .get('/:tool/:version', buildTool); function buildTool(req, res, next) { - const {tool, version} = req.params; + let {tool, version} = req.params; + version = version.replace(/\.js$/, ''); const bundlePath = path.join(BUNDLE_DIR, `${tool}@${version}.js`); const buildKey = `ae:build:${tool}`; diff --git a/server/package.json b/server/package.json index 16a7fde52..ecc72ca7d 100644 --- a/server/package.json +++ b/server/package.json @@ -5,25 +5,12 @@ "private": true, "author": "Felix Kling", "dependencies": { - "babel-plugin-transform-object-rest-spread": "^6.22.0", - "babel-preset-es2015-rollup": "^3.0.0", - "babel-preset-react": "^6.22.0", "bee-queue": "^0.3.0", "body-parser": "^1.15.2", "express": "^4.14.0", - "fs-extra": "^2.0.0", - "fs-promise": "^1.0.0", "github-api": "https://github.com/fkling/github.git", "isomorphic-fetch": "^2.2.1", "redis": "^2.6.5", - "rollup": "^0.41.4", - "rollup-plugin-babel": "^2.7.1", - "rollup-plugin-commonjs": "^7.0.0", - "rollup-plugin-filesize": "^1.0.1", - "rollup-plugin-json": "^2.1.0", - "rollup-plugin-node-resolve": "^2.0.0", - "rollup-plugin-uglify": "^1.0.1", - "semver": "^5.3.0", "winston": "^2.3.1" }, "scripts": { diff --git a/server/yarn.lock b/server/yarn.lock index 8fb83c242..e09aef7e0 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -9,38 +9,10 @@ accepts@~1.3.3: mime-types "~2.1.11" negotiator "0.6.1" -acorn@^4.0.1: - version "4.0.8" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.8.tgz#f41e52020ce78118a3c68ed0e9215eb8fc68b5b1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" @@ -51,496 +23,6 @@ axios@^0.15.2: dependencies: follow-redirects "1.0.0" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-core@6, babel-core@^6.22.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" - dependencies: - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - -babel-helper-builder-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - esutils "^2.0.0" - lodash "^4.2.0" - -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" - dependencies: - babel-helper-hoist-variables "^6.22.0" - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-define-map@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" - dependencies: - babel-helper-function-name "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" - -babel-helper-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" - dependencies: - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-optimise-call-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" - -babel-helper-replace-supers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" - dependencies: - babel-helper-optimise-call-expression "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" - -babel-messages@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-external-helpers@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" - -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.22.0, babel-plugin-transform-es2015-classes@^6.9.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" - dependencies: - babel-helper-define-map "^6.22.0" - babel-helper-function-name "^6.22.0" - babel-helper-optimise-call-expression "^6.22.0" - babel-helper-replace-supers "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" - -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" - dependencies: - babel-helper-function-name "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - -babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" - dependencies: - babel-plugin-transform-strict-mode "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" - dependencies: - babel-helper-hoist-variables "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - -babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" - dependencies: - babel-helper-replace-supers "^6.22.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" - dependencies: - babel-helper-call-delegate "^6.22.0" - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" - dependencies: - babel-helper-regex "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" - dependencies: - babel-helper-regex "^6.22.0" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-display-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" - dependencies: - babel-helper-builder-react-jsx "^6.22.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" - dependencies: - regenerator-transform "0.9.8" - -babel-plugin-transform-strict-mode@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - -babel-preset-es2015-rollup@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015-rollup/-/babel-preset-es2015-rollup-3.0.0.tgz#854b63ecde2ee98cac40e882f67bfcf185b1f24a" - dependencies: - babel-plugin-external-helpers "^6.18.0" - babel-preset-es2015 "^6.3.13" - require-relative "^0.8.7" - -babel-preset-es2015@^6.3.13: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.22.0" - babel-plugin-transform-es2015-classes "^6.22.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" - babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.22.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.22.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - -babel-preset-react@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" - dependencies: - babel-plugin-syntax-flow "^6.3.13" - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-flow-strip-types "^6.22.0" - babel-plugin-transform-react-display-name "^6.22.0" - babel-plugin-transform-react-jsx "^6.22.0" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - -babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" - dependencies: - babel-core "^6.22.0" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.22.0, babel-traverse@^6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.19.0, babel-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^6.11.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - bee-queue@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/bee-queue/-/bee-queue-0.3.0.tgz#83928b81156fd97ec756cad1bb5d47f222cd77d4" @@ -562,79 +44,14 @@ body-parser@^1.15.2: raw-body "~2.1.7" type-is "~1.6.13" -boxen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.2.0.tgz#84f88e2512e2c3eebacee799932fed0226de6dcb" - dependencies: - chalk "^1.1.1" - filled-array "^1.0.0" - object-assign "^4.0.1" - repeating "^2.0.0" - string-width "^1.0.1" - widest-line "^1.0.0" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -browser-resolve@^1.11.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - -builtin-modules@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.1.0, chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - content-disposition@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" @@ -643,10 +60,6 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -655,30 +68,16 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - cycle@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" -debug@^2.1.1, debug@^2.2.0, debug@~2.2.0: +debug@^2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: ms "0.7.1" -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-assign@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" - dependencies: - is-obj "^1.0.0" - depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -687,20 +86,10 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -719,22 +108,6 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -estree-walker@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" - -estree-walker@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.0.tgz#f67ca8f57b9ed66d886af816c099c779b315d4db" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - etag@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" @@ -774,14 +147,6 @@ eyes@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" -filesize@^3.2.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.4.tgz#742fc7fb6aef4ee3878682600c22f840731e1fda" - -filled-array@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" - finalhandler@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" @@ -806,30 +171,6 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs-extra@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - -fs-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-1.0.0.tgz#4246a4cd45497d2ed57e6e4b22167d3864b23679" - dependencies: - any-promise "^1.0.0" - fs-extra "^1.0.0" - mz "^2.3.1" - thenify-all "^1.6.0" - "github-api@https://github.com/fkling/github.git": version "3.1.0" resolved "https://github.com/fkling/github.git#e0beb8eee48f2a0d0583a17fa96a309ba5f6afa4" @@ -839,33 +180,6 @@ fs-promise@^1.0.0: js-base64 "^2.1.9" utf8 "^2.1.1" -globals@^9.0.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -gzip-size@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - dependencies: - duplexer "^0.1.1" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - http-errors@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" @@ -882,36 +196,10 @@ inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -invariant@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - ipaddr.js@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -931,64 +219,6 @@ js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lodash@^4.2.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -magic-string@^0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.0.tgz#198948217254e3e0b93080e01146b7c73b2a06b2" - dependencies: - vlq "^0.2.1" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -1015,34 +245,10 @@ mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" -mz@^2.3.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -1054,44 +260,20 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" -private@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" - proxy-addr@~1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" @@ -1135,134 +317,6 @@ redis@^2.6.5: redis-commands "^1.2.0" redis-parser "^2.0.0" -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" - -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -require-relative@^0.8.7: - version "0.8.7" - resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.6, resolve@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rollup-plugin-babel@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" - dependencies: - babel-core "6" - babel-plugin-transform-es2015-classes "^6.9.0" - object-assign "^4.1.0" - rollup-pluginutils "^1.5.0" - -rollup-plugin-commonjs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-7.0.0.tgz#510762d5c423c761cd16d8e8451715b39f0ceb08" - dependencies: - acorn "^4.0.1" - estree-walker "^0.3.0" - magic-string "^0.19.0" - resolve "^1.1.7" - rollup-pluginutils "^1.5.1" - -rollup-plugin-filesize@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-1.0.1.tgz#0fe0a10ae2a8b52c7318f16eb8e87d75301920b7" - dependencies: - boxen "^0.2.0" - chalk "^1.1.1" - deep-assign "^2.0.0" - filesize "^3.2.0" - gzip-size "^3.0.0" - -rollup-plugin-json@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-2.1.0.tgz#7f8e1b2b156932dd934b938dc5547e4118d4121f" - dependencies: - rollup-pluginutils "^1.5.2" - -rollup-plugin-node-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.0.0.tgz#07e0ae94ac002a3ea36e8f33ca121d9f836b1309" - dependencies: - browser-resolve "^1.11.0" - builtin-modules "^1.1.0" - resolve "^1.1.6" - -rollup-plugin-uglify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-1.0.1.tgz#11d0b0c8bcd2d07e6908f74fd16b0152390b922a" - dependencies: - uglify-js "^2.6.1" - -rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1, rollup-pluginutils@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" - dependencies: - estree-walker "^0.2.1" - minimatch "^3.0.2" - -rollup@^0.41.4: - version "0.41.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.4.tgz#a970580176329f9ead86854d7fd4c46de752aef8" - dependencies: - source-map-support "^0.4.0" - -semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - send@0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" @@ -1294,20 +348,6 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -source-map-support@^0.4.0, source-map-support@^0.4.2: - version "0.4.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" - dependencies: - source-map "^0.5.3" - -source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - stack-trace@0.0.x: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" @@ -1316,40 +356,6 @@ stack-trace@0.0.x: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -thenify-all@^1.0.0, thenify-all@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.2.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" - dependencies: - any-promise "^1.0.0" - -to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" - type-is@~1.6.13: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" @@ -1357,19 +363,6 @@ type-is@~1.6.13: media-typer "0.3.0" mime-types "~2.1.13" -uglify-js@^2.6.1: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -1386,24 +379,10 @@ vary@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" -vlq@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" - whatwg-fetch@>=0.10.0: version "2.0.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" - dependencies: - string-width "^1.0.1" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - winston@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" @@ -1414,16 +393,3 @@ winston@^2.3.1: eyes "0.1.x" isstream "0.1.x" stack-trace "0.0.x" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" From 36e6ed42004256b209d4e13cff2b12c2c97752b8 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Wed, 8 Feb 2017 23:38:20 -0800 Subject: [PATCH 04/10] Restructure registry; switch to webpack --- registry/build-worker.js | 1 - registry/build.js | 119 +- registry/package.json | 22 +- registry/tools/acorn/base.js | 108 +- registry/tools/acorn/package.js | 24 +- registry/tools/acorn/v2.js | 17 +- registry/tools/acorn/v3.js | 17 +- registry/tools/acorn/v4.js | 17 +- registry/tools/babylon/base.js | 7 + registry/tools/babylon/package.js | 22 + registry/tools/babylon/{v5/index.js => v5.js} | 12 +- registry/tools/babylon/v5/package.json | 8 - registry/tools/babylon/{v6/index.js => v6.js} | 14 +- registry/tools/babylon/v6/package.json | 8 - .../utils/defaultESTreeParserInterface.js | 15 + registry/webpack.default.conf.js | 52 + registry/yarn.lock | 3465 ++++++++++++++++- 17 files changed, 3689 insertions(+), 239 deletions(-) create mode 100644 registry/tools/babylon/base.js create mode 100644 registry/tools/babylon/package.js rename registry/tools/babylon/{v5/index.js => v5.js} (90%) delete mode 100644 registry/tools/babylon/v5/package.json rename registry/tools/babylon/{v6/index.js => v6.js} (86%) delete mode 100644 registry/tools/babylon/v6/package.json create mode 100644 registry/utils/defaultESTreeParserInterface.js create mode 100644 registry/webpack.default.conf.js diff --git a/registry/build-worker.js b/registry/build-worker.js index a356c1664..e542f06c2 100644 --- a/registry/build-worker.js +++ b/registry/build-worker.js @@ -23,7 +23,6 @@ buildQueue.process(2, (job, done) => { } ) .on('close', code => { - console.log(`Done building.`); if (code) { const error = new Error( `Unable to build package ${tool}@${version}` diff --git a/registry/build.js b/registry/build.js index a79d15144..ce82cfaef 100755 --- a/registry/build.js +++ b/registry/build.js @@ -1,23 +1,26 @@ #!/usr/bin/env node +/* eslint no-console: 0 */ require('isomorphic-fetch'); const fs = require('fs-promise'); const path = require('path'); const semver = require('semver'); const child_process = require('child_process'); -const rollup = require('rollup'); +const webpack = require('webpack'); const REGISTRY_DIR = path.join(__dirname, 'tools'); const BUNDLE_DIR = process.env.BUNDLE_DIR; const toolID = process.argv[2]; -const version = process.argv[3]; +const version = process.argv[3] || 'latest'; if (!(toolID && version)) { console.error('You need to provide a tool ID and a version to build'); } +const diff = measure(); buildVersion(toolID, version) + .then(() => console.log(`Built in ${diff().toFixed(2)} sec.`)) .catch(error => { console.log(error); process.exit(1); @@ -28,9 +31,12 @@ function buildVersion(toolID, version) { if (!exists(toolDir)) { return Promise.reject(new Error(`${toolID} doesn't exist.`)); } + const toolConfig = require(path.resolve(path.join(toolDir, 'package.js'))); + const latest = version === 'latest'; return fetchInfo(toolID, version).then(npmPkg => { - const toolConfig = require(path.resolve(path.join(toolDir, 'package.js'))); + const version = npmPkg.version; + const versionConfig = toolConfig.versions.find( config => semver.satisfies(version, config.dependencies[toolID]) ); @@ -43,7 +49,8 @@ function buildVersion(toolID, version) { bundleVersion( cacheDir, versionConfig, - npmPkg + npmPkg, + latest ).then(() => fs.remove(cacheDir)) ); }) @@ -92,62 +99,35 @@ function preparePackage(npmPkg, packagePath) { }); } -function bundleVersion(packagePath, versionConfig, npmPkg) { - const localRollupConfig = versionConfig.getRollupConfig(packagePath); - - return rollup.rollup({ - entry: path.join(packagePath, versionConfig.main), - interop: false, - plugins: [ - require('rollup-plugin-json')(), - require('rollup-plugin-babel')({ - exclude: path.join(packagePath, 'node_modules/**'), - presets: [ - require('babel-preset-react'), - ], - plugins: [ - [ - require('babel-plugin-transform-object-rest-spread'), - {"useBuiltIns": true}, - ], - ], - }), - require('rollup-plugin-node-resolve')(), - require('rollup-plugin-commonjs')(Object.assign( - {}, - localRollupConfig['rollup-plugin-commonjs'] || {} - )), - require('rollup-plugin-babel')({ - exclude: path.join(packagePath, 'node_modules/**'), - presets: [ - require('babel-preset-es2015-rollup'), - ], - plugins: [ - require('babel-plugin-external-helpers'), - ], - }), - require('rollup-plugin-string')({ - include: path.join(REGISTRY_DIR, '..', '**', '*.txt'), - exclude: path.join(REGISTRY_DIR, '**', 'node_modules', '**'), - }), - //require('rollup-plugin-uglify')(), - require('rollup-plugin-filesize')(), - ], - external: [ - 'react', - ], - }) - .then(bundle => ( - fs.ensureDir(BUNDLE_DIR) - .then(() => bundle.write({ - format: 'amd', - dest: path.join(BUNDLE_DIR, `${npmPkg.name}@${npmPkg.version}.js`), - exports: 'named', - moduleName: `${npmPkg.name}/${npmPkg.version}`, - banner: '(function(define) {', - footer: '}(astexplorerDefine));', - })) - )); +function bundleVersion(packagePath, versionConfig, npmPkg, latest) { + return new Promise((resolve, reject) => { + const name = `${npmPkg.name}@${latest ? 'latest' : npmPkg.version}`; + webpack( + Object.assign( + versionConfig.webpackConfig, + { + entry: path.join(packagePath, versionConfig.main), + context: __dirname, + output: { + filename: `${name}.js`, + path: BUNDLE_DIR, + libraryTarget: 'amd', + }, + } + ), + (err, stats) => { + if (err) { + return reject(err); + } + if (stats.hasErrors()) { + console.error(stats.toJson().errors); + return reject('Bundle compilation error'); + } + resolve(); + } + ); + }); + } function install(npmVersion, toolDir, versionConfig) { @@ -158,10 +138,10 @@ function install(npmVersion, toolDir, versionConfig) { return fs.ensureDir(cacheDir) .then(() => Promise.all([ fs.copy(toolDir, cacheDir), - fs.writeJSON(packagePath, versionConfig), + fs.writeJSON(packagePath, pick(versionConfig, 'main', 'dependencies')), ])) .then(() => run( - `yarn add --prefer-offline --exact --no-lockfile --prod --no-progress ${npmVersion.name}@${npmVersion.version}`, + `yarn add --prefer-offline --exact --no-lockfile --no-bin-links --prod --no-progress ${npmVersion.name}@${npmVersion.version}`, {cwd: cacheDir} )) .then(() => run( @@ -171,6 +151,14 @@ function install(npmVersion, toolDir, versionConfig) { .then(() => cacheDir); } +function pick(obj, ...props) { + const result = {}; + for (var prop in obj) { + result[prop] = obj[prop]; + } + return result; +} + function getPackagePath(p) { return path.join(p, 'package.json'); } @@ -217,3 +205,10 @@ function run(command, options) { function withoutHidden(p) { return p[0] !== '.'; } + +function measure() { + const start = Date.now(); + return function() { + return (Date.now() - start) / 1000; + } +} diff --git a/registry/package.json b/registry/package.json index 43f59b627..2fc83c9e2 100644 --- a/registry/package.json +++ b/registry/package.json @@ -1,9 +1,29 @@ { "dependencies": { + "babel-core": "^6.22.1", + "babel-loader": "^6.2.10", + "babel-plugin-transform-object-rest-spread": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-es2015": "^6.22.0", + "babel-preset-react": "^6.22.0", + "babel-preset-stage-0": "^6.22.0", "bee-queue": "^0.3.0", + "eslint": "^3.11.1", + "eslint-import-resolver-webpack": "^0.8.0", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-react": "^6.8.0", "fs-promise": "^1.0.0", + "imports-loader": "^0.7.0", "isomorphic-fetch": "^2.2.1", + "raw-loader": "^0.5.1", "semver": "^5.3.0", - "winston": "^2.3.1" + "webpack": "^2.2.1", + "winston": "^2.3.1", + "wrapper-webpack-plugin": "^0.1.11" + }, + "scripts": { + "start-worker": "BUNDLE_DIR=../bundles node build-worker.js", + "lint": "eslint ./" } } diff --git a/registry/tools/acorn/base.js b/registry/tools/acorn/base.js index 606c4f63e..fefa56fc3 100644 --- a/registry/tools/acorn/base.js +++ b/registry/tools/acorn/base.js @@ -1,72 +1,68 @@ import React from 'react'; -import defaultParserInterface from '../../utils/defaultParserInterface'; +import defaultParserInterface from '../../utils/defaultESTreeParserInterface.js'; import SettingsRenderer from '../../utils/SettingsRenderer'; import * as category from '../../categories/js'; import codeExample from '../../categories/js/codeExample.txt'; import pkg from 'acorn/package.json'; -import * as acorn from 'acorn'; -import {parse_dammit} from 'acorn/dist/acorn_loose.js'; -import jsxInject from 'acorn-jsx/inject'; const ID = 'acorn'; -console.log(acorn); -console.log(acorn.parse); -export default function getBase(defaultOptions, settingsConfiguration) { - return { - ...defaultParserInterface, +export default { + ...defaultParserInterface, - displayName: ID, - homepage: pkg.homepage, - category, - codeExample, + displayName: ID, + homepage: pkg.homepage, + category, + codeExample, - locationProps: new Set(['range', 'loc', 'start', 'end']), + locationProps: new Set(['range', 'loc', 'start', 'end']), - loadParser(callback) { - callback({ - acorn: jsxInject(acorn), - parse_dammit, - }); - }, + // loadParser needs to be implement in the "child" objects + // and pass `parse` and `loose` to the callback + // + // loadParser(callback) { + // callback({ + // parse: jsxInject(acorn).parse, + // loose: parse_dammit, + // }); + // }, - parse(parsers, code, options={}) { - options = Object.assign({}, defaultOptions, options); - const parser = options.loose ? - parsers.parse_dammit : - parsers.acorn.parse; + parse(parser, code, options={}) { + options = Object.assign({}, this.defaultOptions, options); + const parse = options.loose ? + parser.loose : + parser.parse; - // put deep option into correspondent place - return parser(code, { - ...options, - plugins: options['plugins.jsx'] && !options.loose ? { jsx: true } : {}, - }); - }, + // put deep option into correspondent place + return parse(code, { + ...options, + plugins: options['plugins.jsx'] && !options.loose ? { jsx: true } : {}, + }); + }, - nodeToRange(node) { - if (typeof node.start === 'number') { - return [node.start, node.end]; - } - }, + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + }, - renderSettings(parserSettings, onChange) { - return ( - - ); - }, - }; -} + renderSettings(parserSettings, onChange) { + return ( + + ); + }, +}; diff --git a/registry/tools/acorn/package.js b/registry/tools/acorn/package.js index 7ed1136ec..fcae7f04d 100644 --- a/registry/tools/acorn/package.js +++ b/registry/tools/acorn/package.js @@ -1,22 +1,8 @@ -const path = require('path'); - -function getRollupConfig(packageDir) { - return { - 'rollup-plugin-commonjs': { - namedExports: { - [path.join(packageDir, 'node_modules/acorn/dist/acorn_loose.js')]: [ - 'parse_dammit', - ], - [path.join(packageDir, 'node_modules/acorn/dist/acorn.js')]: [ - 'parse', - ], - }, - }, - }; -} +const webpackConfig = require('../../webpack.default.conf'); module.exports = { displayName: 'acorn', + homepage: 'https://github.com/ternjs/acorn', versions: [ { main: './v2.js', @@ -24,7 +10,7 @@ module.exports = { acorn: '^2.0.0', 'acorn-jsx': '^2.0.0' }, - getRollupConfig, + webpackConfig, }, { main: './v3.js', @@ -32,7 +18,7 @@ module.exports = { acorn: '^3.0.0', 'acorn-jsx': '^3.0.0' }, - getRollupConfig, + webpackConfig, }, { main: './v4.js', @@ -40,7 +26,7 @@ module.exports = { acorn: '^4.0.0', 'acorn-jsx': '^3.0.0' }, - getRollupConfig, + webpackConfig, }, ], }; diff --git a/registry/tools/acorn/v2.js b/registry/tools/acorn/v2.js index a380c2b42..13fbe700f 100644 --- a/registry/tools/acorn/v2.js +++ b/registry/tools/acorn/v2.js @@ -1,6 +1,10 @@ -import getBase from './base.js'; +import base from './base.js'; import pkg from 'acorn/package.json'; +import * as acorn from 'acorn'; +import {parse_dammit} from 'imports-loader?acorn!acorn/dist/acorn_loose.js'; +import jsxInject from 'acorn-jsx/inject'; + const defaultOptions = { ecmaVersion: 6, sourceType: 'module', @@ -32,8 +36,17 @@ const settingsConfiguration = { }; export default { - ...getBase(defaultOptions, settingsConfiguration), + ...base, id: `acorn@${pkg.version}`, version: `${pkg.version}`, + defaultOptions, + settingsConfiguration, + + loadParser(callback) { + callback({ + loose: parse_dammit, + parse: jsxInject(acorn).parse, + }); + }, }; diff --git a/registry/tools/acorn/v3.js b/registry/tools/acorn/v3.js index 27b481424..0b05bd6bc 100644 --- a/registry/tools/acorn/v3.js +++ b/registry/tools/acorn/v3.js @@ -1,6 +1,10 @@ -import getBase from './base.js'; +import base from './base.js'; import pkg from 'acorn/package.json'; +import * as acorn from 'acorn'; +import {parse_dammit} from 'acorn/dist/acorn_loose.js'; +import jsxInject from 'acorn-jsx/inject'; + const defaultOptions = { ecmaVersion: 7, sourceType: 'module', @@ -32,8 +36,17 @@ const settingsConfiguration = { }; export default { - ...getBase(defaultOptions, settingsConfiguration), + ...base, id: `acorn@${pkg.version}`, version: `${pkg.version}`, + defaultOptions, + settingsConfiguration, + + loadParser(callback) { + callback({ + loose: parse_dammit, + parse: jsxInject(acorn).parse, + }); + }, }; diff --git a/registry/tools/acorn/v4.js b/registry/tools/acorn/v4.js index f7229fc6b..cad29d255 100644 --- a/registry/tools/acorn/v4.js +++ b/registry/tools/acorn/v4.js @@ -1,6 +1,10 @@ -import getBase from './base.js'; +import base from './base.js'; import pkg from 'acorn/package.json'; +import * as acorn from 'acorn'; +import {parse_dammit} from 'acorn/dist/acorn_loose.js'; +import jsxInject from 'acorn-jsx/inject'; + const defaultOptions = { ecmaVersion: 8, sourceType: 'module', @@ -32,8 +36,17 @@ const settingsConfiguration = { }; export default { - ...getBase(defaultOptions, settingsConfiguration), + ...base, id: `acorn@${pkg.version}`, version: `${pkg.version}`, + defaultOptions, + settingsConfiguration, + + loadParser(callback) { + callback({ + loose: parse_dammit, + parse: jsxInject(acorn).parse, + }); + }, }; diff --git a/registry/tools/babylon/base.js b/registry/tools/babylon/base.js new file mode 100644 index 000000000..6d5ee1775 --- /dev/null +++ b/registry/tools/babylon/base.js @@ -0,0 +1,7 @@ +import * as category from '../../categories/js'; +import codeExample from '../../categories/js/codeExample.txt'; + +export default { + category, + codeExample, +}; diff --git a/registry/tools/babylon/package.js b/registry/tools/babylon/package.js new file mode 100644 index 000000000..465dbd4b5 --- /dev/null +++ b/registry/tools/babylon/package.js @@ -0,0 +1,22 @@ +const webpackConfig = require('../../webpack.default.conf'); + +module.exports = { + displayName: 'babylon', + homepage: 'https://github.com/babel/babylon', + versions: [ + { + main: './v5.js', + dependencies: { + babylon: '^5.0.0', + }, + webpackConfig, + }, + { + main: './v6.js', + dependencies: { + babylon: '^6.0.0', + }, + webpackConfig, + }, + ], +}; diff --git a/registry/tools/babylon/v5/index.js b/registry/tools/babylon/v5.js similarity index 90% rename from registry/tools/babylon/v5/index.js rename to registry/tools/babylon/v5.js index e78b92e27..1c344cbc7 100644 --- a/registry/tools/babylon/v5/index.js +++ b/registry/tools/babylon/v5.js @@ -1,8 +1,9 @@ import React from 'react'; -// import defaultParserInterface from './utils/defaultESTreeParserInterface'; +import base from './base'; +import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; import pkg from 'babylon/package.json'; -import babylon from 'babylon'; -import SettingsRenderer from 'SettingsRenderer'; +import {parse} from 'babylon'; +import SettingsRenderer from '../../utils/SettingsRenderer'; const ID = 'babylon'; const defaultOptions = { @@ -59,7 +60,8 @@ const parserSettingsConfiguration = { }; export default { - //...defaultParserInterface, + ...defaultParserInterface, + ...base, id: ID, displayName: ID, @@ -68,7 +70,7 @@ export default { locationProps: new Set(['loc', 'start', 'end']), loadParser(callback) { - callback(babylon); + callback({parse}); }, parse(babylon, code, parserSettings) { diff --git a/registry/tools/babylon/v5/package.json b/registry/tools/babylon/v5/package.json deleted file mode 100644 index 9620ec976..000000000 --- a/registry/tools/babylon/v5/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "babylon", - "version": "1.0.0", - "private": true, - "dependencies": { - "babylon": "^5.0.0" - } -} diff --git a/registry/tools/babylon/v6/index.js b/registry/tools/babylon/v6.js similarity index 86% rename from registry/tools/babylon/v6/index.js rename to registry/tools/babylon/v6.js index d25a51753..1fc5b6fb9 100644 --- a/registry/tools/babylon/v6/index.js +++ b/registry/tools/babylon/v6.js @@ -1,10 +1,11 @@ import React from 'react'; -// import defaultParserInterface from './utils/defaultESTreeParserInterface'; +import base from './base'; +import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; import pkg from 'babylon/package.json'; -import babylon from 'babylon'; -import SettingsRenderer from 'SettingsRenderer'; +import {parse} from 'babylon'; +import SettingsRenderer from '../../utils/SettingsRenderer'; -const ID = 'babylon6'; +const ID = 'babylon'; export const defaultOptions = { sourceType: 'module', allowImportExportEverywhere: false, @@ -44,7 +45,8 @@ export const parserSettingsConfiguration = { }; export default { - //...defaultParserInterface, + ...defaultParserInterface, + ...base, id: ID, displayName: ID, @@ -53,7 +55,7 @@ export default { locationProps: new Set(['loc', 'start', 'end']), loadParser(callback) { - callback(babylon); + callback({parse}); }, parse(babylon, code, options) { diff --git a/registry/tools/babylon/v6/package.json b/registry/tools/babylon/v6/package.json deleted file mode 100644 index 6629621c6..000000000 --- a/registry/tools/babylon/v6/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "babylon", - "version": "1.0.0", - "private": true, - "dependencies": { - "babylon": "^6.0.0" - } -} diff --git a/registry/utils/defaultESTreeParserInterface.js b/registry/utils/defaultESTreeParserInterface.js new file mode 100644 index 000000000..be8c2e295 --- /dev/null +++ b/registry/utils/defaultESTreeParserInterface.js @@ -0,0 +1,15 @@ +import defaultParserInterface from './defaultParserInterface'; +export default { + ...defaultParserInterface, + + opensByDefault(node, key) { + return ( + node.type === 'Program' || + key === 'body' || + key === 'elements' || // array literals + key === 'declarations' || // variable declaration + key === 'expression' + ); + }, + +}; diff --git a/registry/webpack.default.conf.js b/registry/webpack.default.conf.js new file mode 100644 index 000000000..ba1747f90 --- /dev/null +++ b/registry/webpack.default.conf.js @@ -0,0 +1,52 @@ +const webpack = require('webpack'); + +module.exports = { + module: { + rules: [ + { + test: /\.txt$/, + exclude: /node_modules/, + loader: 'raw-loader', + }, + { + test: /\.jsx?$/, + exclude: /node_modules/, + loader: 'babel-loader', + options: { + babelrc: false, + presets: [ + 'babel-preset-es2015', + 'babel-preset-react', + ], + plugins: [ + [ + 'babel-plugin-transform-object-rest-spread', + {'use-builtin': true}, + ], + 'babel-plugin-transform-regenerator', + ], + }, + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env.NODE_ENV': JSON.stringify('production'), + }), + new (require('wrapper-webpack-plugin'))({ + header: '(function(define) {', + footer: '}(astexplorerDefine));', + }), + //new webpack.optimize.UglifyJsPlugin(), + ], + node: { + child_process: 'empty', + fs: 'empty', + module: 'empty', + net: 'empty', + readline: 'empty', + }, + externals: { + 'react': 'react', + }, +}; diff --git a/registry/yarn.lock b/registry/yarn.lock index f231061d7..f58abbe62 100644 --- a/registry/yarn.lock +++ b/registry/yarn.lock @@ -2,121 +2,3196 @@ # yarn lockfile v1 +abbrev@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +acorn-dynamic-import@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.1.tgz#23f671eb6e650dab277fef477c321b1178a8cca2" + dependencies: + acorn "^4.0.3" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" + +ajv@^4.7.0: + version "4.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.0.tgz#4d8f047a318604e18e3c06a0e52230d3d19f147b" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array.prototype.find@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.3.tgz#08c3ec33e32ec4bab362a2958e686ae92f59271d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + async@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.22.0, babel-core@^6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.22.0" + babel-helpers "^6.22.0" + babel-messages "^6.22.0" + babel-register "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.1" + babel-types "^6.22.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" + dependencies: + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-bindify-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" + dependencies: + babel-helper-explode-assignable-expression "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-builder-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-define-map@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-explode-class@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" + dependencies: + babel-helper-bindify-decorators "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" + dependencies: + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-get-function-arity@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-hoist-variables@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-optimise-call-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-helper-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helper-replace-supers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" + dependencies: + babel-helper-optimise-call-expression "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-loader@^6.2.10: + version "6.2.10" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0" + dependencies: + find-cache-dir "^0.1.1" + loader-utils "^0.2.11" + mkdirp "^0.5.1" + object-assign "^4.0.1" + +babel-messages@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" + dependencies: + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" + dependencies: + babel-helper-remap-async-to-generator "^6.22.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-class-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" + dependencies: + babel-helper-function-name "^6.22.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" + dependencies: + babel-helper-explode-class "^6.22.0" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" + dependencies: + babel-helper-define-map "^6.22.0" + babel-helper-function-name "^6.22.0" + babel-helper-optimise-call-expression "^6.22.0" + babel-helper-replace-supers "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" + dependencies: + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" + dependencies: + babel-plugin-transform-strict-mode "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" + dependencies: + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-modules-umd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" + dependencies: + babel-helper-replace-supers "^6.22.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" + dependencies: + babel-helper-call-delegate "^6.22.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" + dependencies: + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-display-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" + dependencies: + babel-helper-builder-react-jsx "^6.22.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" + dependencies: + regenerator-transform "0.9.8" + +babel-plugin-transform-runtime@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz#10968d760bbf6517243081eec778e10fa828551c" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-strict-mode@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.22.0" + +babel-preset-es2015@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.22.0" + babel-plugin-transform-es2015-classes "^6.22.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-systemjs "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.22.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + +babel-preset-react@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" + dependencies: + babel-plugin-syntax-flow "^6.3.13" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-plugin-transform-react-display-name "^6.22.0" + babel-plugin-transform-react-jsx "^6.22.0" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + +babel-preset-stage-0@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" + dependencies: + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.22.0" + +babel-preset-stage-1@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" + dependencies: + babel-plugin-transform-class-constructor-call "^6.22.0" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.22.0" + +babel-preset-stage-2@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.22.0" + babel-plugin-transform-decorators "^6.22.0" + babel-preset-stage-3 "^6.22.0" + +babel-preset-stage-3@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" + dependencies: + babel-core "^6.22.0" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.22.0, babel-traverse@^6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.19.0, babel-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.15.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + bee-queue@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/bee-queue/-/bee-queue-0.3.0.tgz#83928b81156fd97ec756cad1bb5d47f222cd77d4" dependencies: - redis "1.0.0" + redis "1.0.0" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +brorand@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.0.7.tgz#6677fa5e4901bdbf9c9ec2a748e28dca407a9bfc" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.4.3: + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + +circular-json@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +colors@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +convert-source-map@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +crypto-browserify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@2.2.0, debug@^2.1.1, debug@^2.2.0, debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@1.5.0, doctrine@^1.2.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +elliptic@^6.0.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + inherits "^2.0.1" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: + version "0.10.12" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es6-iterator@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" + dependencies: + d "^0.1.1" + es5-ext "^0.10.7" + es6-symbol "3" + +es6-map@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-set "~0.1.3" + es6-symbol "~3.1.0" + event-emitter "~0.3.4" + +es6-set@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-symbol "3" + event-emitter "~0.3.4" + +es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + +es6-weak-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + dependencies: + d "^0.1.1" + es5-ext "^0.10.8" + es6-iterator "2" + es6-symbol "3" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-import-resolver-webpack@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.8.1.tgz#c7f8b4d5bd3c5b489457e5728c5db1c4ffbac9aa" + dependencies: + array-find "^1.0.0" + debug "^2.2.0" + enhanced-resolve "~0.9.0" + find-root "^0.1.1" + has "^1.0.1" + interpret "^1.0.0" + is-absolute "^0.2.3" + lodash.get "^3.7.0" + node-libs-browser "^1.0.0" + resolve "^1.2.0" + semver "^5.3.0" + +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-react@^6.8.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz#54c2e9906b76f9d10142030bdc34e9d6840a0bb2" + dependencies: + array.prototype.find "^2.0.1" + doctrine "^1.2.2" + jsx-ast-utils "^1.3.4" + +eslint@^3.11.1: + version "3.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2" + dependencies: + babel-code-frame "^6.16.0" + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.2" + escope "^3.6.0" + espree "^3.4.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.14.0" + ignore "^3.2.0" + imurmurhash "^0.1.4" + inquirer "^0.12.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "^3.5.1" + json-stable-stringify "^1.0.0" + levn "^0.3.0" + lodash "^4.0.0" + mkdirp "^0.5.0" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.7.5" + strip-bom "^3.0.0" + strip-json-comments "~2.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" + dependencies: + acorn "4.0.4" + acorn-jsx "^3.0.0" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-emitter@~0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.7" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +figures@^1.3.5: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-root@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +flat-cache@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + +fs-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-1.0.0.tgz#4246a4cd45497d2ed57e6e4b22167d3864b23679" + dependencies: + any-promise "^1.0.0" + fs-extra "^1.0.0" + mz "^2.3.1" + thenify-all "^1.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.0.17" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gauge@~2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0, globals@^9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash.js@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +ignore@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" + +imports-loader@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.0.tgz#468c04de8075941cfab28146c755c24cc1f36ccd" + dependencies: + loader-utils "^0.2.16" + source-map "^0.5.6" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + figures "^1.3.5" + lodash "^4.3.0" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@0.1.x, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@^3.5.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +jsx-ast-utils@^1.3.4: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" + dependencies: + object-assign "^4.1.0" + +kind-of@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + dependencies: + is-buffer "^1.0.2" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.11, loader-utils@^0.2.16: + version "0.2.16" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +lodash._baseget@^3.0.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/lodash._baseget/-/lodash._baseget-3.7.2.tgz#1b6ae1d5facf3c25532350a13c1197cb8bb674f4" + +lodash._topath@^3.0.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/lodash._topath/-/lodash._topath-3.8.1.tgz#3ec5e2606014f4cb97f755fe6914edd8bfc00eac" + dependencies: + lodash.isarray "^3.0.0" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.get@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-3.7.0.tgz#3ce68ae2c91683b281cc5394128303cbf75e691f" + dependencies: + lodash._baseget "^3.0.0" + lodash._topath "^3.0.0" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" + dependencies: + mime-db "~1.26.0" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +mute-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +mz@^2.3.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.3.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-libs-browser@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-1.1.1.tgz#2a38243abedd7dffcd07a97c9aca5668975a6fea" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^1.4.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.29: + version "0.6.33" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9" + dependencies: + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.1" + rc "~1.1.6" + request "^2.79.0" + rimraf "~2.5.4" + semver "~5.3.0" + tar "~2.2.1" + tar-pack "~3.3.0" + +nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +npmlog@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.1" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-asn1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" -colors@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" +pbkdf2@^3.0.3: + version "3.0.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: - iconv-lite "~0.4.13" + pinkie "^2.0.0" -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -fs-extra@^1.0.0: +pkg-dir@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" + find-up "^1.0.0" -fs-promise@^1.0.0: +pkg-up@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-1.0.0.tgz#4246a4cd45497d2ed57e6e4b22167d3864b23679" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" dependencies: - any-promise "^1.0.0" - fs-extra "^1.0.0" - mz "^2.3.1" - thenify-all "^1.6.0" + find-up "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -isomorphic-fetch@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0, process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +progress@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" -isstream@0.1.x: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" +qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" -mz@^2.3.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" + is-number "^2.0.2" + kind-of "^3.0.2" -node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + +raw-loader@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + +rc@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" redis@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redis/-/redis-1.0.0.tgz#5612d832b2535a8c0e8d81b42c63af330d3bb677" -semver@^5.3.0: +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + +regenerator-transform@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~2.0.6" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + qs "~6.3.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve@^1.1.6, resolve@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +ripemd160@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +sha.js@^2.3.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shelljs@^0.7.5: + version "0.7.6" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-list-map@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-map-support@^0.4.2: + version "0.4.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" + dependencies: + source-map "^0.5.3" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + stack-trace@0.0.x: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.3.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.1.0" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +table@^3.7.8: + version "3.8.3" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + +tapable@^0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + +tapable@^0.2.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" + +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" + dependencies: + debug "~2.2.0" + fstream "~1.0.10" + fstream-ignore "~1.0.5" + once "~1.3.3" + readable-stream "~2.1.4" + rimraf "~2.5.1" + tar "~2.2.1" + uid-number "~0.0.6" + +tar@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + thenify-all@^1.0.0, thenify-all@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -129,10 +3204,194 @@ thenify-all@^1.0.0, thenify-all@^1.6.0: dependencies: any-promise "^1.0.0" +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-browserify@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tryit@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uglify-js@^2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.2.0.tgz#15d4620f1e7471f13fcb551d5c030d2c3eb42dbb" + dependencies: + async "^2.1.2" + chokidar "^1.4.3" + graceful-fs "^4.1.2" + +webpack-core@^0.6.8: + version "0.6.9" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + dependencies: + source-list-map "~0.1.7" + source-map "~0.4.1" + +webpack-sources@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" + dependencies: + source-list-map "~0.1.7" + source-map "~0.5.3" + +webpack@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475" + dependencies: + acorn "^4.0.4" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^3.1.0" + tapable "~0.2.5" + uglify-js "^2.7.5" + watchpack "^1.2.0" + webpack-sources "^0.1.4" + yargs "^6.0.0" + whatwg-fetch@>=0.10.0: version "2.0.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + winston@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119" @@ -143,3 +3402,75 @@ winston@^2.3.1: eyes "0.1.x" isstream "0.1.x" stack-trace "0.0.x" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrapper-webpack-plugin@^0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/wrapper-webpack-plugin/-/wrapper-webpack-plugin-0.1.11.tgz#f41874163becd85efee9e3981fefee4cf0478c98" + dependencies: + webpack-core "^0.6.8" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xtend@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs@^6.0.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^4.2.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From d31bff166a8463d5d478ead2e1486647bae6633b Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 19 Feb 2017 02:29:06 -0800 Subject: [PATCH 05/10] Add new parser selector and registry loader --- registry/generate-inventory.js | 108 ++++++++++++++ registry/tools/acorn/base.js | 6 +- registry/tools/acorn/package.js | 2 + registry/tools/acorn/v2.js | 4 +- registry/tools/acorn/v3.js | 4 +- registry/tools/acorn/v4.js | 4 +- registry/tools/babylon/package.js | 2 + registry/tools/babylon/v5.js | 4 +- registry/tools/babylon/v6.js | 4 +- server/handlers/tools.js | 4 + server/index.js | 2 +- website/css/style.css | 7 +- website/package.json | 2 + website/src/app.js | 123 +++++++++------- website/src/components/ASTOutput.js | 5 +- website/src/components/ParserSelector.css | 62 ++++++++ website/src/components/ParserSelector.js | 137 ++++++++++++++++++ website/src/components/Toolbar.js | 9 +- .../src/components/buttons/NewParserButton.js | 36 +++++ .../src/components/dialogs/SettingsDialog.js | 5 +- website/src/containers/CodeEditorContainer.js | 2 +- .../src/containers/ParserSelectorContainer.js | 11 ++ website/src/containers/ToolbarContainer.js | 9 +- website/src/registry.js | 62 ++++++++ website/src/store/actions.js | 15 ++ website/src/store/reducers.js | 77 ++++++---- website/src/store/sagas.js | 26 +++- website/yarn.lock | 6 +- 28 files changed, 622 insertions(+), 116 deletions(-) create mode 100755 registry/generate-inventory.js create mode 100644 website/src/components/ParserSelector.css create mode 100644 website/src/components/ParserSelector.js create mode 100644 website/src/components/buttons/NewParserButton.js create mode 100644 website/src/containers/ParserSelectorContainer.js create mode 100644 website/src/registry.js diff --git a/registry/generate-inventory.js b/registry/generate-inventory.js new file mode 100755 index 000000000..206af6215 --- /dev/null +++ b/registry/generate-inventory.js @@ -0,0 +1,108 @@ +#!/usr/bin/env node +/* eslint no-console: 0 */ + +require('isomorphic-fetch'); +const fs = require('fs-promise'); +const path = require('path'); +const semver = require('semver'); + +const REGISTRY_DIR = path.join(__dirname, 'tools'); +const BUNDLE_DIR = process.env.BUNDLE_DIR; + +const diff = measure(); +findPackages() + .then(pkgs => Promise.all(pkgs.map(getVersions))) + .then(writeInventoryFile) + .then(() => console.log(`Built in ${diff().toFixed(2)} sec.`)) + .catch(error => console.error(error)); + + +function findPackages() { + return fs.readdir(REGISTRY_DIR) + .then(tools => tools.filter(isDir).filter(withoutHidden)) + .then(tools => tools.map( + tool => require(path.join(REGISTRY_DIR, tool, 'package.js')) + )); +} + +function getVersions(pkg) { + return fetchInfo(pkg.name).then(npmPkg => { + const acceptedVersions = pkg.versions.map(v => v.dependencies[pkg.name]); + const versions = Object.keys(npmPkg.versions) + .filter(v => acceptedVersions.some(range => semver.satisfies(v, range))); + + pkg.availableVersions = semver.lt(npmPkg['dist-tags'].latest, '1.0.0') ? + getLatestPatchVersions(versions) : + getLatestMinorVersions(versions); + return pkg; + }); +} + +function writeInventoryFile(data) { + return fs.writeJSON(path.join(BUNDLE_DIR, 'inventory.json'), data.map(pkg => ({ + name: pkg.name, + displayName: pkg.displayName, + homepage: pkg.homepage, + versions: pkg.availableVersions, + category: pkg.category, + }))); +} + + +function fetchInfo(name) { + console.log(`Fetching ${name}...`); + return fetch(`https://registry.npmjs.org/${name}`) + .then(response => { + if (!response.ok) { + throw new Error(response.status); + } + return response.json(); + }); +} + +// Given a list of versions, these function removes all but the latest patch +// version. E.g. +// In: [1.0.1, 1.0.2, 1.1.2, 1.1.3, 1.1.4] +// Out: [1.0.2, 1.1.4] +function getLatestMinorVersions(versions) { + const last = versions.length - 1; + return versions.sort(semver.compare) + .filter((v, i) => { + if (i === last) { + return true; + } + if (semver.diff(v, versions[i+1]) === 'minor') { + return true; + } + return false; + }); +} + +function getLatestPatchVersions(versions) { + const last = versions.length - 1; + return versions.sort(semver.compare) + .filter((v, i) => { + if (i === last) { + return true; + } + if (semver.diff(v, versions[i+1]) === 'patch') { + return true; + } + return false; + }); +} + +function withoutHidden(p) { + return p[0] !== '.'; +} + +function isDir(p) { + return !/\..{2,}$/.test(p); +} + +function measure() { + const start = Date.now(); + return function() { + return (Date.now() - start) / 1000; + } +} diff --git a/registry/tools/acorn/base.js b/registry/tools/acorn/base.js index fefa56fc3..c17ff6952 100644 --- a/registry/tools/acorn/base.js +++ b/registry/tools/acorn/base.js @@ -18,11 +18,11 @@ export default { locationProps: new Set(['range', 'loc', 'start', 'end']), - // loadParser needs to be implement in the "child" objects + // load needs to be implement in the "child" objects // and pass `parse` and `loose` to the callback // - // loadParser(callback) { - // callback({ + // load() { + // return Promise.resolve({ // parse: jsxInject(acorn).parse, // loose: parse_dammit, // }); diff --git a/registry/tools/acorn/package.js b/registry/tools/acorn/package.js index fcae7f04d..fefd98b1f 100644 --- a/registry/tools/acorn/package.js +++ b/registry/tools/acorn/package.js @@ -1,8 +1,10 @@ const webpackConfig = require('../../webpack.default.conf'); module.exports = { + name: 'acorn', displayName: 'acorn', homepage: 'https://github.com/ternjs/acorn', + category: 'JavaScript', versions: [ { main: './v2.js', diff --git a/registry/tools/acorn/v2.js b/registry/tools/acorn/v2.js index 13fbe700f..ea222fd41 100644 --- a/registry/tools/acorn/v2.js +++ b/registry/tools/acorn/v2.js @@ -43,8 +43,8 @@ export default { defaultOptions, settingsConfiguration, - loadParser(callback) { - callback({ + load() { + return Promise.resolve({ loose: parse_dammit, parse: jsxInject(acorn).parse, }); diff --git a/registry/tools/acorn/v3.js b/registry/tools/acorn/v3.js index 0b05bd6bc..103574760 100644 --- a/registry/tools/acorn/v3.js +++ b/registry/tools/acorn/v3.js @@ -43,8 +43,8 @@ export default { defaultOptions, settingsConfiguration, - loadParser(callback) { - callback({ + load() { + return Promise.resolve({ loose: parse_dammit, parse: jsxInject(acorn).parse, }); diff --git a/registry/tools/acorn/v4.js b/registry/tools/acorn/v4.js index cad29d255..de7eaac38 100644 --- a/registry/tools/acorn/v4.js +++ b/registry/tools/acorn/v4.js @@ -43,8 +43,8 @@ export default { defaultOptions, settingsConfiguration, - loadParser(callback) { - callback({ + load() { + return Promise.resolve({ loose: parse_dammit, parse: jsxInject(acorn).parse, }); diff --git a/registry/tools/babylon/package.js b/registry/tools/babylon/package.js index 465dbd4b5..8a706a9e2 100644 --- a/registry/tools/babylon/package.js +++ b/registry/tools/babylon/package.js @@ -1,8 +1,10 @@ const webpackConfig = require('../../webpack.default.conf'); module.exports = { + name: 'babylon', displayName: 'babylon', homepage: 'https://github.com/babel/babylon', + category: 'JavaScript', versions: [ { main: './v5.js', diff --git a/registry/tools/babylon/v5.js b/registry/tools/babylon/v5.js index 1c344cbc7..3e003b910 100644 --- a/registry/tools/babylon/v5.js +++ b/registry/tools/babylon/v5.js @@ -69,8 +69,8 @@ export default { homepage: pkg.homepage, locationProps: new Set(['loc', 'start', 'end']), - loadParser(callback) { - callback({parse}); + load() { + return Promise.resolve({parse}); }, parse(babylon, code, parserSettings) { diff --git a/registry/tools/babylon/v6.js b/registry/tools/babylon/v6.js index 1fc5b6fb9..ef842557a 100644 --- a/registry/tools/babylon/v6.js +++ b/registry/tools/babylon/v6.js @@ -54,8 +54,8 @@ export default { homepage: pkg.homepage, locationProps: new Set(['loc', 'start', 'end']), - loadParser(callback) { - callback({parse}); + load() { + return Promise.resolve({parse}); }, parse(babylon, code, options) { diff --git a/server/handlers/tools.js b/server/handlers/tools.js index 2341aeb14..faf5f818e 100644 --- a/server/handlers/tools.js +++ b/server/handlers/tools.js @@ -13,6 +13,10 @@ const client = redis.createClient(); const buildQueue = new Queue('build'); module.exports = express.Router() + .get('/inventory.json', (req, res, next) => { + console.log('asd'); + res.sendFile(path.join(BUNDLE_DIR, 'inventory.json')); + }) .get('/:tool/:version', buildTool); function buildTool(req, res, next) { diff --git a/server/index.js b/server/index.js index 16269dfaa..02234f6a6 100644 --- a/server/index.js +++ b/server/index.js @@ -18,7 +18,7 @@ if (constants.SNIPPET_FILE && constants.REVISION_FILE) { if (constants.REGISTRY && constants.BUNDLE_DIR) { console.log('Serving tools..'); - app.use('/api/v1/tool', require('./handlers/tools')); + app.use('/api/v1/tools', require('./handlers/tools')); } // `next` is needed here to mark this as an error handler diff --git a/website/css/style.css b/website/css/style.css index be24e3211..fdf30e1f6 100644 --- a/website/css/style.css +++ b/website/css/style.css @@ -10,8 +10,13 @@ html { font-family: Verdana, non-serif; } +body { + padding: 0; + margin: 0; +} + .cover { - position: fixed; + position: absolute; top: 0; bottom: 0; left: 0; diff --git a/website/package.json b/website/package.json index 52b06c847..a9f0409f3 100644 --- a/website/package.json +++ b/website/package.json @@ -59,6 +59,7 @@ "css": "^2.2.1", "css-tree": "1.0.0-alpha15", "cssom": "^0.3.0", + "curl-amd": "^0.8.12", "domhandler": "^2.3.0", "escodegen": "^1.4.1", "esformatter-parser": "^1.0.0", @@ -89,6 +90,7 @@ "redux": "^3.3.1", "redux-batched-actions": "^0.1.2", "redux-saga": "^0.14.3", + "regenerator-runtime": "^0.10.1", "reselect": "^2.0.3", "shift-parser": "^5.0.2", "source-map": "^0.5.3", diff --git a/website/src/app.js b/website/src/app.js index 33d563a4e..e7391bc56 100644 --- a/website/src/app.js +++ b/website/src/app.js @@ -1,9 +1,11 @@ +import 'regenerator-runtime/runtime'; import * as LocalStorage from './components/LocalStorage'; import ASTOutputContainer from './containers/ASTOutputContainer'; import CodeEditorContainer from './containers/CodeEditorContainer'; import ErrorMessageContainer from './containers/ErrorMessageContainer'; import GistBanner from './components/GistBanner'; import LoadingIndictorContainer from './containers/LoadingIndicatorContainer'; +import ParserSelectorContainer from './containers/ParserSelectorContainer'; import PasteDropTargetContainer from './containers/PasteDropTargetContainer'; import PubSub from 'pubsub-js'; import React from 'react'; @@ -25,6 +27,9 @@ import {render} from 'react-dom'; import * as gist from './storage/gist'; import * as parse from './storage/parse'; import StorageHandler from './storage'; +import * as registry from './registry'; + +import 'codemirror/mode/javascript/javascript'; function resize() { PubSub.publish('PANEL_RESIZE'); @@ -36,25 +41,31 @@ function App(props) {
- - - -
- - - - - - - - {props.showTransformer ? : null} - -
+ + + + {props.showToolSelector ? +
+ + +
: +
+ + + + + + + + {props.showTransformer ? : null} + +
+ }
@@ -64,51 +75,59 @@ function App(props) { App.propTypes = { hasError: React.PropTypes.bool, showTransformer: React.PropTypes.bool, + showToolSelector: React.PropTypes.bool, }; const AppContainer = connect( state => ({ showTransformer: state.showTransformPanel, hasError: !!state.error, + showToolSelector: state.showToolSelector, }) )(App); const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const sagaMiddleware = createSagaMiddleware(); -const store = createStore( - enableBatching(astexplorer), - revive(LocalStorage.readState()), - composeEnhancers( - applyMiddleware(sagaMiddleware) - ) -); -store.subscribe(debounce(() => { - const state = store.getState(); - // We are not persisting the state while looking at an existing revision - if (!getRevision(state)) { - LocalStorage.writeState(persist(state)); - } -})); -sagaMiddleware.run(saga, new StorageHandler([gist, parse])); -render( - - - , - document.getElementById('container') -); +Promise.all([ + registry.loadParsers(), + revive(LocalStorage.readState(), registry), +]).then(([parsers, state]) => { + const store = createStore( + enableBatching(astexplorer), + state, + composeEnhancers( + applyMiddleware(sagaMiddleware) + ) + ); + store.subscribe(debounce(() => { + const state = store.getState(); + // We are not persisting the state while looking at an existing revision + if (!getRevision(state)) { + LocalStorage.writeState(persist(state)); + } + })); + sagaMiddleware.run(saga, new StorageHandler([gist, parse]), registry); -global.onhashchange = () => { - store.dispatch(loadSnippet()); -}; + render( + + + , + document.getElementById('container') + ); -if (location.hash.length > 1) { - store.dispatch(loadSnippet()); -} + global.onhashchange = () => { + store.dispatch(loadSnippet()); + }; -global.onbeforeunload = () => { - const state = store.getState(); - if (canSaveTransform(state)) { - return 'You have unsaved transform code. Do you really want to leave?'; - } -}; + if (location.hash.length > 1) { + store.dispatch(loadSnippet()); + } + + global.onbeforeunload = () => { + const state = store.getState(); + if (canSaveTransform(state)) { + return 'You have unsaved transform code. Do you really want to leave?'; + } + }; + }); diff --git a/website/src/components/ASTOutput.js b/website/src/components/ASTOutput.js index ee0de314f..9aee0497f 100644 --- a/website/src/components/ASTOutput.js +++ b/website/src/components/ASTOutput.js @@ -7,10 +7,7 @@ import PubSub from 'pubsub-js'; const {PropTypes} = React; function parse(parser, code, parserSettings) { - if (!parser._promise) { - parser._promise = new Promise(parser.loadParser); - } - return parser._promise.then( + return parser.load().then( realParser => parser.parse(realParser, code, parserSettings) ); } diff --git a/website/src/components/ParserSelector.css b/website/src/components/ParserSelector.css new file mode 100644 index 000000000..e009a497d --- /dev/null +++ b/website/src/components/ParserSelector.css @@ -0,0 +1,62 @@ +#ParserSelector { + color: #555; + margin-top: 20px; +} + +#ParserSelector h2 { + text-align: center; +} + +#ParserSelector .categoryFilter { + flex-grow: 0; +} + +#ParserSelector .nameFilter { + text-align: center; + margin-top: 15px; + margin-bottom: 15px; +} + +#ParserSelector .nameFilter input { + font-size: 1.3em; + padding: 10px; + width: 50%; +} + +#ParserSelector .categoryFilter button { + font-size: 1.3em; + width: 6em; + padding: 5px; + height: 2em; + border: 2px solid #ddd; + background-color: #efefef; + margin: 10px; +} + +#ParserSelector .categoryFilter button.selected, +#ParserSelector .categoryFilter button:hover { + background-color: #ddd; +} + +#ParserSelector .parserList { + display: flex; + flex-wrap: wrap; +} + +#ParserSelector .parserList .parser { + padding: 10px; + border: 2px solid #ddd; + background-color: #efefef; + margin: 10px; +} + +#ParserSelector .categoryFilter button, +#ParserSelector .parserList .parser h3 { + color: #444; +} + +#ParserSelector .parserList .parser h3 > small { + color: #AAA; + float: right; + font-weight: normal; +} diff --git a/website/src/components/ParserSelector.js b/website/src/components/ParserSelector.js new file mode 100644 index 000000000..adb1ca8b4 --- /dev/null +++ b/website/src/components/ParserSelector.js @@ -0,0 +1,137 @@ +import React from 'react'; +import LoadingIndicator from './LoadingIndicator'; +import './ParserSelector.css'; + +export default class ParserSelector extends React.Component { + constructor(props) { + super(props); + this.state = { + parsers: [], + filter: '', + category: 'All', + loading: true, + }; + + this._onFilterChange = this._onFilterChange.bind(this); + this._selectCategory = this._selectCategory.bind(this); + this._selectParser = this._selectParser.bind(this); + } + + componentDidMount() { + this.props.registry.loadParsers().then(parsers => { + this.setState({ + parsers: parsers, + filter: '', + loading: false, + }); + }); + } + + _onFilterChange(event) { + this.setState({ + filter: event.target.value, + }); + } + + _selectCategory(category) { + this.setState({category, filter: ''}); + } + + _selectParser(id) { + console.log(id); + this.props.loadParser(id); + } + + render() { + if (this.state.loading) { + return ( +
+ +
+ ); + } + + let parsers = this.state.parsers; + const groups = [ + 'All', + ...new Set(parsers.map(p => p.category)), + ]; + + if (this.state.category !== 'All') { + parsers = this.state.parsers.filter( + p => p.category === this.state.category + ); + } + if (this.state.filter) { + parsers = this.state.parsers.filter( + p => p.displayName.indexOf(event.target.value) > -1 + ); + } + + return ( +
+

Select a parser

+
+ +
+
+ {groups.map(name => ( + + ))} +
+
+ {parsers.map(p => ( + + ))} +
+
+ ); + } +} + +function GroupButton({label, onClick, selected}) { + return ( + + ); +} + +function Parser({parser, onSelection}) { + const versions = [ + {name: 'Select...', value: ''}, + ...parser.versions, + ]; + return ( +
+

{parser.displayName} {parser.category}

+

{parser.homepage}

+

Version:{' '} + +

+
+ ); +} + +ParserSelector.propTypes = { + registry: React.PropTypes.object.isRequired, +}; diff --git a/website/src/components/Toolbar.js b/website/src/components/Toolbar.js index 69242b391..524beb8ee 100644 --- a/website/src/components/Toolbar.js +++ b/website/src/components/Toolbar.js @@ -1,14 +1,15 @@ import React from 'react'; import CategoryButton from './buttons/CategoryButton'; -import ParserButton from './buttons/ParserButton'; +import NewParserButton from './buttons/NewParserButton'; import SnippetButton from './buttons/SnippetButton'; import TransformButton from './buttons/TransformButton'; export default function Toolbar(props) { let {parser, transformer, showTransformer} = props; - let parserInfo = parser.id; let transformerInfo = ''; + let parserInfo = ''; if (parser) { + parserInfo = parser.displayName; if (parser.version) { parserInfo += '-' + parser.version; } @@ -33,9 +34,7 @@ export default function Toolbar(props) { + ); + } +} + +ParserButton.propTypes = { + onParserChange: React.PropTypes.func, + onParserSettingsButtonClick: React.PropTypes.func, + parser: React.PropTypes.object, +}; diff --git a/website/src/components/dialogs/SettingsDialog.js b/website/src/components/dialogs/SettingsDialog.js index 25814c3de..55c660633 100644 --- a/website/src/components/dialogs/SettingsDialog.js +++ b/website/src/components/dialogs/SettingsDialog.js @@ -36,6 +36,9 @@ export default class SettingsDialog extends React.Component { } render() { + if (!this.props.parser) { + return null; + } if (this.props.visible && this.props.parser.renderSettings) { return (
@@ -67,6 +70,6 @@ SettingsDialog.propTypes = { onSave: React.PropTypes.func, onWantToClose: React.PropTypes.func, visible: React.PropTypes.bool, - parser: React.PropTypes.object.isRequired, + parser: React.PropTypes.object, parserSettings: React.PropTypes.object, }; diff --git a/website/src/containers/CodeEditorContainer.js b/website/src/containers/CodeEditorContainer.js index d82048760..884da8e7f 100644 --- a/website/src/containers/CodeEditorContainer.js +++ b/website/src/containers/CodeEditorContainer.js @@ -6,7 +6,7 @@ import {getCode, getParser, getParseError} from '../store/selectors'; function mapStateToProps(state) { return { value: getCode(state), - mode: getParser(state).category.id, + mode: getParser(state) && getParser(state).category.id, error: getParseError(state), }; } diff --git a/website/src/containers/ParserSelectorContainer.js b/website/src/containers/ParserSelectorContainer.js new file mode 100644 index 000000000..f53183855 --- /dev/null +++ b/website/src/containers/ParserSelectorContainer.js @@ -0,0 +1,11 @@ +import {connect} from 'react-redux'; +import ParserSelector from '../components/ParserSelector'; +import {loadParser} from '../store/actions'; + +function mapDispatchToProps(dispatch) { + return { + loadParser: id => dispatch(loadParser(id)), + }; +} + +export default connect(null, mapDispatchToProps)(ParserSelector); diff --git a/website/src/containers/ToolbarContainer.js b/website/src/containers/ToolbarContainer.js index 8461a1f56..cfaafa5f3 100644 --- a/website/src/containers/ToolbarContainer.js +++ b/website/src/containers/ToolbarContainer.js @@ -6,7 +6,7 @@ import { openShareDialog, selectTransformer, hideTransformer, - setParser, + loadParser, reset, } from '../store/actions'; import Toolbar from '../components/Toolbar'; @@ -21,7 +21,6 @@ function mapStateToProps(state) { saving: selectors.isSaving(state), canSave: selectors.canSave(state), canFork: selectors.canFork(state), - category: parser.category, parser, transformer: selectors.getTransformer(state), showTransformer: selectors.showTransformer(state), @@ -31,9 +30,9 @@ function mapStateToProps(state) { function mapDispatchToProps(dispatch) { return { - onParserChange: parser => { - dispatch(setParser(parser)); - logEvent('parser', 'select', parser.id); + onParserChange: id => { + dispatch(loadParser(id)); + logEvent('parser', 'select', id); }, onCategoryChange: category => { dispatch(selectCategory(category)); diff --git a/website/src/registry.js b/website/src/registry.js new file mode 100644 index 000000000..3cdc51241 --- /dev/null +++ b/website/src/registry.js @@ -0,0 +1,62 @@ +import curl from 'exports-loader?window.curl!curl-amd/dist/curl/curl'; +import React from 'react'; +import api from './storage/api'; + +curl.config({ + baseUrl: '/api/v1/tools', + dontAddFileExt: /./, + defineName: 'astexplorerDefine', +}); + +global.astexplorerDefine('react', () => React); +global.astexplorerDefine('regeneratorRuntime', () => global.regeneratorRuntime); + + +export function loadParsers() { + return api('/tools/inventory.json') + .then(response => { + if (response.ok) { + return response.json(); + } + throw new Error(response.statusText); + }) + .then(parsers => { + return parsers.map(parser => { + parser.id = parser.name + '@latest'; + parser.versions = [ + {name: 'latest', value: parser.id}, + ...parser.versions.map( + v => ({name: v, value: `${parser.name}@${v}`}) + ).reverse(), + ]; + return parser; + }); + }); +} + +export function loadParser(id) { + const [,tool,version='latest'] = id.match(/^([^@]+)(?:@(.+))?$/); + return new Promise((resolve, reject) => { + curl( + [`${tool}/${version}`], + parser => { + parser = parser.default || parser; + parser.load = memorize(parser.load, parser); + resolve(parser); + }, + error => { + reject(error); + } + ); + }); +} + +function memorize(f, obj) { + let memo; + return function(...args) { + if (memo !== undefined) { + return memo; + } + return memo = f.apply(obj, args); + } +} diff --git a/website/src/store/actions.js b/website/src/store/actions.js index 87e76cc74..d45a10828 100644 --- a/website/src/store/actions.js +++ b/website/src/store/actions.js @@ -9,11 +9,14 @@ export const SELECT_TRANSFORMER = 'SELECT_TRANSFORMER'; export const HIDE_TRANSFORMER = 'HIDE_TRANSFORMER'; export const SET_TRANSFORM = 'SET_TRANSFORM'; export const SET_PARSER = 'SET_PARSER'; +export const LOAD_PARSER = 'LOAD_PARSER'; export const SET_PARSER_SETTINGS = 'SET_PARSER_SETTINGS'; export const SET_PARSE_ERROR = 'SET_PARSE_ERROR'; export const SET_SNIPPET = 'SET_SNIPPET'; export const OPEN_SETTINGS_DIALOG = 'OPEN_SETTINGS_DIALOG'; export const CLOSE_SETTINGS_DIALOG = 'CLOSE_SETTINGS_DIALOG'; +export const OPEN_TOOL_SELECTOR = 'OPEN_TOOL_SELECTOR'; +export const CLOSE_TOOL_SELECTOR = 'CLOSE_TOOL_SELECTOR'; export const OPEN_SHARE_DIALOG = 'OPEN_SHARE_DIALOG'; export const CLOSE_SHARE_DIALOG = 'CLOSE_SHARE_DIALOG'; export const SET_CODE = 'SET_CODE'; @@ -24,6 +27,10 @@ export const START_SAVE = 'START_SAVE'; export const END_SAVE = 'END_SAVE'; export const RESET = 'RESET'; +export function loadParser(id) { + return {type: LOAD_PARSER, id}; +} + export function setParser(parser) { return {type: SET_PARSER, parser}; } @@ -72,6 +79,14 @@ export function loadSnippet() { return {type: LOAD_SNIPPET}; } +export function openToolSelector() { + return {type: OPEN_TOOL_SELECTOR}; +} + +export function closeToolSelector() { + return {type: CLOSE_TOOL_SELECTOR}; +} + export function openSettingsDialog() { return {type: OPEN_SETTINGS_DIALOG}; } diff --git a/website/src/store/reducers.js b/website/src/store/reducers.js index 553632541..3452f4d29 100644 --- a/website/src/store/reducers.js +++ b/website/src/store/reducers.js @@ -14,6 +14,7 @@ const initialState = { cursor: null, error: null, showTransformPanel: false, + showToolSelector: true, // Snippet related state selectedRevision: null, @@ -23,15 +24,12 @@ const initialState = { // Contains local settings of all parsers parserSettings: {}, - // Remember selected parser per category - parserPerCategory: {}, - workbench: { - parser: defaultParser.id, + parser: null, parserSettings: {}, parseError: null, - code: defaultParser.category.codeExample, - initialCode: defaultParser.category.codeExample, + code: null, + initialCode: null, transform: { code: '', initialCode: '', @@ -48,7 +46,7 @@ export function persist(state) { return { ...pick(state, 'showTransformPanel', 'parserSettings', 'parserPerCategory'), workbench: { - parser: state.workbench.parser.id, + parser: state.workbench.parser && state.workbench.parser.id, code: state.workbench.code, transform: pick(state.workbench.transform, 'code', 'transformer'), }, @@ -59,20 +57,36 @@ export function persist(state) { * When read from persistent storage, set the last stored code as initial version. * This is necessary because we use CodeMirror as an uncontrolled component. */ -export function revive(state=initialState) { - return { +export function revive(state=initialState, parserRegistry) { + const newState = { ...state, workbench: { ...state.workbench, - parser: getParserByID(state.workbench.parser), initialCode: state.workbench.code, - parserSettings: state.parserSettings[state.workbench.parser] || {}, transform: { ...state.workbench.transform, initialCode: state.workbench.transform.code, }, }, }; + + if (state.workbench.parser) { + return parserRegistry.loadParser(state.workbench.parser) + .then(parser => { + newState.workbench.parser = parser; + newState.workbench.parserSettings = state.parserSettings[parser.id] || {}; + if (!newState.workbench.code) { + newState.workbench.code = newState.workbench.initialCode = parser.codeExample; + } + return newState; + }) + .catch(error => { + newState.workbench.parser = null; + newState.error = error; + }); + } else { + return Promise.resolve(newState); + } } export function astexplorer(state=initialState, action) { @@ -80,6 +94,7 @@ export function astexplorer(state=initialState, action) { // UI related state showSettingsDialog: showSettingsDialog(state.showSettingsDialog, action), showShareDialog: showShareDialog(state.showShareDialog, action), + showToolSelector: showToolSelector(state.showToolSelector, action), loadingSnippet: loadSnippet(state.loadingSnippet, action), saving: saving(state.saving, action), forking: forking(state.forking, action), @@ -99,28 +114,12 @@ export function astexplorer(state=initialState, action) { function workbench(state=initialState.workbench, action, fullState) { - function parserFromCategory(category) { - const parser = getParserByID( - fullState.parserPerCategory[category.id] || getDefaultParser(category).id - ); - return { - parser, - parserSettings: fullState.parserSettings[parser.id] || {}, - code: category.codeExample, - initialCode: category.codeExample, - }; - } - switch (action.type) { - case actions.SELECT_CATEGORY: - return { - ...state, - ...parserFromCategory(action.category), - }; case actions.DROP_TEXT: + // TODO: Fix drop text return { ...state, - ...parserFromCategory(getCategoryByID(action.categoryId)), + //...parserFromCategory(getCategoryByID(action.categoryId)), code: action.text, initialCode: action.text, }; @@ -135,6 +134,7 @@ function workbench(state=initialState.workbench, action, fullState) { // Update parser settings newState.parserSettings = fullState.parserSettings[action.parser.id] || {}; + // TODO: Reset code on category change } return newState; } @@ -176,6 +176,8 @@ function workbench(state=initialState.workbench, action, fullState) { return newState; } + case actions.SET_CODE: + return {...state, code: action.code}; case actions.SET_TRANSFORM: return { ...state, @@ -187,6 +189,7 @@ function workbench(state=initialState.workbench, action, fullState) { case actions.SET_SNIPPET: { const {revision} = action; + // TODO: call getParser instead const transformerID = revision.getTransformerID(); const parserID = revision.getParserID(); @@ -212,8 +215,8 @@ function workbench(state=initialState.workbench, action, fullState) { const newState = { ...state, parserSettings: fullState.parserSettings[state.parser.id] || {}, - code: state.parser.category.codeExample, - initialCode: state.parser.category.codeExample, + code: state.parser.codeExample, + initialCode: state.parser.codeExample, }; if (fullState.activeRevision && fullState.activeRevision.getTransformerID() || reset && state.transform.transformer) { // Clear transform as well @@ -268,6 +271,18 @@ function showSettingsDialog(state=initialState.showSettingsDialog, action) { } } +function showToolSelector(state=initialState.showToolSelector, action) { + switch(action.type) { + case actions.OPEN_TOOL_SELECTOR: + return true; + case actions.CLOSE_TOOL_SELECTOR: + case actions.SET_PARSER: + return false; + default: + return state; + } +} + function showShareDialog(state=initialState.showShareDialog, action) { switch(action.type) { case actions.OPEN_SHARE_DIALOG: diff --git a/website/src/store/sagas.js b/website/src/store/sagas.js index 82ae64f40..d16490f27 100644 --- a/website/src/store/sagas.js +++ b/website/src/store/sagas.js @@ -143,7 +143,31 @@ function* watchSnippetURI(storageAdapter) { ])); } -export default function*(storageAdapter) { +function* watchParserChange(parserRegistry, {id}) { + try { + yield put(batchActions([ + actions.setError(null), + actions.startLoadingSnippet(), + ])); + + const parser = yield call( + parserRegistry.loadParser.bind(parserRegistry), + id + ); + yield put(batchActions([ + actions.setParser(parser), + actions.doneLoadingSnippet(), + ])); + } catch(error) { + yield put(batchActions([ + actions.setError(error), + actions.doneLoadingSnippet(), + ])); + } +} + +export default function*(storageAdapter, parserRegistry) { yield takeEvery(actions.LOAD_SNIPPET, watchSnippetURI, storageAdapter); yield takeEvery(actions.SAVE, watchSave, storageAdapter); + yield takeEvery(actions.LOAD_PARSER, watchParserChange, parserRegistry); } diff --git a/website/yarn.lock b/website/yarn.lock index 1c87e4d3d..d6faeb7c8 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -1895,6 +1895,10 @@ cssom@^0.3.0: version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" +curl-amd@^0.8.12: + version "0.8.12" + resolved "https://registry.yarnpkg.com/curl-amd/-/curl-amd-0.8.12.tgz#e3912ecf6bd83e782aef91610da05c89425ae7ed" + d@^0.1.1, d@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" @@ -4875,7 +4879,7 @@ regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" -regenerator-runtime@^0.10.0: +regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" From fd26af5eb854fcc063882f3efcad73cfb0cc8a34 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 19 Feb 2017 02:32:42 -0800 Subject: [PATCH 06/10] Add jscodeshift as POC transform --- registry/DependencyResolverPlugin.js | 22 +++ registry/build.js | 2 +- registry/tools/jscodeshift/package.js | 57 ++++++++ .../tools/jscodeshift/transformExample.txt | 13 ++ registry/tools/jscodeshift/v0.3.21.js | 130 ++++++++++++++++++ registry/tools/jscodeshift/v0.3.4.js | 128 +++++++++++++++++ registry/utils/compileModule.js | 9 ++ registry/webpack.default.conf.js | 6 + website/src/app.js | 4 +- website/src/components/TransformOutput.js | 49 ++++--- website/src/store/reducers.js | 69 ++-------- website/src/store/selectors.js | 11 +- 12 files changed, 412 insertions(+), 88 deletions(-) create mode 100644 registry/DependencyResolverPlugin.js create mode 100644 registry/tools/jscodeshift/package.js create mode 100644 registry/tools/jscodeshift/transformExample.txt create mode 100644 registry/tools/jscodeshift/v0.3.21.js create mode 100644 registry/tools/jscodeshift/v0.3.4.js create mode 100644 registry/utils/compileModule.js diff --git a/registry/DependencyResolverPlugin.js b/registry/DependencyResolverPlugin.js new file mode 100644 index 000000000..ee2f32b12 --- /dev/null +++ b/registry/DependencyResolverPlugin.js @@ -0,0 +1,22 @@ +module.exports = function() { + this.plugin('resolve', (request, callback) => { + if (/node_modules/.test(request.path)) { + // Ignore any requests inside node_modules + return callback(); + } + if (/^(?!\.{0,2}\/).+:/.test(request.request)) { + const [parentModule, childModule] = request.request.split(':'); + const obj = Object.assign({}, request, { + request: parentModule, + }); + this.doResolve('resolve', obj, null, (error, result) => { + const obj = Object.assign({}, result, { + request: childModule, + }); + this.doResolve('resolve', obj, null, callback); + }); + } else { + callback(); + } + }); +} diff --git a/registry/build.js b/registry/build.js index ce82cfaef..bc3d79d06 100755 --- a/registry/build.js +++ b/registry/build.js @@ -141,7 +141,7 @@ function install(npmVersion, toolDir, versionConfig) { fs.writeJSON(packagePath, pick(versionConfig, 'main', 'dependencies')), ])) .then(() => run( - `yarn add --prefer-offline --exact --no-lockfile --no-bin-links --prod --no-progress ${npmVersion.name}@${npmVersion.version}`, + `yarn add --exact --no-lockfile --no-bin-links --prod --no-progress ${npmVersion.name}@${npmVersion.version}`, {cwd: cacheDir} )) .then(() => run( diff --git a/registry/tools/jscodeshift/package.js b/registry/tools/jscodeshift/package.js new file mode 100644 index 000000000..6bcc9e668 --- /dev/null +++ b/registry/tools/jscodeshift/package.js @@ -0,0 +1,57 @@ +const webpackConfig = require('../../webpack.default.conf'); + +module.exports = { + name: 'jscodeshift', + displayName: 'jscodeshift', + homepage: 'https://github.com/facebook/jscodeshift', + category: 'JavaScript', + versions: [ + { + main: './v0.3.4.js', + dependencies: { + jscodeshift: '0.3.4 - 0.3.20', + }, + webpackConfig, + }, + { + main: './v0.3.21.js', + dependencies: { + jscodeshift: '^0.3.21', + }, + webpackConfig: Object.assign( + {}, + webpackConfig, + { + module: { + rules: [ + { + test: /\.txt$/, + exclude: /node_modules/, + loader: 'raw-loader', + }, + { + test: /\.jsx?$/, + exclude: /node_modules\/(?!jscodeshift\/dist)/, + loader: 'babel-loader', + options: { + babelrc: false, + presets: [ + 'babel-preset-es2015', + 'babel-preset-react', + ], + plugins: [ + [ + 'babel-plugin-transform-object-rest-spread', + {'use-builtin': true}, + ], + 'babel-plugin-transform-regenerator', + ], + }, + }, + ], + }, + } + ), + }, + ], +}; diff --git a/registry/tools/jscodeshift/transformExample.txt b/registry/tools/jscodeshift/transformExample.txt new file mode 100644 index 000000000..5f4e78f63 --- /dev/null +++ b/registry/tools/jscodeshift/transformExample.txt @@ -0,0 +1,13 @@ +// Press ctrl+space for code completion +export default function transformer(file, api) { + const j = api.jscodeshift; + + return j(file.source) + .find(j.Identifier) + .forEach(path => { + j(path).replaceWith( + j.identifier(path.node.name.split('').reverse().join('')) + ); + }) + .toSource(); +} diff --git a/registry/tools/jscodeshift/v0.3.21.js b/registry/tools/jscodeshift/v0.3.21.js new file mode 100644 index 000000000..db8307ced --- /dev/null +++ b/registry/tools/jscodeshift/v0.3.21.js @@ -0,0 +1,130 @@ +import defaultESTreeParserInterface from '../../utils/defaultESTreeParserInterface'; +import compileModule from '../../utils/compileModule'; +import pkg from 'jscodeshift/package.json'; +import jscodeshift from 'jscodeshift'; +import recast from 'jscodeshift:recast'; +import getParser from 'jscodeshift/dist/getParser'; +import * as category from '../../categories/js'; +import codeExample from '../../categories/js/codeExample.txt'; +import transformExample from './transformExample.txt'; + +const ID = 'jscodeshift'; + +const sessionMethods = new Set(); +let patched; + +export default { + ...defaultESTreeParserInterface, + + id: `${ID}@${pkg.version}`, + displayName: ID, + version: pkg.version, + homepage: pkg.homepage || 'https://github.com/facebook/jscodeshift', + category, + codeExample, + transformExample, + + load() { + if (!patched) { + const { registerMethods } = jscodeshift; + + let origMethods; + + jscodeshift.registerMethods({ + hasOwnProperty(name) { + // compare only against current-session & very original methods + if (!origMethods) { + origMethods = new Set(Object.getOwnPropertyNames(this)); + } + return origMethods.has(name) || sessionMethods.has(name); + }, + }); + + // patch in order to collect user-defined method names + jscodeshift.registerMethods = function (methods) { + registerMethods.apply(this, arguments); + for (let name in methods) { + sessionMethods.add(name); + } + }; + patched = true; + } + return Promise.resolve({jscodeshift, recast}); + }, + + parse({recast}, code) { + return recast.parse(code, {parser: getParser()}); + }, + + _ignoredProperties: new Set(['__clone']), + + *forEachProperty(node) { + for (let prop in node) { + if ( + this._ignoredProperties.has(prop) || typeof node[prop] === 'function' + ) { + continue; + } + yield { + value: node[prop], + key: prop, + computed: false, + }; + } + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + return node.range; + }, + + transform( + {jscodeshift}, + transformCode, + code + ) { + sessionMethods.clear(); + const transformModule = compileModule( // eslint-disable-line no-shadow + transformCode + ); + const transform = transformModule.__esModule ? + transformModule.default : + transformModule; + + const counter = Object.create(null); + let statsWasCalled = false; + + const result = transform( + { + path: 'Live.js', + source: code, + }, + { + jscodeshift: transformModule.parser ? + jscodeshift.withParser(transformModule.parser) : + jscodeshift, + stats: (value, quantity=1) => { + statsWasCalled = true; + counter[value] = (counter[value] ? counter[value] : 0) + quantity; + }, + }, + {} + ); + if (statsWasCalled) { + console.log(JSON.stringify(counter, null, 4)); // eslint-disable-line no-console + } + if (result == null) { + // If null is returned, the jscodeshift runner won't touch the original + // code, so we just return that. + return code; + } else if (typeof result !== 'string') { + throw new Error( + 'Transformers must either return undefined, null or a string, not ' + + `"${typeof result}".` + ); + } + return result; + }, +}; diff --git a/registry/tools/jscodeshift/v0.3.4.js b/registry/tools/jscodeshift/v0.3.4.js new file mode 100644 index 000000000..38c9be5a0 --- /dev/null +++ b/registry/tools/jscodeshift/v0.3.4.js @@ -0,0 +1,128 @@ +import defaultESTreeParserInterface from '../../utils/defaultESTreeParserInterface'; +import compileModule from '../../utils/compileModule'; +import pkg from 'jscodeshift/package.json'; +import jscodeshift from 'jscodeshift'; +import recast from 'jscodeshift:recast'; +import babel from 'jscodeshift:babel-core'; +import * as category from '../../categories/js'; +import codeExample from '../../categories/js/codeExample.txt'; +import transformExample from './transformExample.txt'; + +const ID = 'jscodeshift'; + +const sessionMethods = new Set(); +let patched; + +export default { + ...defaultESTreeParserInterface, + + id: `${ID}@${pkg.version}`, + displayName: ID, + version: pkg.version, + homepage: pkg.homepage || 'https://github.com/facebook/jscodeshift', + category, + codeExample, + transformExample, + + load() { + if (!patched) { + const { registerMethods } = jscodeshift; + + let origMethods; + + jscodeshift.registerMethods({ + hasOwnProperty(name) { + // compare only against current-session & very original methods + if (!origMethods) { + origMethods = new Set(Object.getOwnPropertyNames(this)); + } + return origMethods.has(name) || sessionMethods.has(name); + }, + }); + + // patch in order to collect user-defined method names + jscodeshift.registerMethods = function (methods) { + registerMethods.apply(this, arguments); + for (let name in methods) { + sessionMethods.add(name); + } + }; + patched = true; + } + return Promise.resolve({jscodeshift, recast}); + }, + + parse({recast}, code) { + return recast.parse(code, {esprima: babel}); + }, + + _ignoredProperties: new Set(['__clone']), + + *forEachProperty(node) { + for (let prop in node) { + if ( + this._ignoredProperties.has(prop) || typeof node[prop] === 'function' + ) { + continue; + } + yield { + value: node[prop], + key: prop, + computed: false, + }; + } + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + return node.range; + }, + + transform( + {jscodeshift}, + transformCode, + code + ) { + sessionMethods.clear(); + const transformModule = compileModule( // eslint-disable-line no-shadow + transformCode + ); + const transform = transformModule.__esModule ? + transformModule.default : + transformModule; + + const counter = Object.create(null); + let statsWasCalled = false; + + const result = transform( + { + path: 'Live.js', + source: code, + }, + { + jscodeshift, + stats: (value, quantity=1) => { + statsWasCalled = true; + counter[value] = (counter[value] ? counter[value] : 0) + quantity; + }, + }, + {} + ); + if (statsWasCalled) { + console.log(JSON.stringify(counter, null, 4)); // eslint-disable-line no-console + } + if (result == null) { + // If null is returned, the jscodeshift runner won't touch the original + // code, so we just return that. + return code; + } else if (typeof result !== 'string') { + throw new Error( + 'Transformers must either return undefined, null or a string, not ' + + `"${typeof result}".` + ); + } + return result; + }, +}; diff --git a/registry/utils/compileModule.js b/registry/utils/compileModule.js new file mode 100644 index 000000000..26fc17add --- /dev/null +++ b/registry/utils/compileModule.js @@ -0,0 +1,9 @@ +export default function compileModule(code, globals = {}) { + let exports = {}; + let module = { exports }; + let globalNames = Object.keys(globals); + let keys = ['module', 'exports', ...globalNames]; + let values = [module, exports, ...globalNames.map(key => globals[key])]; + new Function(keys.join(), code).apply(exports, values); + return module.exports; +} diff --git a/registry/webpack.default.conf.js b/registry/webpack.default.conf.js index ba1747f90..6b82c748d 100644 --- a/registry/webpack.default.conf.js +++ b/registry/webpack.default.conf.js @@ -1,4 +1,5 @@ const webpack = require('webpack'); +const DependencyResolvePlugin = require('./DependencyResolverPlugin'); module.exports = { module: { @@ -39,6 +40,11 @@ module.exports = { }), //new webpack.optimize.UglifyJsPlugin(), ], + resolve: { + plugins: [ + DependencyResolvePlugin, + ], + }, node: { child_process: 'empty', fs: 'empty', diff --git a/website/src/app.js b/website/src/app.js index e7391bc56..94f7f1d61 100644 --- a/website/src/app.js +++ b/website/src/app.js @@ -20,7 +20,7 @@ import saga from './store/sagas'; import {Provider, connect} from 'react-redux'; import {astexplorer, persist, revive} from './store/reducers'; import {createStore, applyMiddleware, compose} from 'redux'; -import {canSaveTransform, getRevision} from './store/selectors'; +import {canSaveTransform, getRevision, showTransformer} from './store/selectors'; import {enableBatching} from 'redux-batched-actions'; import {loadSnippet} from './store/actions'; import {render} from 'react-dom'; @@ -80,7 +80,7 @@ App.propTypes = { const AppContainer = connect( state => ({ - showTransformer: state.showTransformPanel, + showTransformer: showTransformer(state), hasError: !!state.error, showToolSelector: state.showToolSelector, }) diff --git a/website/src/components/TransformOutput.js b/website/src/components/TransformOutput.js index f5c3415fb..5ea8a724e 100644 --- a/website/src/components/TransformOutput.js +++ b/website/src/components/TransformOutput.js @@ -7,19 +7,28 @@ import {SourceMapConsumer} from 'source-map/lib/source-map-consumer'; import stringify from 'json-stringify-safe'; -function loadJSTransformer(callback) { - require(['../parsers/utils/transformJSCode'], toES5 => callback(toES5.default)); -} +const loadJSTransformer = (function() { + let promise; + return function() { + if (promise) { + return promise; + } + + return promise = new Promise((resolve) => { + require(['../parsers/utils/transformJSCode'], toES5 => resolve(toES5.default)); + }); + }; +}()); + + function transform(transformer, transformCode, code) { - if (!transformer._promise) { - transformer._promise = Promise.all([ - new Promise(transformer.loadTransformer), - new Promise(loadJSTransformer), - ]); - } + const promise = Promise.all([ + transformer.load(), + loadJSTransformer(), + ]); // Use Promise.resolve(null) to return all errors as rejected promises - return transformer._promise.then(([realTransformer, toES5]) => { + return promise.then(([realTransformer, toES5]) => { let es5Code = toES5(transformCode); // assert that there are no obvious infinite loops halts(es5Code); @@ -37,21 +46,21 @@ function transform(transformer, transformCode, code) { '})', ].join('') ); - let result = transformer.transform( + return transformer.transform( realTransformer, es5Code, code ); - return Promise.resolve(result).then(result => { - let map = null; - if (typeof result !== 'string') { - if (result.map) { - map = new SourceMapConsumer(result.map); - } - result = result.code; + }) + .then(result => { + let map = null; + if (typeof result !== 'string') { + if (result.map) { + map = new SourceMapConsumer(result.map); } - return { result, map }; - }); + result = result.code; + } + return { result, map }; }); } diff --git a/website/src/store/reducers.js b/website/src/store/reducers.js index 3452f4d29..8d8710350 100644 --- a/website/src/store/reducers.js +++ b/website/src/store/reducers.js @@ -1,7 +1,5 @@ import * as actions from './actions'; -import {getCategoryByID, getDefaultParser, getParserByID, getTransformerByID} from '../parsers'; - -const defaultParser = getDefaultParser(getCategoryByID('javascript')); +import {getParserByID, getTransformerByID} from '../parsers'; const initialState = { @@ -13,7 +11,6 @@ const initialState = { saving: false, cursor: null, error: null, - showTransformPanel: false, showToolSelector: true, // Snippet related state @@ -33,7 +30,6 @@ const initialState = { transform: { code: '', initialCode: '', - transformer: null, }, }, @@ -44,11 +40,11 @@ const initialState = { */ export function persist(state) { return { - ...pick(state, 'showTransformPanel', 'parserSettings', 'parserPerCategory'), + ...pick(state, 'parserSettings', 'parserPerCategory'), workbench: { parser: state.workbench.parser && state.workbench.parser.id, code: state.workbench.code, - transform: pick(state.workbench.transform, 'code', 'transformer'), + transform: pick(state.workbench.transform, 'code'), }, }; } @@ -100,7 +96,6 @@ export function astexplorer(state=initialState, action) { forking: forking(state.forking, action), cursor: cursor(state.cursor, action), error: error(state.error, action), - showTransformPanel: showTransformPanel(state.showTransformPanel, action), // Snippet related state activeRevision: activeRevision(state.activeRevision, action), @@ -136,44 +131,14 @@ function workbench(state=initialState.workbench, action, fullState) { fullState.parserSettings[action.parser.id] || {}; // TODO: Reset code on category change } - return newState; - } - case actions.SET_CODE: - return {...state, code: action.code}; - case actions.SELECT_TRANSFORMER: - { - const differentParser = - action.transformer.defaultParserID !== state.parser.id; - const differentTransformer = - action.transformer.id !== state.transform.transformer ; - - if (!(differentParser || differentTransformer)) { - return state; + if (!state.code) { + newState.code = newState.initialCode = action.parser.codeExample; } - - const newState = {...state}; - - if (differentParser) { - newState.parser = getParserByID(action.transformer.defaultParserID); - newState.parserSettings = - fullState.parserSettings[action.transformer.defaultParserID] || {}; + if (action.parser.transform && !state.transform.code) { + // TODO: Reset transform code on transformer change + newState.transform.code = newState.transform.initialCode = + action.parser.transformExample; } - - if (differentTransformer) { - const snippetHasDifferentTransform = fullState.activeRevision && - fullState.activeRevision.getTransformerID() === action.transformer.id; - newState.transform = { - ...state.transform, - transformer: action.transformer.id, - code: snippetHasDifferentTransform ? - state.transform.code : - action.transformer.defaultTransform, - initialCode: snippetHasDifferentTransform ? - fullState.activeRevision.getTransformCode() : - action.transformer.defaultTransform, - }; - } - return newState; } case actions.SET_CODE: @@ -202,7 +167,6 @@ function workbench(state=initialState.workbench, action, fullState) { initialCode: revision.getCode(), transform: { ...state.transform, - transformer: transformerID, code: revision.getTransformCode(), initialCode: revision.getTransformCode(), }, @@ -358,21 +322,6 @@ function error(state=initialState.error, action) { } } -function showTransformPanel(state=initialState.showTransformPanel, action) { - switch (action.type) { - case actions.SELECT_TRANSFORMER: - return true; - case actions.HIDE_TRANSFORMER: - case actions.SELECT_CATEGORY: - case actions.CLEAR_SNIPPET: - return false; - case actions.SET_SNIPPET: - return Boolean(action.revision.getTransformerID()); - default: - return state; - } -} - function activeRevision(state=initialState.selectedRevision, action) { switch (action.type) { case actions.SET_SNIPPET: diff --git a/website/src/store/selectors.js b/website/src/store/selectors.js index 4036a253a..0cdb3d757 100644 --- a/website/src/store/selectors.js +++ b/website/src/store/selectors.js @@ -1,6 +1,6 @@ import {createSelector} from 'reselect'; import isEqual from 'lodash.isequal'; -import {getParserByID, getTransformerByID} from '../parsers'; +import {getTransformerByID} from '../parsers'; // UI related @@ -75,12 +75,13 @@ export function getInitialTransformCode(state) { } export function getTransformer(state) { - return getTransformerByID(state.workbench.transform.transformer); + return state.workbench.parser; } -export function showTransformer(state) { - return state.showTransformPanel; -} +export const showTransformer = createSelector( + [getParser], + (parser) => !!parser.transform +); const isTransformDirty = createSelector( [getTransformCode, getInitialTransformCode], From 2a69e213ef1617ffbf8f0b36a50541ce4cba3b22 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 19 Feb 2017 15:42:05 -0800 Subject: [PATCH 07/10] Use our own module loader ... with the hope that it allows us to do better error reporting. --- registry/build.js | 1 + website/package.json | 1 - website/src/registry.js | 82 +++++++++++++++++++++++++++++------------ website/yarn.lock | 4 -- 4 files changed, 59 insertions(+), 29 deletions(-) diff --git a/registry/build.js b/registry/build.js index bc3d79d06..69e192c9e 100755 --- a/registry/build.js +++ b/registry/build.js @@ -112,6 +112,7 @@ function bundleVersion(packagePath, versionConfig, npmPkg, latest) { filename: `${name}.js`, path: BUNDLE_DIR, libraryTarget: 'amd', + library: `${toolID}/${version}`, }, } ), diff --git a/website/package.json b/website/package.json index a9f0409f3..88253ec1a 100644 --- a/website/package.json +++ b/website/package.json @@ -59,7 +59,6 @@ "css": "^2.2.1", "css-tree": "1.0.0-alpha15", "cssom": "^0.3.0", - "curl-amd": "^0.8.12", "domhandler": "^2.3.0", "escodegen": "^1.4.1", "esformatter-parser": "^1.0.0", diff --git a/website/src/registry.js b/website/src/registry.js index 3cdc51241..a1057875e 100644 --- a/website/src/registry.js +++ b/website/src/registry.js @@ -1,17 +1,6 @@ -import curl from 'exports-loader?window.curl!curl-amd/dist/curl/curl'; import React from 'react'; import api from './storage/api'; -curl.config({ - baseUrl: '/api/v1/tools', - dontAddFileExt: /./, - defineName: 'astexplorerDefine', -}); - -global.astexplorerDefine('react', () => React); -global.astexplorerDefine('regeneratorRuntime', () => global.regeneratorRuntime); - - export function loadParsers() { return api('/tools/inventory.json') .then(response => { @@ -36,19 +25,12 @@ export function loadParsers() { export function loadParser(id) { const [,tool,version='latest'] = id.match(/^([^@]+)(?:@(.+))?$/); - return new Promise((resolve, reject) => { - curl( - [`${tool}/${version}`], - parser => { - parser = parser.default || parser; - parser.load = memorize(parser.load, parser); - resolve(parser); - }, - error => { - reject(error); - } - ); - }); + return load(`${tool}/${version}`) + .then(parser => { + parser = parser.default || parser; + parser.load = memorize(parser.load, parser); + return parser; + }); } function memorize(f, obj) { @@ -60,3 +42,55 @@ function memorize(f, obj) { return memo = f.apply(obj, args); } } + +// Loader functions +const modules = new Map(); +const pending = new Map(); + +function load(id) { + if (modules.has(id)) { + return modules.get(id); + } + const promise = new Promise((resolve, reject) => { + pending.set(id, {resolve, reject}); + + const script = global.document.createElement('script'); + script.async = true; + script.onerror = function(error) { + // TODO: error reporting + console.log(error); + reject(error); + pending.delete(id); + }; + script.src = '/api/v1/tools/' + id; + global.document.head.appendChild(script); + }); + modules.set(id, promise); + return promise; +} + + + +function define(id, dependencies, factory) { + if (typeof dependencies === 'function') { + factory = dependencies; + dependencies = []; + } + + Promise.all(dependencies.map(d => load(d))).then(deps => { + if (pending.has(id)) { + const resolver = pending.get(id); + try { + resolver.resolve(factory(...deps)); + } catch(e) { + resolver.reject(e); + } finally { + pending.delete(id); + } + } + }); +} +global.astexplorerDefine = define; + +// Prime modules +modules.set('react', Promise.resolve(React)); diff --git a/website/yarn.lock b/website/yarn.lock index d6faeb7c8..da5d1d417 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -1895,10 +1895,6 @@ cssom@^0.3.0: version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" -curl-amd@^0.8.12: - version "0.8.12" - resolved "https://registry.yarnpkg.com/curl-amd/-/curl-amd-0.8.12.tgz#e3912ecf6bd83e782aef91610da05c89425ae7ed" - d@^0.1.1, d@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" From cd23b0f10807333e8410e32a468df41fc1de1f30 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Sun, 19 Feb 2017 16:06:49 -0800 Subject: [PATCH 08/10] Refactor babylon and jscodeshift (reuse more code) --- registry/tools/babylon/base.js | 38 ++++++++ registry/tools/babylon/v5.js | 48 ++--------- registry/tools/babylon/v6.js | 39 +-------- registry/tools/jscodeshift/base.js | 120 ++++++++++++++++++++++++++ registry/tools/jscodeshift/v0.3.21.js | 109 +---------------------- registry/tools/jscodeshift/v0.3.4.js | 107 +---------------------- 6 files changed, 172 insertions(+), 289 deletions(-) create mode 100644 registry/tools/jscodeshift/base.js diff --git a/registry/tools/babylon/base.js b/registry/tools/babylon/base.js index 6d5ee1775..a9cc50206 100644 --- a/registry/tools/babylon/base.js +++ b/registry/tools/babylon/base.js @@ -1,7 +1,45 @@ +import React from 'react'; import * as category from '../../categories/js'; import codeExample from '../../categories/js/codeExample.txt'; +import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; +import SettingsRenderer from '../../utils/SettingsRenderer'; export default { + ...defaultParserInterface, + category, codeExample, + locationProps: new Set(['loc', 'start', 'end']), + + parse(babylon, code, parserSettings) { + return babylon.parse( + code, + {...this.defaultOptions, ...parserSettings} + ); + }, + + getNodeName(node) { + switch (typeof node.type) { + case 'string': + return node.type; + case 'object': + return `Token (${node.type.label})`; + } + }, + + nodeToRange(node) { + if (typeof node.start !== 'undefined') { + return [node.start, node.end]; + } + }, + + renderSettings(parserSettings, onChange) { + return ( + + ); + }, }; diff --git a/registry/tools/babylon/v5.js b/registry/tools/babylon/v5.js index 3e003b910..a07f3bd3b 100644 --- a/registry/tools/babylon/v5.js +++ b/registry/tools/babylon/v5.js @@ -1,9 +1,6 @@ -import React from 'react'; import base from './base'; -import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; import pkg from 'babylon/package.json'; import {parse} from 'babylon'; -import SettingsRenderer from '../../utils/SettingsRenderer'; const ID = 'babylon'; const defaultOptions = { @@ -26,7 +23,7 @@ const defaultOptions = { plugins: { jsx: true, flow: true }, }; -const parserSettingsConfiguration = { +const settingsConfiguration = { fields: [ ['sourceType', ['module', 'script']], 'allowReserved', @@ -60,54 +57,21 @@ const parserSettingsConfiguration = { }; export default { - ...defaultParserInterface, ...base, id: ID, displayName: ID, version: pkg.version, homepage: pkg.homepage, - locationProps: new Set(['loc', 'start', 'end']), - - load() { - return Promise.resolve({parse}); - }, - - parse(babylon, code, parserSettings) { - return babylon.parse( - code, - {...defaultOptions, ...parserSettings} - ); - }, - - getNodeName(node) { - switch (typeof node.type) { - case 'string': - return node.type; - case 'object': - return `Token (${node.type.label})`; - } - }, - - nodeToRange(node) { - if (typeof node.start !== 'undefined') { - return [node.start, node.end]; - } - }, + defaultOptions, + settingsConfiguration, _ignoredProperties: new Set([ '__clone', ]), - renderSettings(parserSettings, onChange) { - return ( -
- -
- ); + load() { + return Promise.resolve({parse}); }, + }; diff --git a/registry/tools/babylon/v6.js b/registry/tools/babylon/v6.js index ef842557a..201fdeb12 100644 --- a/registry/tools/babylon/v6.js +++ b/registry/tools/babylon/v6.js @@ -1,12 +1,9 @@ -import React from 'react'; import base from './base'; -import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; import pkg from 'babylon/package.json'; import {parse} from 'babylon'; -import SettingsRenderer from '../../utils/SettingsRenderer'; const ID = 'babylon'; -export const defaultOptions = { +const defaultOptions = { sourceType: 'module', allowImportExportEverywhere: false, allowReturnOutsideFunction: false, @@ -26,7 +23,7 @@ export const defaultOptions = { ], }; -export const parserSettingsConfiguration = { +const settingsConfiguration = { fields: [ ['sourceType', ['module', 'script']], 'allowReturnOutsideFunction', @@ -45,45 +42,17 @@ export const parserSettingsConfiguration = { }; export default { - ...defaultParserInterface, ...base, id: ID, displayName: ID, version: pkg.version, homepage: pkg.homepage, - locationProps: new Set(['loc', 'start', 'end']), + defaultOptions, + settingsConfiguration, load() { return Promise.resolve({parse}); }, - parse(babylon, code, options) { - return babylon.parse(code, {...defaultOptions, ...options}); - }, - - getNodeName(node) { - switch (typeof node.type) { - case 'string': - return node.type; - case 'object': - return `Token (${node.type.label})`; - } - }, - - nodeToRange(node) { - if (typeof node.start !== 'undefined') { - return [node.start, node.end]; - } - }, - - renderSettings(parserSettings, onChange) { - return ( - - ); - }, }; diff --git a/registry/tools/jscodeshift/base.js b/registry/tools/jscodeshift/base.js new file mode 100644 index 000000000..a71de34ea --- /dev/null +++ b/registry/tools/jscodeshift/base.js @@ -0,0 +1,120 @@ +import * as category from '../../categories/js'; +import codeExample from '../../categories/js/codeExample.txt'; +import compileModule from '../../utils/compileModule'; +import defaultParserInterface from '../../utils/defaultESTreeParserInterface'; +import transformExample from './transformExample.txt'; + +const sessionMethods = new Set(); +let patched; + +function patch(jscodeshift) { + if (!patched) { + const { registerMethods } = jscodeshift; + + let origMethods; + + jscodeshift.registerMethods({ + hasOwnProperty(name) { + // compare only against current-session & very original methods + if (!origMethods) { + origMethods = new Set(Object.getOwnPropertyNames(this)); + } + return origMethods.has(name) || sessionMethods.has(name); + }, + }); + + // patch in order to collect user-defined method names + jscodeshift.registerMethods = function (methods) { + registerMethods.apply(this, arguments); + for (let name in methods) { + sessionMethods.add(name); + } + }; + patched = true; + } else { + sessionMethods.clear(); + } +} + +export default { + ...defaultParserInterface, + + category, + codeExample, + transformExample, + locationProps: new Set(['loc', 'start', 'end']), + + _ignoredProperties: new Set(['__clone']), + + *forEachProperty(node) { + for (let prop in node) { + if ( + this._ignoredProperties.has(prop) || typeof node[prop] === 'function' + ) { + continue; + } + yield { + value: node[prop], + key: prop, + computed: false, + }; + } + }, + + nodeToRange(node) { + if (typeof node.start === 'number') { + return [node.start, node.end]; + } + return node.range; + }, + + transform( + {jscodeshift}, + transformCode, + code + ) { + patch(jscodeshift); + const transformModule = compileModule( // eslint-disable-line no-shadow + transformCode + ); + const transform = transformModule.__esModule ? + transformModule.default : + transformModule; + + const counter = Object.create(null); + let statsWasCalled = false; + + const result = transform( + { + path: 'Live.js', + source: code, + }, + { + jscodeshift: transformModule.parser && jscodeshift.withParser ? + jscodeshift.withParser(transformModule.parser) : + jscodeshift, + stats: (value, quantity=1) => { + statsWasCalled = true; + counter[value] = (counter[value] ? counter[value] : 0) + quantity; + }, + }, + {} + ); + if (statsWasCalled) { + console.log(JSON.stringify(counter, null, 4)); // eslint-disable-line no-console + } + if (result == null) { + // If null is returned, the jscodeshift runner won't touch the original + // code, so we just return that. + return code; + } else if (typeof result !== 'string') { + throw new Error( + 'Transformers must either return undefined, null or a string, not ' + + `"${typeof result}".` + ); + } + return result; + }, + +}; + diff --git a/registry/tools/jscodeshift/v0.3.21.js b/registry/tools/jscodeshift/v0.3.21.js index db8307ced..eab24447a 100644 --- a/registry/tools/jscodeshift/v0.3.21.js +++ b/registry/tools/jscodeshift/v0.3.21.js @@ -1,54 +1,20 @@ -import defaultESTreeParserInterface from '../../utils/defaultESTreeParserInterface'; -import compileModule from '../../utils/compileModule'; +import base from './base'; import pkg from 'jscodeshift/package.json'; import jscodeshift from 'jscodeshift'; import recast from 'jscodeshift:recast'; import getParser from 'jscodeshift/dist/getParser'; -import * as category from '../../categories/js'; -import codeExample from '../../categories/js/codeExample.txt'; -import transformExample from './transformExample.txt'; const ID = 'jscodeshift'; -const sessionMethods = new Set(); -let patched; - export default { - ...defaultESTreeParserInterface, + ...base, id: `${ID}@${pkg.version}`, displayName: ID, version: pkg.version, homepage: pkg.homepage || 'https://github.com/facebook/jscodeshift', - category, - codeExample, - transformExample, load() { - if (!patched) { - const { registerMethods } = jscodeshift; - - let origMethods; - - jscodeshift.registerMethods({ - hasOwnProperty(name) { - // compare only against current-session & very original methods - if (!origMethods) { - origMethods = new Set(Object.getOwnPropertyNames(this)); - } - return origMethods.has(name) || sessionMethods.has(name); - }, - }); - - // patch in order to collect user-defined method names - jscodeshift.registerMethods = function (methods) { - registerMethods.apply(this, arguments); - for (let name in methods) { - sessionMethods.add(name); - } - }; - patched = true; - } return Promise.resolve({jscodeshift, recast}); }, @@ -56,75 +22,4 @@ export default { return recast.parse(code, {parser: getParser()}); }, - _ignoredProperties: new Set(['__clone']), - - *forEachProperty(node) { - for (let prop in node) { - if ( - this._ignoredProperties.has(prop) || typeof node[prop] === 'function' - ) { - continue; - } - yield { - value: node[prop], - key: prop, - computed: false, - }; - } - }, - - nodeToRange(node) { - if (typeof node.start === 'number') { - return [node.start, node.end]; - } - return node.range; - }, - - transform( - {jscodeshift}, - transformCode, - code - ) { - sessionMethods.clear(); - const transformModule = compileModule( // eslint-disable-line no-shadow - transformCode - ); - const transform = transformModule.__esModule ? - transformModule.default : - transformModule; - - const counter = Object.create(null); - let statsWasCalled = false; - - const result = transform( - { - path: 'Live.js', - source: code, - }, - { - jscodeshift: transformModule.parser ? - jscodeshift.withParser(transformModule.parser) : - jscodeshift, - stats: (value, quantity=1) => { - statsWasCalled = true; - counter[value] = (counter[value] ? counter[value] : 0) + quantity; - }, - }, - {} - ); - if (statsWasCalled) { - console.log(JSON.stringify(counter, null, 4)); // eslint-disable-line no-console - } - if (result == null) { - // If null is returned, the jscodeshift runner won't touch the original - // code, so we just return that. - return code; - } else if (typeof result !== 'string') { - throw new Error( - 'Transformers must either return undefined, null or a string, not ' + - `"${typeof result}".` - ); - } - return result; - }, }; diff --git a/registry/tools/jscodeshift/v0.3.4.js b/registry/tools/jscodeshift/v0.3.4.js index 38c9be5a0..982f0baa2 100644 --- a/registry/tools/jscodeshift/v0.3.4.js +++ b/registry/tools/jscodeshift/v0.3.4.js @@ -1,54 +1,20 @@ -import defaultESTreeParserInterface from '../../utils/defaultESTreeParserInterface'; -import compileModule from '../../utils/compileModule'; +import base from './base'; import pkg from 'jscodeshift/package.json'; import jscodeshift from 'jscodeshift'; import recast from 'jscodeshift:recast'; import babel from 'jscodeshift:babel-core'; -import * as category from '../../categories/js'; -import codeExample from '../../categories/js/codeExample.txt'; -import transformExample from './transformExample.txt'; const ID = 'jscodeshift'; -const sessionMethods = new Set(); -let patched; - export default { - ...defaultESTreeParserInterface, + ...base, id: `${ID}@${pkg.version}`, displayName: ID, version: pkg.version, homepage: pkg.homepage || 'https://github.com/facebook/jscodeshift', - category, - codeExample, - transformExample, load() { - if (!patched) { - const { registerMethods } = jscodeshift; - - let origMethods; - - jscodeshift.registerMethods({ - hasOwnProperty(name) { - // compare only against current-session & very original methods - if (!origMethods) { - origMethods = new Set(Object.getOwnPropertyNames(this)); - } - return origMethods.has(name) || sessionMethods.has(name); - }, - }); - - // patch in order to collect user-defined method names - jscodeshift.registerMethods = function (methods) { - registerMethods.apply(this, arguments); - for (let name in methods) { - sessionMethods.add(name); - } - }; - patched = true; - } return Promise.resolve({jscodeshift, recast}); }, @@ -56,73 +22,4 @@ export default { return recast.parse(code, {esprima: babel}); }, - _ignoredProperties: new Set(['__clone']), - - *forEachProperty(node) { - for (let prop in node) { - if ( - this._ignoredProperties.has(prop) || typeof node[prop] === 'function' - ) { - continue; - } - yield { - value: node[prop], - key: prop, - computed: false, - }; - } - }, - - nodeToRange(node) { - if (typeof node.start === 'number') { - return [node.start, node.end]; - } - return node.range; - }, - - transform( - {jscodeshift}, - transformCode, - code - ) { - sessionMethods.clear(); - const transformModule = compileModule( // eslint-disable-line no-shadow - transformCode - ); - const transform = transformModule.__esModule ? - transformModule.default : - transformModule; - - const counter = Object.create(null); - let statsWasCalled = false; - - const result = transform( - { - path: 'Live.js', - source: code, - }, - { - jscodeshift, - stats: (value, quantity=1) => { - statsWasCalled = true; - counter[value] = (counter[value] ? counter[value] : 0) + quantity; - }, - }, - {} - ); - if (statsWasCalled) { - console.log(JSON.stringify(counter, null, 4)); // eslint-disable-line no-console - } - if (result == null) { - // If null is returned, the jscodeshift runner won't touch the original - // code, so we just return that. - return code; - } else if (typeof result !== 'string') { - throw new Error( - 'Transformers must either return undefined, null or a string, not ' + - `"${typeof result}".` - ); - } - return result; - }, }; From b0a6a24d5e532395a34c5b2432bddeeb7b0c372a Mon Sep 17 00:00:00 2001 From: Adam Pavlisin Date: Fri, 16 Aug 2024 10:29:05 +0200 Subject: [PATCH 09/10] Create callstack-reviewer.yml --- .github/workflows/callstack-reviewer.yml | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/callstack-reviewer.yml diff --git a/.github/workflows/callstack-reviewer.yml b/.github/workflows/callstack-reviewer.yml new file mode 100644 index 000000000..93b37215c --- /dev/null +++ b/.github/workflows/callstack-reviewer.yml @@ -0,0 +1,27 @@ +name: Callstack.ai PR Review + +on: + workflow_dispatch: + inputs: + config: + type: string + description: "config for reviewer" + required: true + head: + type: string + description: "head commit sha" + required: true + base: + type: string + description: "base commit sha" + required: false + +jobs: + callstack_pr_review_job: + runs-on: ubuntu-latest + steps: + - name: Review PR + uses: callstackai/action@main + with: + config: ${{ inputs.config }} + head: ${{ inputs.head }} From 56df9c891a3ea060f9cde14c678af34bcf0f696e Mon Sep 17 00:00:00 2001 From: Adam Pavlisin Date: Wed, 9 Oct 2024 16:26:23 +0200 Subject: [PATCH 10/10] Update callstack-reviewer.yml --- .github/workflows/callstack-reviewer.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/callstack-reviewer.yml b/.github/workflows/callstack-reviewer.yml index 93b37215c..1bca86841 100644 --- a/.github/workflows/callstack-reviewer.yml +++ b/.github/workflows/callstack-reviewer.yml @@ -21,7 +21,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Review PR - uses: callstackai/action@main + uses: callstackai/action@v1.0.7 with: config: ${{ inputs.config }} head: ${{ inputs.head }} + openai_key: ${{ secrets.OPENAI_KEY_2 }} + export: /code/chats.json + channel: pre-release + tag: develop