diff --git a/.eslintignore b/.eslintignore index 6cd1b6d63f1c..78fcb7b0790a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ static/**/*.js build node_modules +v2 diff --git a/.npmignore b/.npmignore index 32f5543c282e..d483cabb0d21 100644 --- a/.npmignore +++ b/.npmignore @@ -6,3 +6,4 @@ yarn.lock website docs docusaurus-init +v2 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000000..8494ac270647 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +v2 \ No newline at end of file diff --git a/package.json b/package.json index 071f76246b3f..fd0931bfb7eb 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "jest": { "testPathIgnorePatterns": [ "/node_modules/", - "__fixtures__" + "__fixtures__", + "v2" ], "testURL": "http://localhost/" }, diff --git a/v2/.babelrc b/v2/.babelrc new file mode 100644 index 000000000000..4ffef06dbfb5 --- /dev/null +++ b/v2/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env", "react"] +} diff --git a/v2/.eslintignore b/v2/.eslintignore new file mode 100644 index 000000000000..87b2a4f5048c --- /dev/null +++ b/v2/.eslintignore @@ -0,0 +1,4 @@ +generated +__fixtures__ +dist +website diff --git a/v2/.eslintrc.js b/v2/.eslintrc.js new file mode 100644 index 000000000000..3945fc85bbf2 --- /dev/null +++ b/v2/.eslintrc.js @@ -0,0 +1,23 @@ +const OFF = 0; +const WARNING = 1; +const ERROR = 2; + +module.exports = { + env: { + browser: true, + commonjs: true, + jest: true, + node: true, + }, + extends: ['airbnb', 'prettier'], + rules: { + 'no-console': OFF, + 'func-names': OFF, + 'react/jsx-filename-extension': OFF, + 'react/jsx-one-expression-per-line': OFF, + 'react/prop-types': OFF, + 'react/destructuring-assignment': OFF, // too many lines + 'import/no-unresolved': WARNING, // because it couldn't resolve webpack alias + 'react/prefer-stateless-function': WARNING, + }, +}; diff --git a/v2/.gitignore b/v2/.gitignore new file mode 100644 index 000000000000..6fd39e33e821 --- /dev/null +++ b/v2/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.vscode +.idea +.eslintcache +node_modules +dist +yarn-error.log +generated +website/node_modules +build diff --git a/v2/.prettierignore b/v2/.prettierignore new file mode 100644 index 000000000000..9eb5d6bb2009 --- /dev/null +++ b/v2/.prettierignore @@ -0,0 +1,3 @@ +generated +__fixtures__ +dist \ No newline at end of file diff --git a/v2/.prettierrc b/v2/.prettierrc new file mode 100644 index 000000000000..32115bd6132d --- /dev/null +++ b/v2/.prettierrc @@ -0,0 +1,8 @@ +{ + "bracketSpacing": false, + "jsxBracketSameLine": true, + "parser": "flow", + "printWidth": 80, + "proseWrap": "never", + "singleQuote": true +} diff --git a/v2/README.md b/v2/README.md new file mode 100644 index 000000000000..88425d6b7d76 --- /dev/null +++ b/v2/README.md @@ -0,0 +1,13 @@ +# Munseo + +## Development Server + +```bash +yarn start # open http://localhost:3000/ +``` + +## Production Build + +```bash +yarn build # check website/build +``` diff --git a/v2/bin/munseo.js b/v2/bin/munseo.js new file mode 100644 index 000000000000..fafbb8095b45 --- /dev/null +++ b/v2/bin/munseo.js @@ -0,0 +1,73 @@ +#!/usr/bin/env node + +const chalk = require('chalk'); +const semver = require('semver'); +const path = require('path'); +const program = require('commander'); +const {build, eject, init, start} = require('../lib'); +const requiredVersion = require('../package.json').engines.node; + +if (!semver.satisfies(process.version, requiredVersion)) { + console.log( + chalk.red(`\nMinimum node version not met :)`) + + chalk.yellow( + `\nYou are using Node ${ + process.version + }, Requirement: Node ${requiredVersion}.\n` + ) + ); + process.exit(1); +} + +function wrapCommand(fn) { + return (...args) => + fn(...args).catch(err => { + console.error(chalk.red(err.stack)); + process.exitCode = 1; + }); +} + +program + .version(require('../package.json').version) + .usage(' [options]'); + +program + .command('build [siteDir]') + .description('Build website') + .option( + '-sic, --skip-image-compression ', + 'Skip compression of image assets (default: false)' + ) + .action((siteDir = '.', {skipImageCompression}) => { + wrapCommand(build)(path.resolve(siteDir), {skipImageCompression}); + }); + +program + .command('eject [siteDir]') + .description('copy the default theme into website folder for customization.') + .action((siteDir = '.') => { + wrapCommand(eject)(path.resolve(siteDir)); + }); + +program + .command('init [projectDir]') + .description('Initialize website') + .action((projectDir = '.') => { + wrapCommand(init)(path.resolve(projectDir)); + }); + +program + .command('start [siteDir]') + .description('Start development server') + .option('-p, --port ', 'use specified port (default: 3000)') + .option('-h, --host ', 'use specified host (default: localhost') + .option('-nw, --no-watch ', 'disable live reload (default: false)') + .action((siteDir = '.', {port, noWatch}) => { + wrapCommand(start)(path.resolve(siteDir), {port, noWatch}); + }); + +program.parse(process.argv); + +if (!process.argv.slice(2).length) { + program.outputHelp(); +} diff --git a/v2/docs/docusaurus.md b/v2/docs/docusaurus.md new file mode 100644 index 000000000000..b7bf133d9c51 --- /dev/null +++ b/v2/docs/docusaurus.md @@ -0,0 +1,26 @@ +--- +id: docusaurus +title: docusaurus +--- + +

+

Docusaurus

+ Docusaurus +

+ +

+ npm version + CircleCI Status + PRs Welcome + Chat + code style: prettier + Tested with Jest +

+ +## Introduction + +Docusaurus is a project for easily building, deploying, and maintaining open source project websites. + +* **Simple to Start** Docusaurus is built to be easy to [get up and running](https://docusaurus.io/docs/en/installation.html) in as little time possible. We've built Docusaurus to handle the website build process so you can focus on your project. +* **Localizable** Docusaurus ships with [localization support](https://docusaurus.io/docs/en/translation.html) via CrowdIn. Empower and grow your international community by translating your documentation. +* **Customizable** While Docusaurus ships with the key pages and sections you need to get started, including a home page, a docs section, a [blog](https://docusaurus.io/docs/en/blog.html), and additional support pages, it is also [customizable](https://docusaurus.io/docs/en/custom-pages.html) as well to ensure you have a site that is [uniquely yours](https://docusaurus.io/docs/en/api-pages.html). \ No newline at end of file diff --git a/v2/docs/foo/bar.md b/v2/docs/foo/bar.md new file mode 100644 index 000000000000..f50858ac6467 --- /dev/null +++ b/v2/docs/foo/bar.md @@ -0,0 +1,51 @@ +--- +id: bar +title: My Title +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +This is horizontal rule + +___ + +*** + +*** + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/docs/foo/baz.md b/v2/docs/foo/baz.md new file mode 100644 index 000000000000..b8fc124222df --- /dev/null +++ b/v2/docs/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: baz +title: Test Markdown +--- + +## Images + +![Sakura](/img/sakura.png) + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/docs/hello.md b/v2/docs/hello.md new file mode 100644 index 000000000000..0fd648068bc4 --- /dev/null +++ b/v2/docs/hello.md @@ -0,0 +1,52 @@ +--- +id: hello +title: Hello, World ! +--- + +## Relative links + +Replace this +[highlight](highlight.md) [docusaurus](docusaurus.md) + +Can't replace this +[file](file.md) + +Do not replace below + +``` +[highlight](highlight.md) [docusaurus](docusaurus.md) +``` + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/docs/highlight.md b/v2/docs/highlight.md new file mode 100644 index 000000000000..371afed03aa7 --- /dev/null +++ b/v2/docs/highlight.md @@ -0,0 +1,44 @@ +--- +id: highlight +title: Syntax highlighting demo +--- + +```cpp +#include +using namespace std; + +int main() { + cout << "Hello world\n"; + return 0; +} + +``` + +```cpp +#include +using namespace std; + +int main() +{ + int n, i; + bool isPrime = true; + + cout << "Enter a positive integer: "; + cin >> n; + + for(i = 2; i <= n / 2; ++i) + { + if(n % i == 0) + { + isPrime = false; + break; + } + } + if (isPrime) + cout << "This is a prime number"; + else + cout << "This is not a prime number"; + + return 0; +} +``` \ No newline at end of file diff --git a/v2/lib/commands/build.js b/v2/lib/commands/build.js new file mode 100644 index 000000000000..a2da9b3ddaa9 --- /dev/null +++ b/v2/lib/commands/build.js @@ -0,0 +1,77 @@ +const webpack = require('webpack'); +const path = require('path'); +const chalk = require('chalk'); +const fs = require('fs-extra'); +const globby = require('globby'); +const load = require('../load'); +const createServerConfig = require('../webpack/server'); +const createClientConfig = require('../webpack/client'); +const {applyConfigureWebpack} = require('../webpack/utils'); + +function compile(config) { + return new Promise((resolve, reject) => { + webpack(config, (err, stats) => { + if (err) { + reject(err); + } + if (stats.hasErrors()) { + stats.toJson().errors.forEach(e => { + console.error(e); + }); + reject(new Error(`Failed to compile with errors.`)); + } + if (stats.hasWarnings()) { + stats.toJson().warnings.forEach(warning => { + console.warn(warning); + }); + } + resolve(stats.toJson({modules: false})); + }); + }); +} + +module.exports = async function build(siteDir, cliOptions = {}) { + process.env.NODE_ENV = 'production'; + console.log('Build command invoked ...'); + console.log(cliOptions); + + const props = await load(siteDir); + + let serverConfig = createServerConfig(props).toConfig(); + let clientConfig = createClientConfig(props).toConfig(); + + // apply user webpack config + const { + siteConfig: {configureWebpack} + } = props; + clientConfig = applyConfigureWebpack(configureWebpack, clientConfig, false); + serverConfig = applyConfigureWebpack(configureWebpack, serverConfig, true); + + // Build the client bundles first. + // We cannot run them in parallel because the server need to pickup the correct client bundle name + await compile(clientConfig); + + // Build the server bundles (render the static HTML and pick client bundle) + await compile(serverConfig); + + // copy static files + const {outDir} = props; + const staticDir = path.resolve(siteDir, 'static'); + const staticFiles = await globby(['**'], { + cwd: staticDir + }); + await Promise.all( + staticFiles.map(async source => { + const fromPath = path.resolve(staticDir, source); + const toPath = path.resolve(outDir, source); + return fs.copy(fromPath, toPath); + }) + ); + + const relativeDir = path.relative(process.cwd(), outDir); + console.log( + `\n${chalk.green('Success!')} Generated static files in ${chalk.cyan( + relativeDir + )}.\n` + ); +}; diff --git a/v2/lib/commands/eject.js b/v2/lib/commands/eject.js new file mode 100644 index 000000000000..42c630747d9d --- /dev/null +++ b/v2/lib/commands/eject.js @@ -0,0 +1,16 @@ +const fs = require('fs-extra'); +const chalk = require('chalk'); +const path = require('path'); + +module.exports = async function eject(siteDir) { + const defaultTheme = path.resolve(__dirname, '..', 'theme'); + const customTheme = path.resolve(siteDir, 'theme'); + await fs.copy(defaultTheme, customTheme); + + const relativeDir = path.relative(process.cwd(), customTheme); + console.log( + `\n${chalk.green('Success!')} Copied default theme files to ${chalk.cyan( + relativeDir + )}.\n` + ); +}; diff --git a/v2/lib/commands/init.js b/v2/lib/commands/init.js new file mode 100644 index 000000000000..cdc13aca8252 --- /dev/null +++ b/v2/lib/commands/init.js @@ -0,0 +1,7 @@ +module.exports = async function init(projectDir, cliOptions = {}) { + console.log('Init command invoked ...'); + console.log(projectDir); + console.log(cliOptions); + + // TODO +}; diff --git a/v2/lib/commands/start.js b/v2/lib/commands/start.js new file mode 100644 index 000000000000..bc4a35052028 --- /dev/null +++ b/v2/lib/commands/start.js @@ -0,0 +1,124 @@ +const path = require('path'); +const fs = require('fs-extra'); +const chalk = require('chalk'); +const webpack = require('webpack'); +const chokidar = require('chokidar'); +const convert = require('koa-connect'); +const range = require('koa-range'); +const mount = require('koa-mount'); +const serveStatic = require('koa-static'); +const history = require('connect-history-api-fallback'); +const portfinder = require('portfinder'); +const serve = require('webpack-serve'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const load = require('../load'); +const createClientConfig = require('../webpack/client'); +const {applyConfigureWebpack} = require('../webpack/utils'); + +function getHost(reqHost) { + return reqHost || 'localhost'; +} + +async function getPort(reqPort) { + portfinder.basePort = parseInt(reqPort, 10) || 3000; + const port = await portfinder.getPortPromise(); + return port; +} + +module.exports = async function start(siteDir, cliOptions = {}) { + console.log('Start command invoked ...'); + console.log(cliOptions); + + // Process all related files as a prop + const props = await load(siteDir); + + // Reload files processing + if (!cliOptions.noWatch) { + const reload = () => { + load(siteDir).catch(err => { + console.error(chalk.red(err.stack)); + }); + }; + const docsRelativeDir = props.siteConfig.customDocsPath; + const fsWatcher = chokidar.watch( + [`../${docsRelativeDir}/**/*.md`, 'blog/**/*.md', 'siteConfig.js'], + { + cwd: siteDir, + ignoreInitial: true + } + ); + fsWatcher.on('add', reload); + fsWatcher.on('change', reload); + fsWatcher.on('unlink', reload); + fsWatcher.on('addDir', reload); + fsWatcher.on('unlinkDir', reload); + } + + const port = await getPort(cliOptions.port); + const hotPort = await getPort(port + 1); + const host = getHost(cliOptions.host); + const {baseUrl} = props; + + // create compiler from generated webpack config + let config = createClientConfig(props); + + const {siteConfig} = props; + config.plugin('html-webpack-plugin').use(HtmlWebpackPlugin, [ + { + inject: false, + hash: true, + template: path.resolve(__dirname, '../core/devTemplate.ejs'), + filename: 'index.html', + title: siteConfig.title + } + ]); + config = config.toConfig(); + + // apply user webpack config + const { + siteConfig: {configureWebpack} + } = props; + config = applyConfigureWebpack(configureWebpack, config, false); + + const compiler = webpack(config); + + // webpack-serve + setTimeout(async () => { + await serve( + {}, + { + compiler, + open: true, + devMiddleware: { + logLevel: 'silent' + }, + hotClient: { + port: hotPort, + logLevel: 'error' + }, + logLevel: 'error', + port, + host, + add: app => { + // serve static files + const staticDir = path.resolve(siteDir, 'static'); + if (fs.existsSync(staticDir)) { + app.use(mount(baseUrl, serveStatic(staticDir))); + } + + // enable HTTP range requests + app.use(range); + + // rewrite request to `/` since dev is only a SPA + app.use( + convert( + history({ + rewrites: [{from: /\.html$/, to: '/'}] + }) + ) + ); + } + } + ); + }, 1000); +}; diff --git a/v2/lib/core/App.js b/v2/lib/core/App.js new file mode 100644 index 000000000000..4fabf192dc63 --- /dev/null +++ b/v2/lib/core/App.js @@ -0,0 +1,15 @@ +import {renderRoutes} from 'react-router-config'; + +import routes from '@generated/routes'; // eslint-disable-line +import docsMetadatas from '@generated/docsMetadatas'; // eslint-disable-line +import docsSidebars from '@generated/docsSidebars'; // eslint-disable-line +import pagesMetadatas from '@generated/pagesMetadatas'; // eslint-disable-line +import siteConfig from '@generated/siteConfig'; //eslint-disable-line + +export default () => + renderRoutes(routes, { + docsMetadatas, + docsSidebars, + pagesMetadatas, + siteConfig + }); diff --git a/v2/lib/core/clientEntry.js b/v2/lib/core/clientEntry.js new file mode 100644 index 000000000000..38f475e627a9 --- /dev/null +++ b/v2/lib/core/clientEntry.js @@ -0,0 +1,19 @@ +import React from 'react'; +import {BrowserRouter} from 'react-router-dom'; +import ReactDOM from 'react-dom'; + +import App from './App'; +import prerender from './prerender'; +import routes from '@generated/routes'; // eslint-disable-line + +// Client side render (e.g: running in browser) to become single-page application (SPA) +if (typeof window !== 'undefined' && typeof document !== 'undefined') { + prerender(routes, window.location.pathname).then(() => { + ReactDOM.render( + + + , + document.getElementById('app') + ); + }); +} diff --git a/v2/lib/core/devTemplate.ejs b/v2/lib/core/devTemplate.ejs new file mode 100644 index 000000000000..400bf45ea162 --- /dev/null +++ b/v2/lib/core/devTemplate.ejs @@ -0,0 +1,12 @@ + + + + + + <%= htmlWebpackPlugin.options.title %> + + +
+ + + \ No newline at end of file diff --git a/v2/lib/core/prerender.js b/v2/lib/core/prerender.js new file mode 100644 index 000000000000..7e4189361791 --- /dev/null +++ b/v2/lib/core/prerender.js @@ -0,0 +1,18 @@ +import {matchRoutes} from 'react-router-config'; + +/** + * This helps us to make sure all the async component for that particular route + * is loaded before rendering. This is to avoid loading screens on first page load + */ +export default function prerender(routeConfig, providedLocation) { + const matches = matchRoutes(routeConfig, providedLocation); + return Promise.all( + matches.map(match => { + const {component} = match.route; + if (component && component.preload) { + return component.preload(); + } + return undefined; + }) + ); +} diff --git a/v2/lib/core/serverEntry.js b/v2/lib/core/serverEntry.js new file mode 100644 index 000000000000..1bd7dab1803a --- /dev/null +++ b/v2/lib/core/serverEntry.js @@ -0,0 +1,59 @@ +import React from 'react'; +import {StaticRouter} from 'react-router-dom'; +import ReactDOMServer from 'react-dom/server'; +import Helmet from 'react-helmet'; + +import App from './App'; +import prerender from './prerender'; +import routes from '@generated/routes'; // eslint-disable-line +import webpackClientStats from '@build/client.stats.json'; //eslint-disable-line + +// Renderer for static-site-generator-webpack-plugin (async rendering via promises) +export default function render(locals) { + return prerender(routes, locals.path).then(() => { + const context = {}; + const appHtml = ReactDOMServer.renderToString( + + + + ); + + const helmet = Helmet.renderStatic(); + const htmlAttributes = helmet.htmlAttributes.toString(); + const bodyAttributes = helmet.bodyAttributes.toString(); + const metaStrings = [ + helmet.title.toString(), + helmet.meta.toString(), + helmet.link.toString() + ]; + const metaHtml = metaStrings.filter(Boolean).join('\n '); + + const assets = webpackClientStats.assetsByChunkName.main; + const jsFiles = assets.filter(value => value.match(/\.js$/)); + const cssFiles = assets.filter(value => value.match(/\.css$/)); + const {baseUrl} = locals; + + const html = ` + + + + ${metaHtml} + + + ${cssFiles.map( + cssFile => + `` + )} + + +
${appHtml}
+ ${jsFiles.map( + jsFile => + `` + )} + + +`; + return html; + }); +} diff --git a/v2/lib/index.js b/v2/lib/index.js new file mode 100644 index 000000000000..03c0a0dab087 --- /dev/null +++ b/v2/lib/index.js @@ -0,0 +1,11 @@ +const build = require('./commands/build'); +const init = require('./commands/init'); +const start = require('./commands/start'); +const eject = require('./commands/eject'); + +module.exports = { + build, + eject, + init, + start +}; diff --git a/v2/lib/load/config.js b/v2/lib/load/config.js new file mode 100644 index 000000000000..890b92ddfbcf --- /dev/null +++ b/v2/lib/load/config.js @@ -0,0 +1,67 @@ +const fs = require('fs-extra'); +const path = require('path'); + +module.exports = function loadConfig(siteDir, deleteCache = true) { + const configPath = path.resolve(siteDir, 'siteConfig.js'); + if (deleteCache) { + delete require.cache[configPath]; + } + let config = {}; + if (fs.existsSync(configPath)) { + config = require(configPath); // eslint-disable-line + } + + const requiredFields = [ + 'title', + 'tagline', + 'organizationName', + 'projectName', + 'baseUrl' + ]; + const optionalFields = [ + 'customDocsPath', + 'defaultLanguage', + 'highlight', + 'markdownPlugins', + 'configureWebpack', + 'chainWebpack', + 'docsUrl', + 'customFields' + ]; + const missingFields = requiredFields.filter(field => !config[field]); + if (missingFields && missingFields.length > 0) { + throw new Error( + `${missingFields.join(', ')} fields are missing in siteConfig.js` + ); + } + + /* Fill default value */ + const defaultConfig = { + customDocsPath: 'docs', + docsUrl: 'docs' + }; + Object.keys(defaultConfig).forEach(field => { + if (!config[field]) { + config[field] = defaultConfig[field]; + } + }); + + /* + User's own array of custom fields, + e.g: if they want to include some field so they can access it later from `props.siteConfig` + */ + const {customFields = []} = config; + + /* We don't allow useless/ not meaningful field */ + const allowedFields = [...requiredFields, ...optionalFields, ...customFields]; + const uselessFields = Object.keys(config).filter( + field => !allowedFields.includes(field) + ); + if (uselessFields && uselessFields.length > 0) { + throw new Error( + `${uselessFields.join(', ')} fields are useless in siteConfig.js` + ); + } + + return config; +}; diff --git a/v2/lib/load/docs/index.js b/v2/lib/load/docs/index.js new file mode 100644 index 000000000000..fd7e6aa74842 --- /dev/null +++ b/v2/lib/load/docs/index.js @@ -0,0 +1,129 @@ +const path = require('path'); +const globby = require('globby'); +const createOrder = require('./order'); +const loadSidebars = require('./sidebars'); +const processMetadata = require('./metadata'); +const {getSubFolder, idx} = require('../utils'); + +async function loadDocs({siteDir, docsDir, env, siteConfig}) { + // @tested - load all sidebars including versioned sidebars + const docsSidebars = loadSidebars({siteDir, env}); + + // @tested - build the docs ordering such as next, previous, category and sidebar + const order = createOrder(docsSidebars); + + /* Settle versions & translations from environment */ + const translationEnabled = idx(env, ['translation', 'enabled']); + const enabledLanguages = + translationEnabled && idx(env, ['translation', 'enabledLanguages']); + const enabledLangTags = + (enabledLanguages && enabledLanguages.map(lang => lang.tag)) || []; + const defaultLangTag = idx(env, ['translation', 'defaultLanguage', 'tag']); + const versioningEnabled = idx(env, ['versioning', 'enabled']); + const versions = + (versioningEnabled && idx(env, ['versioning', 'versions'])) || []; + + /* Prepare metadata container */ + const docsMetadatas = {}; + + /* metadata for default docs files */ + const docsFiles = await globby(['**/*.md'], { + cwd: docsDir + }); + await Promise.all( + docsFiles.map(async source => { + /* + Do not allow reserved version/ translated folder name in 'docs' + e.g: 'docs/version-1.0.0/' should not be allowed as it can cause unwanted bug + */ + const subFolder = getSubFolder(path.resolve(docsDir, source), docsDir); + const versionsFolders = versions.map(version => `version-${version}`); + if ([...enabledLangTags, ...versionsFolders].includes(subFolder)) { + throw new Error(`You cannot have a folder named 'docs/${subFolder}/'`); + } + + const metadata = await processMetadata( + source, + docsDir, + env, + order, + siteConfig + ); + docsMetadatas[metadata.id] = metadata; + }) + ); + + /* metadata for non-default-language docs */ + if (translationEnabled) { + const translatedDir = path.join(siteDir, 'translated_docs'); + const translatedFiles = await globby(['**/*.md'], { + cwd: translatedDir + }); + await Promise.all( + translatedFiles.map(async source => { + /* + Do not process disabled & default languages folder in `translated_docs` + e.g: 'translated_docs/ja/**' should not be processed if lang 'ja' is disabled + */ + const translatedFilePath = path.resolve(translatedDir, source); + const detectedLangTag = getSubFolder(translatedFilePath, translatedDir); + if ( + detectedLangTag === defaultLangTag || + !enabledLangTags.includes(detectedLangTag) + ) { + return; + } + + const metadata = await processMetadata( + source, + translatedDir, + env, + order, + siteConfig + ); + docsMetadatas[metadata.id] = metadata; + }) + ); + } + + /* metadata for versioned docs */ + if (versioningEnabled) { + const versionedDir = path.join(siteDir, 'versioned_docs'); + const versionedFiles = await globby(['**/*.md'], { + cwd: versionedDir + }); + await Promise.all( + versionedFiles.map(async source => { + const metadata = await processMetadata( + source, + versionedDir, + env, + order, + siteConfig + ); + docsMetadatas[metadata.id] = metadata; + }) + ); + } + + /* Get the titles of the previous and next ids so that we can use them */ + Object.keys(docsMetadatas).forEach(currentID => { + const previousID = idx(docsMetadatas, [currentID, 'previous']); + if (previousID) { + const previousTitle = idx(docsMetadatas, [previousID, 'title']); + docsMetadatas[currentID].previous_title = previousTitle || 'Previous'; + } + const nextID = idx(docsMetadatas, [currentID, 'next']); + if (nextID) { + const nextTitle = idx(docsMetadatas, [nextID, 'title']); + docsMetadatas[currentID].next_title = nextTitle || 'Next'; + } + }); + + return { + docsSidebars, + docsMetadatas + }; +} + +module.exports = loadDocs; diff --git a/v2/lib/load/docs/metadata.js b/v2/lib/load/docs/metadata.js new file mode 100644 index 000000000000..9a8c2687dcbe --- /dev/null +++ b/v2/lib/load/docs/metadata.js @@ -0,0 +1,170 @@ +const fs = require('fs-extra'); +const path = require('path'); +const {getSubFolder, idx, parse} = require('../utils'); + +function getLanguage(filepath, refDir, env) { + const translationEnabled = idx(env, ['translation', 'enabled']); + if (translationEnabled) { + const detectedLangTag = getSubFolder(filepath, refDir); + const enabledLanguages = idx(env, ['translation', 'enabledLanguages']); + const langTags = + (enabledLanguages && enabledLanguages.map(lang => lang.tag)) || []; + if (langTags.includes(detectedLangTag)) { + return detectedLangTag; + } + const defaultLanguage = idx(env, ['translation', 'defaultLanguage']); + if (defaultLanguage && defaultLanguage.tag) { + return defaultLanguage.tag; + } + } + return undefined; +} + +function getVersion(filepath, refDir, env) { + const versioningEnabled = idx(env, ['versioning', 'enabled']); + if (versioningEnabled) { + const subFolder = getSubFolder(filepath, refDir); + if (subFolder) { + const detectedVersion = subFolder.replace(/^version-/, ''); + const versions = idx(env, ['versioning', 'versions']) || []; + if (versions.includes(detectedVersion)) { + return detectedVersion; + } + } + return 'next'; + } + return undefined; +} + +module.exports = async function processMetadata( + source, + refDir, + env, + order, + siteConfig +) { + const filepath = path.resolve(refDir, source); + const fileString = await fs.readFile(filepath, 'utf-8'); + const {metadata} = parse(fileString); + + /* default id is the file name */ + if (!metadata.id) { + metadata.id = path.basename(source, path.extname(source)); + } + if (metadata.id.includes('/')) { + throw new Error('Document id cannot include "/".'); + } + + /* default title is the id */ + if (!metadata.title) { + metadata.title = metadata.id; + } + + /* language */ + const language = getLanguage(filepath, refDir, env); + metadata.language = language; + const langPart = (language && `${language}/`) || ''; + + /* version */ + const defaultLangTag = idx(env, ['translation', 'defaultLanguage', 'tag']); + let versionRefDir = refDir; + if (language && language !== defaultLangTag) { + versionRefDir = path.join(refDir, language); + } + const version = getVersion(filepath, versionRefDir, env); + metadata.version = version; + const latestVersion = idx(env, ['versioning', 'latestVersion']); + const versionPart = + (version && version !== latestVersion && `${version}/`) || ''; + + /* + Convert temporarily metadata.id to the form of dirname/id without version/lang prefix + ex: file `versioned_docs/version-1.0.0/en/foo/bar.md` with id `version-1.0.0-bar` => `foo/bar` + */ + if (language) { + metadata.id = metadata.id.replace(new RegExp(`^${language}-`), ''); + } + + if (version) { + metadata.id = metadata.id.replace(new RegExp(`^version-${version}-`), ''); + } + + const dirName = path.dirname(source); + if (dirName !== '.') { + let prefix = dirName; + if (language) { + prefix = prefix.replace(new RegExp(`^${language}`), ''); + } + prefix = prefix.replace(/^\//, ''); + if (version) { + prefix = prefix.replace(new RegExp(`^version-${version}`), ''); + } + prefix = prefix.replace(/^\//, ''); + if (prefix) { + metadata.id = `${prefix}/${metadata.id}`; + } + } + + /* + The docs file source + e.g: `@docs/hello.md` or `@versioned_docs/version-1.0.0/hello.md` + */ + if (language && language !== defaultLangTag) { + metadata.source = `@translated_docs/${source}`; + } else if (version && version !== 'next') { + metadata.source = `@versioned_docs/${source}`; + } else { + metadata.source = `@docs/${source}`; + } + + /* Build the permalink */ + const {baseUrl, docsUrl} = siteConfig; + + /* + if user has own custom permalink defined in frontmatter + e.g: :baseUrl:docsUrl/:langPart/:versionPart/endiliey/:id + */ + if (metadata.permalink) { + metadata.permalink = path.resolve( + metadata.permalink + .replace(/:baseUrl/, baseUrl) + .replace(/:docsUrl/, docsUrl) + .replace(/:langPart/, langPart) + .replace(/:versionPart/, versionPart) + .replace(/:id/, metadata.id) + ); + } else { + metadata.permalink = `${baseUrl}${docsUrl}/${langPart}${versionPart}${ + metadata.id + }`; + } + + /* if version */ + if (version && version !== 'next') { + metadata.id = `version-${version}-${metadata.id}`; + } + + /* save localized id before adding language on it */ + metadata.localized_id = metadata.id; + + /* if language */ + if (language) { + metadata.id = `${language}-${metadata.id}`; + } + + /* Determine order */ + const id = metadata.localized_id; + if (order[id]) { + metadata.sidebar = order[id].sidebar; + metadata.category = order[id].category; + if (order[id].next) { + metadata.next_id = order[id].next; + metadata.next = (language ? `${language}-` : '') + order[id].next; + } + if (order[id].previous) { + metadata.previous_id = order[id].previous; + metadata.previous = (language ? `${language}-` : '') + order[id].previous; + } + } + return metadata; +}; diff --git a/v2/lib/load/docs/order.js b/v2/lib/load/docs/order.js new file mode 100644 index 000000000000..5f9f6c347832 --- /dev/null +++ b/v2/lib/load/docs/order.js @@ -0,0 +1,36 @@ +// build the docs meta such as next, previous, category and sidebar +module.exports = function createOrder(allSidebars = {}) { + const order = {}; + if (!allSidebars) { + return order; + } + Object.keys(allSidebars).forEach(sidebar => { + const categories = allSidebars[sidebar]; + + let ids = []; + const categoryOrder = []; + Object.keys(categories).forEach(category => { + ids = ids.concat(categories[category]); + // eslint-disable-next-line + for (let i = 0; i < categories[category].length; i++) { + categoryOrder.push(category); + } + }); + + // eslint-disable-next-line + for (let i = 0; i < ids.length; i++) { + const id = ids[i]; + let previous; + let next; + if (i > 0) previous = ids[i - 1]; + if (i < ids.length - 1) next = ids[i + 1]; + order[id] = { + previous, + next, + sidebar, + category: categoryOrder[i] + }; + } + }); + return order; +}; diff --git a/v2/lib/load/docs/sidebars.js b/v2/lib/load/docs/sidebars.js new file mode 100644 index 000000000000..fd27c22177b6 --- /dev/null +++ b/v2/lib/load/docs/sidebars.js @@ -0,0 +1,35 @@ +const fs = require('fs-extra'); +const path = require('path'); +const {idx} = require('../utils'); + +module.exports = function loadSidebars({siteDir, env}) { + let allSidebars = {}; + + // current sidebars + const sidebarsJSONFile = path.join(siteDir, 'sidebars.json'); + if (fs.existsSync(sidebarsJSONFile)) { + allSidebars = require(sidebarsJSONFile); // eslint-disable-line + } + + // versioned sidebars + if (idx(env, ['versioning', 'enabled'])) { + const versions = idx(env, ['versioning', 'versions']); + if (Array.isArray(versions)) { + versions.forEach(version => { + const versionedSidebarsJSONFile = path.join( + siteDir, + 'versioned_sidebars', + `version-${version}-sidebars.json` + ); + if (fs.existsSync(versionedSidebarsJSONFile)) { + const sidebar = require(versionedSidebarsJSONFile); // eslint-disable-line + Object.assign(allSidebars, sidebar); + } else { + const missingFile = path.relative(siteDir, versionedSidebarsJSONFile); + throw new Error(`Failed to load ${missingFile}. It does not exist.`); + } + }); + } + } + return allSidebars; +}; diff --git a/v2/lib/load/env.js b/v2/lib/load/env.js new file mode 100644 index 000000000000..41d45fcd68bd --- /dev/null +++ b/v2/lib/load/env.js @@ -0,0 +1,60 @@ +const fs = require('fs-extra'); +const path = require('path'); +const {idx} = require('./utils'); + +module.exports = function loadEnv({siteDir, siteConfig}) { + // Translation + const translation = { + enabled: false, + enabledLanguages: [], + defaultLanguage: {} + }; + + const languagesFile = path.join(siteDir, 'languages.js'); + if (fs.existsSync(languagesFile)) { + const languages = require(languagesFile); // eslint-disable-line + + /* Enabled languages */ + const enabledLanguages = languages.filter(lang => lang.enabled); + if (!enabledLanguages || enabledLanguages.length === 0) { + throw new Error(`Please at least enable one language in 'languages.js'`); + } + translation.enabledLanguages = enabledLanguages; + + /* Default Language */ + const {defaultLanguage: defaultLanguageTag} = siteConfig; + const defaultLanguage = enabledLanguages.find( + lang => lang.tag === defaultLanguageTag + ); + if (!defaultLanguage) { + throw new Error( + `Please set a default language in 'siteConfig.js' which is enabled in 'languages.js'` + ); + } + translation.defaultLanguage = defaultLanguage; + + translation.enabled = true; + } + + // Versioning + const versioning = { + enabled: false, + latestVersion: null, + defaultVersion: null, + versions: [] + }; + + const versionsJSONFile = path.join(siteDir, 'versions.json'); + if (fs.existsSync(versionsJSONFile)) { + versioning.enabled = true; + versioning.versions = JSON.parse(fs.readFileSync(versionsJSONFile, 'utf8')); + versioning.latestVersion = idx(versioning, ['versions', 0]); + const {defaultVersionShown} = siteConfig; + versioning.defaultVersion = defaultVersionShown || versioning.latestVersion; + } + + return { + translation, + versioning + }; +}; diff --git a/v2/lib/load/index.js b/v2/lib/load/index.js new file mode 100644 index 000000000000..2dd0bd4ff367 --- /dev/null +++ b/v2/lib/load/index.js @@ -0,0 +1,90 @@ +const path = require('path'); +const loadConfig = require('./config'); +const loadDocs = require('./docs'); +const loadEnv = require('./env'); +const loadPages = require('./pages'); +const loadTheme = require('./theme'); +const {generate} = require('./utils'); +const genRoutesConfig = require('./routes'); + +module.exports = async function load(siteDir) { + // @tested - siteConfig + const siteConfig = loadConfig(siteDir); + await generate( + 'siteConfig.js', + `export default ${JSON.stringify(siteConfig, null, 2)};` + ); + + // @tested - env + const env = loadEnv({siteDir, siteConfig}); + + // docs + const docsDir = path.resolve(siteDir, '..', siteConfig.customDocsPath); + const {docsMetadatas, docsSidebars} = await loadDocs({ + siteDir, + docsDir, + env, + siteConfig + }); + await generate( + 'docsMetadatas.js', + `export default ${JSON.stringify(docsMetadatas, null, 2)};` + ); + await generate( + 'docsSidebars.js', + `export default ${JSON.stringify(docsSidebars, null, 2)};` + ); + + /* Create source to metadata mapping */ + const sourceToMetadata = {}; + Object.values(docsMetadatas).forEach( + ({source, version, permalink, language}) => { + sourceToMetadata[source] = { + version, + permalink, + language + }; + } + ); + + // pages + const pagesDir = path.resolve(siteDir, 'pages'); + const pagesMetadatas = await loadPages(pagesDir); + await generate( + 'pagesMetadatas.js', + `export default ${JSON.stringify(pagesMetadatas, null, 2)};` + ); + + // resolve outDir + const outDir = path.resolve(siteDir, 'build'); + + // resolve the theme + const themePath = loadTheme(siteDir); + + const {baseUrl} = siteConfig; + const versionedDir = path.join(siteDir, 'versioned_docs'); + const translatedDir = path.join(siteDir, 'translated_docs'); + + const props = { + siteConfig, + siteDir, + docsDir, + docsMetadatas, + docsSidebars, + env, + pagesDir, + pagesMetadatas, + outDir, + themePath, + baseUrl, + sourceToMetadata, + versionedDir, + translatedDir + }; + + // Generate React Router Config + const routesConfig = await genRoutesConfig(props); + await generate('routes.js', routesConfig); + + return props; +}; diff --git a/v2/lib/load/pages.js b/v2/lib/load/pages.js new file mode 100644 index 000000000000..5c1b46f6da07 --- /dev/null +++ b/v2/lib/load/pages.js @@ -0,0 +1,18 @@ +const globby = require('globby'); +const {encodePath, fileToPath} = require('./utils'); + +async function loadPages(pagesDir) { + const pagesFiles = await globby(['**/*.js'], { + cwd: pagesDir + }); + + const pagesMetadatas = await Promise.all( + pagesFiles.map(async source => ({ + path: encodePath(fileToPath(source)), + source + })) + ); + return pagesMetadatas; +} + +module.exports = loadPages; diff --git a/v2/lib/load/routes.js b/v2/lib/load/routes.js new file mode 100644 index 000000000000..2c63a747d38f --- /dev/null +++ b/v2/lib/load/routes.js @@ -0,0 +1,58 @@ +async function genRoutesConfig({docsMetadatas = {}, pagesMetadatas = []}) { + function genDocsRoute(metadata) { + const {permalink, source} = metadata; + return ` + { + path: ${JSON.stringify(permalink)}, + exact: true, + component: Loadable({ + loader: () => import(${JSON.stringify(source)}), + loading: Loading, + render(loaded, props) { + let Content = loaded.default; + return ( + + + + ); + } + }) + }`; + } + + function genPagesRoute({path: pagesPath, source}) { + return ` + { + path: ${JSON.stringify(pagesPath)}, + exact: true, + component: Loadable({ + loader: () => import('@pages/${source}'), + loading: Loading + }) + }`; + } + + const notFoundRoute = `, + { + path: '*', + component: NotFound + }`; + + const docsRoutes = Object.values(docsMetadatas) + .map(genDocsRoute) + .join(','); + + return ( + `import React from 'react';\n` + + `import Loadable from 'react-loadable';\n` + + `import Loading from '@theme/Loading';\n` + + `import Docs from '@theme/Docs';\n` + + `import NotFound from '@theme/NotFound';\n` + + `const routes = [${docsRoutes},${pagesMetadatas + .map(genPagesRoute) + .join(',')}${notFoundRoute}\n];\n` + + `export default routes;\n` + ); +} + +module.exports = genRoutesConfig; diff --git a/v2/lib/load/theme.js b/v2/lib/load/theme.js new file mode 100644 index 000000000000..a4643feb5c28 --- /dev/null +++ b/v2/lib/load/theme.js @@ -0,0 +1,20 @@ +const fs = require('fs-extra'); +const path = require('path'); + +module.exports = function loadConfig(siteDir) { + const customThemePath = path.resolve(siteDir, 'theme'); + const themePath = fs.existsSync(customThemePath) + ? customThemePath + : path.resolve(__dirname, '../theme'); + + const themeComponents = ['Docs', 'Loading', 'NotFound', 'Markdown']; + themeComponents.forEach(component => { + if (!require.resolve(path.join(themePath, component))) { + throw new Error( + `Failed to load ${themePath}/${component}. It does not exist.` + ); + } + }); + + return themePath; +}; diff --git a/v2/lib/load/utils.js b/v2/lib/load/utils.js new file mode 100644 index 000000000000..060bcea9ac92 --- /dev/null +++ b/v2/lib/load/utils.js @@ -0,0 +1,81 @@ +const path = require('path'); +const fm = require('front-matter'); +const escapeStringRegexp = require('escape-string-regexp'); +const fs = require('fs-extra'); + +const genPath = path.resolve(__dirname, '../core/generated'); +fs.ensureDirSync(genPath); + +const genCache = new Map(); +async function generate(file, content) { + const cached = genCache.get(file); + if (cached !== content) { + await fs.writeFile(path.join(genPath, file), content); + genCache.set(file, content); + } +} + +const indexRE = /(^|.*\/)index\.(md|js)$/i; +const extRE = /\.(md|js)$/; + +function fileToPath(file) { + if (indexRE.test(file)) { + return file.replace(indexRE, '/$1'); + } + return `/${file.replace(extRE, '').replace(/\\/g, '/')}`; +} + +function encodePath(userpath) { + return userpath + .split('/') + .map(item => encodeURIComponent(item)) + .join('/'); +} + +function fileToComponentName(file) { + const ext = extRE.exec(file)[1]; + let str = file.replace(extRE, ''); + str = str.replace(/([A-Z])/g, ' $1'); + str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); + str = str.charAt(0).toUpperCase() + str.slice(1); + str = str.replace(/[\W_]+(\w|$)/g, (_, ch) => ch.toUpperCase()); + return ext ? ext.toUpperCase() + str : str; +} + +function idx(target, keyPaths) { + return ( + target && + (Array.isArray(keyPaths) + ? keyPaths.reduce((obj, key) => obj && obj[key], target) + : target[keyPaths]) + ); +} + +function getSubFolder(file, refDir) { + const separator = escapeStringRegexp(path.sep); + const baseDir = escapeStringRegexp(path.basename(refDir)); + const regexSubFolder = new RegExp( + `${baseDir}${separator}(.*?)${separator}.*` + ); + const match = regexSubFolder.exec(file); + return match && match[1]; +} + +function parse(fileString) { + if (!fm.test(fileString)) { + return {metadata: null, content: fileString}; + } + const {attributes: metadata, body: content} = fm(fileString); + + return {metadata, content}; +} + +module.exports = { + encodePath, + generate, + fileToPath, + fileToComponentName, + getSubFolder, + idx, + parse +}; diff --git a/v2/lib/theme/Docs/index.js b/v2/lib/theme/Docs/index.js new file mode 100644 index 000000000000..8d4217d37fba --- /dev/null +++ b/v2/lib/theme/Docs/index.js @@ -0,0 +1,80 @@ +/* eslint-disable */ +import React from 'react'; +import {Link} from 'react-router-dom'; +import Helmet from 'react-helmet'; +import styles from './styles.css'; +import Layout from '@theme/Layout'; // eslint-disable-line + +export default class Docs extends React.Component { + renderSidebar(metadata, docsSidebars, docsMetadatas) { + const {sidebar, language, id: thisID} = metadata; + if (!sidebar || !docsSidebars) { + return null; + } + const thisSidebar = docsSidebars[sidebar]; + return ( + thisSidebar && + Object.keys(thisSidebar).map(categoryName => { + return ( +
+

{categoryName}

+
    + {thisSidebar[categoryName].map(rawLinkID => { + const linkID = (language ? `${language}-` : '') + rawLinkID; + const linkMetadata = docsMetadatas[linkID]; + if (!linkMetadata) { + throw new Error( + `Improper sidebars.json file, document with id '${linkID}' not found.` + ); + } + const linkClassName = + linkID === thisID ? 'navListItemActive' : 'navListItem'; + return ( +
  • + + {linkMetadata.sidebar_label || linkMetadata.title} + +
  • + ); + })} +
+
+ ); + }) + ); + } + + render() { + const { + route, + siteConfig, + docsMetadatas, + docsSidebars, + metadata + } = this.props; + return ( + + + {(metadata && metadata.title) || siteConfig.title} + +
{this.renderSidebar(metadata, docsSidebars, docsMetadatas)}
+
+ {metadata.previous && + docsMetadatas[metadata.previous] && ( + + ← {metadata.previous_title} + + )} + {' ⚫️ '} + {metadata.next && + docsMetadatas[metadata.next] && ( + + {metadata.next_title} → + + )} +
+
{this.props.children}
+
+ ); + } +} diff --git a/v2/lib/theme/Docs/styles.css b/v2/lib/theme/Docs/styles.css new file mode 100644 index 000000000000..5a96e80c85bf --- /dev/null +++ b/v2/lib/theme/Docs/styles.css @@ -0,0 +1,10 @@ +.mainContainer { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin-top: 40px; + margin-bottom: 30px; + margin-left: auto; + margin-right: auto; + justify-content: center; +} \ No newline at end of file diff --git a/v2/lib/theme/Layout/index.js b/v2/lib/theme/Layout/index.js new file mode 100644 index 000000000000..d96ab6d10c37 --- /dev/null +++ b/v2/lib/theme/Layout/index.js @@ -0,0 +1,29 @@ +import React from 'react'; +import {Link} from 'react-router-dom'; +import styles from './styles.css'; + +/* eslint-disable react/prefer-stateless-function */ +export default class Layout extends React.Component { + render() { + const {children, pagesMetadatas, docsMetadatas = {}, location} = this.props; + const docsLinks = Object.values(docsMetadatas).map(data => ({ + path: `${data.permalink}` + })); + const routeLinks = [...pagesMetadatas, ...docsLinks].map( + data => + data.path !== location.pathname && ( +
  • + {data.path} +
  • + ) + ); + return ( +
    + {children} +
    +
      {routeLinks}
    +
    +
    + ); + } +} diff --git a/v2/lib/theme/Layout/styles.css b/v2/lib/theme/Layout/styles.css new file mode 100644 index 000000000000..55e9df9a5790 --- /dev/null +++ b/v2/lib/theme/Layout/styles.css @@ -0,0 +1,39 @@ +.footer { + color: #777; + margin-top: 30px; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.routeLinks { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.routeLinks li { + display: inline; +} + +.routeLinks li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.routeLinks li a.selected, +.routeLinks li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.routeLinks li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} \ No newline at end of file diff --git a/v2/lib/theme/Loading.js b/v2/lib/theme/Loading.js new file mode 100644 index 000000000000..910e0032f4d1 --- /dev/null +++ b/v2/lib/theme/Loading.js @@ -0,0 +1,11 @@ +import React from 'react'; + +export default props => { + if (props.error) { + return
    Error
    ; + } + if (props.pastDelay) { + return
    Loading...
    ; + } + return null; +}; diff --git a/v2/lib/theme/Markdown/anchors.js b/v2/lib/theme/Markdown/anchors.js new file mode 100644 index 000000000000..394864b3316f --- /dev/null +++ b/v2/lib/theme/Markdown/anchors.js @@ -0,0 +1,22 @@ +import toSlug from './toSlug'; + +function anchors(md) { + const originalRender = md.renderer.rules.heading_open; + + // eslint-disable-next-line + md.renderer.rules.heading_open = function(tokens, idx, options, env) { + const textToken = tokens[idx + 1]; + + if (textToken.content) { + const anchor = toSlug(textToken.content, env); + + return ``; + } + + return originalRender(tokens, idx, options, env); + }; +} + +module.exports = anchors; diff --git a/v2/lib/theme/Markdown/highlight.js b/v2/lib/theme/Markdown/highlight.js new file mode 100644 index 000000000000..643856b5500d --- /dev/null +++ b/v2/lib/theme/Markdown/highlight.js @@ -0,0 +1,22 @@ +const hljs = require('highlight.js'); +const chalk = require('chalk'); +const escapeHtml = require('escape-html'); + +export default (str, rawLang) => { + if (rawLang === 'text' || !rawLang) { + return escapeHtml(str); + } + const lang = rawLang.toLowerCase(); + try { + if (hljs.getLanguage(lang)) { + return hljs.highlight(lang, str).value; + } + } catch (e) { + console.error( + chalk.yellow( + `Highlight.js syntax highlighting for language "${lang}" is not supported.` + ) + ); + } + return hljs.highlightAuto(str).value; +}; diff --git a/v2/lib/theme/Markdown/index.js b/v2/lib/theme/Markdown/index.js new file mode 100644 index 000000000000..6eb0a378d1f4 --- /dev/null +++ b/v2/lib/theme/Markdown/index.js @@ -0,0 +1,94 @@ +/* eslint-disable */ + +import React from 'react'; +import Markdown from 'remarkable'; +import Helmet from 'react-helmet'; +import highlight from './highlight'; +import anchors from './anchors'; + +class MarkdownBlock extends React.Component { + content() { + if (this.props.source) { + return ( + + ); + } + return React.Children.map(this.props.children, child => { + if (typeof child === 'string') { + return ( + + ); + } + return child; + }); + } + + renderMarkdown(source) { + const alias = { + js: 'jsx' + }; + const {siteConfig} = this.props; + const md = new Markdown({ + langPrefix: 'hljs css language-', + highlight: highlight, + html: true, + linkify: true + }); + + // Register anchors plugin + md.use(anchors); + + // Allow client sites to register their own plugins + if (siteConfig.markdownPlugins) { + siteConfig.markdownPlugins.forEach(plugin => { + md.use(plugin); + }); + } + + const html = md.render(source); + + // Ensure fenced code blocks use Highlight.js hljs class + // https://github.com/jonschlinkert/remarkable/issues/224 + return html.replace(/
    /g, '
    ');
    +  }
    +
    +  render() {
    +    const {siteConfig} = this.props;
    +    const highlight = Object.assign(
    +      {},
    +      {
    +        version: '9.12.0',
    +        theme: 'default'
    +      },
    +      siteConfig.highlight
    +    );
    +
    +    // Use user-provided themeUrl if it exists, else construct one from version and theme.
    +    const highlightThemeURL = highlight.themeUrl
    +      ? highlight.themeUrl
    +      : `https://cdnjs.cloudflare.com/ajax/libs/highlight.js/${
    +          highlight.version
    +        }/styles/${highlight.theme}.min.css`;
    +
    +    return (
    +      
    + + + + {this.content()} +
    + ); + } +} + +MarkdownBlock.defaultProps = { + siteConfig: {} +}; + +export default MarkdownBlock; diff --git a/v2/lib/theme/Markdown/toSlug.js b/v2/lib/theme/Markdown/toSlug.js new file mode 100644 index 000000000000..13bf5725961c --- /dev/null +++ b/v2/lib/theme/Markdown/toSlug.js @@ -0,0 +1,68 @@ +/* eslint-disable */ + +const letters = + '\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC'; +const numbers = + '\u0030-\u0039\u00B2\u00B3\u00B9\u00BC-\u00BE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D66-\u0D75\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19'; +const exceptAlphanum = new RegExp(`[^${[letters, numbers].join('')}]`, 'g'); + +/** + * Converts a string to a slug, that can be used in heading anchors + * + * @param {string} string + * @param {Object} [context={}] - an optional context to track used slugs and + * ensure that new slug will be unique + * + * @return {string} + */ +module.exports = (string, context = {}) => { + // var accents = "àáäâèéëêìíïîòóöôùúüûñç"; + const accents = + '\u00e0\u00e1\u00e4\u00e2\u00e8' + + '\u00e9\u00eb\u00ea\u00ec\u00ed\u00ef' + + '\u00ee\u00f2\u00f3\u00f6\u00f4\u00f9' + + '\u00fa\u00fc\u00fb\u00f1\u00e7'; + + const without = 'aaaaeeeeiiiioooouuuunc'; + + let slug = string + .toString() + // Handle uppercase characters + .toLowerCase() + // Handle accentuated characters + .replace(new RegExp(`[${accents}]`, 'g'), c => + without.charAt(accents.indexOf(c)) + ) + // Replace `.`, `(` and `?` with blank string like Github does + .replace(/\.|\(|\?/g, '') + // Dash special characters + .replace(exceptAlphanum, '-') + // Compress multiple dash + .replace(/-+/g, '-') + // Trim dashes + .replace(/^-|-$/g, ''); + + // Add trailing `-` if string contains ` ...` in the end like Github does + if (/\s[.]{1,}/.test(string)) { + slug += '-'; + } + + if (!context.slugStats) { + context.slugStats = {}; + } + + if (typeof context.slugStats[slug] === 'number') { + // search for an index, that will not clash with an existing headings + while ( + typeof context.slugStats[`${slug}-${++context.slugStats[slug]}`] === + 'number' + ); + slug += `-${context.slugStats[slug]}`; + } + + // we are tracking both original anchors and suffixed to avoid future name + // clashing with headings with numbers e.g. `#Foo 1` may clash with the second `#Foo` + context.slugStats[slug] = 0; + + return slug; +}; diff --git a/v2/lib/theme/NotFound.js b/v2/lib/theme/NotFound.js new file mode 100644 index 000000000000..193b0edb298c --- /dev/null +++ b/v2/lib/theme/NotFound.js @@ -0,0 +1,18 @@ +import React from 'react'; +import Layout from '@theme/Layout'; + +export default class NotFound extends React.Component { + render() { + return ( + +
    404 Page Not Found
    +
    + Not found +
    +
    + ); + } +} diff --git a/v2/lib/webpack/base.js b/v2/lib/webpack/base.js new file mode 100644 index 000000000000..61e4220a7e7c --- /dev/null +++ b/v2/lib/webpack/base.js @@ -0,0 +1,133 @@ +const Config = require('webpack-chain'); +const CSSExtractPlugin = require('mini-css-extract-plugin'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); +const path = require('path'); + +const mdLoader = require.resolve('./loader/markdown'); + +module.exports = function createBaseConfig(props, isServer) { + const { + siteConfig, + outDir, + themePath, + docsDir, + pagesDir, + siteDir, + sourceToMetadata, + versionedDir, + translatedDir, + baseUrl + } = props; + + const config = new Config(); + const isProd = process.env.NODE_ENV === 'production'; + + config + .mode(isProd ? 'production' : 'development') + .output.path(outDir) + .filename(isProd ? '[name].[chunkhash].js' : '[name].js') + .publicPath(isProd ? baseUrl : '/'); + + if (!isProd) { + config.devtool('cheap-module-eval-source-map'); + } + + config.resolve + .set('symlinks', true) + .alias.set('@theme', themePath) + .set('@site', siteDir) + .set('@versioned_docs', versionedDir) + .set('@translated_docs', translatedDir) + .set('@docs', docsDir) + .set('@pages', pagesDir) + .set('@build', outDir) + .set('@generated', path.resolve(__dirname, '../core/generated')) + .set('@core', path.resolve(__dirname, '../core')) + .end(); + + function applyBabel(rule) { + rule + .use('babel') + .loader('babel-loader') + .options({ + babelrc: false, + presets: ['env', 'react'], + plugins: [isServer ? 'dynamic-import-node' : 'syntax-dynamic-import'] + }); + } + + const jsRule = config.module + .rule('js') + .test(/\.js$/) + .exclude.add(filepath => { + // Always transpile lib directory + if (filepath.startsWith(path.join(__dirname, '..'))) { + return false; + } + // Don't transpile node_modules + return /node_modules/.test(filepath); + }) + .end(); + + applyBabel(jsRule); + + const mdRule = config.module.rule('markdown').test(/\.md$/); + + applyBabel(mdRule); + + mdRule + .use('markdown-loader') + .loader(mdLoader) + .options({ + siteConfig, + versionedDir, + translatedDir, + docsDir, + sourceToMetadata + }); + + const cssRule = config.module.rule('css').test(/\.css$/); + if (!isServer) { + if (isProd) { + cssRule.use('extract-css-loader').loader(CSSExtractPlugin.loader); + } else { + cssRule.use('style-loader').loader('style-loader'); + } + } + + cssRule + .use('css-loader') + .loader(isServer ? 'css-loader/locals' : 'css-loader') + .options({ + modules: true, + importLoaders: 1, + localIdentName: `[local]_[hash:base64:8]`, + sourceMap: !isProd, + minimize: true + }); + + // mini-css-extract plugin + config.plugin('extract-css').use(CSSExtractPlugin, [ + { + filename: isProd ? '[name].[chunkhash].css' : '[name].css', + chunkFilename: isProd ? '[id].[chunkhash].css' : '[id].css' + } + ]); + + if (isProd) { + config.optimization.minimizer([ + new UglifyJsPlugin({ + cache: true, + uglifyOptions: { + warnings: false, + compress: false, + ecma: 6, + mangle: true + }, + sourceMap: true + }) + ]); + } + + return config; +}; diff --git a/v2/lib/webpack/client.js b/v2/lib/webpack/client.js new file mode 100644 index 000000000000..c544300df936 --- /dev/null +++ b/v2/lib/webpack/client.js @@ -0,0 +1,30 @@ +const path = require('path'); +const webpackNiceLog = require('webpack-nicelog'); +const {StatsWriterPlugin} = require('webpack-stats-plugin'); +const cleanWebpackPlugin = require('clean-webpack-plugin'); +const createBaseConfig = require('./base'); +const {applyChainWebpack} = require('./utils'); + +module.exports = function createClientConfig(props) { + const config = createBaseConfig(props); + config.entry('main').add(path.resolve(__dirname, '../core/clientEntry.js')); + + // remove/clean build folders before building bundles + const {outDir} = props; + config + .plugin('clean') + .use(cleanWebpackPlugin, [outDir, {verbose: false, allowExternal: true}]); + + // write webpack stats object so we can pickup correct client bundle path in server. + config + .plugin('stats') + .use(StatsWriterPlugin, [{filename: 'client.stats.json'}]); + + // show compilation progress bar and build time + config.plugin('niceLog').use(webpackNiceLog, [{name: 'Client'}]); + + // user extended webpack-chain config + applyChainWebpack(props.siteConfig.chainWebpack, config, false); + + return config; +}; diff --git a/v2/lib/webpack/loader/markdown.js b/v2/lib/webpack/loader/markdown.js new file mode 100644 index 000000000000..e5893299a67c --- /dev/null +++ b/v2/lib/webpack/loader/markdown.js @@ -0,0 +1,78 @@ +const {getOptions} = require('loader-utils'); +const fm = require('front-matter'); + +module.exports = function(fileString) { + const options = getOptions(this); + const { + siteConfig, + versionedDir, + docsDir, + translatedDir, + sourceToMetadata + } = options; + + /* Extract content of markdown (without frontmatter) */ + const {body} = fm(fileString); + + /* Determine the source dir. e.g: @docs, @translated_docs/ko and @versioned_docs/version-1.0.0 */ + let sourceDir; + let thisSource = this.resourcePath; + if (thisSource.startsWith(translatedDir)) { + thisSource = thisSource.replace(translatedDir, '@translated_docs'); + const {language, version} = sourceToMetadata[thisSource] || {}; + if (language && version && version !== 'next') { + sourceDir = `@translated_docs/${language}/version-${version}`; + } else if (language && (!version || version === 'next')) { + sourceDir = `@translated_docs/${language}`; + } + } else if (thisSource.startsWith(versionedDir)) { + thisSource = thisSource.replace(versionedDir, '@versioned_docs'); + const {version} = sourceToMetadata[thisSource] || {}; + if (version) { + sourceDir = `@versioned_docs/version-${version}`; + } + } else if (thisSource.startsWith(docsDir)) { + sourceDir = `@docs`; + } + + /* Replace internal markdown linking (except in fenced blocks) */ + let content = body; + if (sourceDir) { + let fencedBlock = false; + const lines = body.split('\n').map(line => { + if (line.trim().startsWith('```')) { + fencedBlock = !fencedBlock; + } + if (fencedBlock) return line; + + let modifiedLine = line; + const mdLinks = []; + const mdRegex = /(?:\]\()(?:\.\/)?([^'")\]\s>]+\.md)/g; + let match = mdRegex.exec(content); + while (match !== null) { + mdLinks.push(match[1]); + match = mdRegex.exec(content); + } + mdLinks.forEach(mdLink => { + const targetSource = `${sourceDir}/${mdLink}`; + const {permalink} = sourceToMetadata[targetSource] || {}; + if (permalink) { + modifiedLine = modifiedLine.replace(mdLink, permalink); + } + }); + return modifiedLine; + }); + content = lines.join('\n'); + } + + /* Return a React component */ + return ( + `import React from 'react';\n` + + `import Markdown from '@theme/Markdown'\n` + + `export default () => ( + + {${JSON.stringify(content)}} + + );` + ); +}; diff --git a/v2/lib/webpack/server.js b/v2/lib/webpack/server.js new file mode 100644 index 000000000000..f6aacc1c22b7 --- /dev/null +++ b/v2/lib/webpack/server.js @@ -0,0 +1,43 @@ +const path = require('path'); +const staticSiteGenerator = require('static-site-generator-webpack-plugin'); +const webpackNiceLog = require('webpack-nicelog'); +const createBaseConfig = require('./base'); +const {applyChainWebpack} = require('./utils'); + +module.exports = function createServerConfig(props) { + const config = createBaseConfig(props, true); + + config.entry('main').add(path.resolve(__dirname, '../core/serverEntry.js')); + config.target('node'); + config.output.filename('server.bundle.js').libraryTarget('commonjs2'); + + // Workaround for Webpack 4 Bug (https://github.com/webpack/webpack/issues/6522) + config.output.globalObject('this'); + + const {siteConfig, docsMetadatas, pagesMetadatas} = props; + + // static site generator webpack plugin + const docsLinks = Object.values(docsMetadatas).map(data => ({ + path: `${data.permalink}` + })); + const paths = [...docsLinks, ...pagesMetadatas].map(data => data.path); + config.plugin('siteGenerator').use(staticSiteGenerator, [ + { + entry: 'main', + locals: { + baseUrl: siteConfig.baseUrl + }, + paths + } + ]); + + // show compilation progress bar and build time + config + .plugin('niceLog') + .use(webpackNiceLog, [{name: 'Server', color: 'yellow'}]); + + // user extended webpack-chain config + applyChainWebpack(props.siteConfig.chainWebpack, config, true); + + return config; +}; diff --git a/v2/lib/webpack/utils.js b/v2/lib/webpack/utils.js new file mode 100644 index 000000000000..369bb5db8779 --- /dev/null +++ b/v2/lib/webpack/utils.js @@ -0,0 +1,27 @@ +const merge = require('webpack-merge'); + +// Modify the generated webpack config with normal webpack config +function applyConfigureWebpack(userConfig, config, isServer) { + if (typeof userConfig === 'object') { + return merge(config, userConfig); + } + if (typeof userConfig === 'function') { + const res = userConfig(config, isServer); + if (res && typeof res === 'object') { + return merge(config, res); + } + } + return config; +} + +// Modify the generated webpack config with webpack-chain API +function applyChainWebpack(userChainWebpack, config, isServer) { + if (userChainWebpack) { + userChainWebpack(config, isServer); + } +} + +module.exports = { + applyConfigureWebpack, + applyChainWebpack +}; diff --git a/v2/package.json b/v2/package.json new file mode 100644 index 000000000000..0257afd7a8a7 --- /dev/null +++ b/v2/package.json @@ -0,0 +1,94 @@ +{ + "name": "munseo", + "version": "0.0.1", + "description": "📝⚡️ Transform your document (문서) to a website", + "main": "lib/index.js", + "bin": { + "munseo": "bin/munseo.js" + }, + "scripts": { + "munseo": "node bin/munseo", + "start": "node bin/munseo start website", + "build": "node bin/munseo build website", + "eject": "node bin/munseo eject website", + "prettier": "prettier --config .prettierrc --write \"lib/**/*.js\" \"bin/**/*.js\" \"test/**/*.js\"", + "lint": "eslint --cache \"lib/**/*.js\" \"bin/**/*.js\" \"test/**/*.js\"", + "test": "jest --config test/jest.config.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/endiliey/munseo.git" + }, + "keywords": [ + "blog", + "generator", + "react" + ], + "author": "endiliey", + "license": "MIT", + "bugs": { + "url": "https://github.com/endiliey/munseo/issues" + }, + "homepage": "https://github.com/endiliey/munseo#readme", + "devDependencies": { + "eslint": "^4.19.1", + "eslint-config-airbnb": "17.0.0", + "eslint-config-prettier": "^2.9.0", + "eslint-plugin-import": "^2.12.0", + "eslint-plugin-jsx-a11y": "^6.0.3", + "eslint-plugin-react": "^7.9.1", + "jest": "^23.4.2", + "prettier": "^1.13.7" + }, + "dependencies": { + "babel-core": "^6.26.3", + "babel-loader": "^7.1.5", + "babel-plugin-dynamic-import-node": "^2.0.0", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-preset-env": "^1.7.0", + "babel-preset-react": "^6.24.1", + "chalk": "^2.4.1", + "chokidar": "^2.0.4", + "classnames": "^2.2.6", + "clean-webpack-plugin": "^0.1.19", + "commander": "^2.16.0", + "connect-history-api-fallback": "^1.5.0", + "css-loader": "^1.0.0", + "escape-html": "^1.0.3", + "escape-string-regexp": "^1.0.5", + "front-matter": "^2.3.0", + "fs-extra": "^7.0.0", + "globby": "^8.0.1", + "highlight.js": "^9.12.0", + "html-webpack-plugin": "^3.2.0", + "koa-connect": "^2.0.1", + "koa-mount": "^3.0.0", + "koa-range": "^0.3.0", + "koa-static": "^5.0.0", + "loader-utils": "^1.1.0", + "mini-css-extract-plugin": "^0.4.1", + "portfinder": "^1.0.13", + "prismjs": "^1.15.0", + "react": "^16.4.1", + "react-dom": "^16.4.1", + "react-helmet": "^5.2.0", + "react-loadable": "^5.5.0", + "react-router-config": "^1.0.0-beta.4", + "react-router-dom": "^4.3.1", + "react-youtube": "^7.6.0", + "remarkable": "^1.7.1", + "semver": "^5.5.0", + "static-site-generator-webpack-plugin": "endiliey/static-site-generator-webpack-plugin#master", + "style-loader": "^0.22.1", + "uglifyjs-webpack-plugin": "^1.3.0", + "webpack": "^4.16.3", + "webpack-chain": "^4.8.0", + "webpack-merge": "^4.1.4", + "webpack-nicelog": "^2.2.1", + "webpack-serve": "^2.0.2", + "webpack-stats-plugin": "^0.2.1" + }, + "engines": { + "node": ">=8" + } +} diff --git a/v2/test/__fixtures__/custom-site/pages/bar/baz.js b/v2/test/__fixtures__/custom-site/pages/bar/baz.js new file mode 100644 index 000000000000..75a8c700155c --- /dev/null +++ b/v2/test/__fixtures__/custom-site/pages/bar/baz.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Baz
    ; diff --git a/v2/test/__fixtures__/custom-site/pages/foo.js b/v2/test/__fixtures__/custom-site/pages/foo.js new file mode 100644 index 000000000000..3b52ec615cf0 --- /dev/null +++ b/v2/test/__fixtures__/custom-site/pages/foo.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Foo
    ; diff --git a/v2/test/__fixtures__/custom-site/pages/foo/index.js b/v2/test/__fixtures__/custom-site/pages/foo/index.js new file mode 100644 index 000000000000..5faf67ae13f9 --- /dev/null +++ b/v2/test/__fixtures__/custom-site/pages/foo/index.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Foo in subfolder
    ; diff --git a/v2/test/__fixtures__/custom-site/pages/index.js b/v2/test/__fixtures__/custom-site/pages/index.js new file mode 100644 index 000000000000..13063810a738 --- /dev/null +++ b/v2/test/__fixtures__/custom-site/pages/index.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Index
    ; diff --git a/v2/test/__fixtures__/custom-site/siteConfig.js b/v2/test/__fixtures__/custom-site/siteConfig.js new file mode 100644 index 000000000000..3c5b2a6f4299 --- /dev/null +++ b/v2/test/__fixtures__/custom-site/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Sakura', + tagline: 'This is not an ordinary site', + organizationName: 'endiliey', + projectName: 'sakura', + baseUrl: '/sakura/' +}; diff --git a/v2/test/__fixtures__/docs/foo/bar.md b/v2/test/__fixtures__/docs/foo/bar.md new file mode 100644 index 000000000000..9f978009c5b0 --- /dev/null +++ b/v2/test/__fixtures__/docs/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: bar +title: Bar +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +___ + +*** + +*** + + +## Typographic replacements + +Enable typographer option to see result. + +(c) (C) (r) (R) (tm) (TM) (p) (P) +- + +test.. test... test..... test?..... test!.... + +!!!!!! ???? ,, + +Remarkable -- awesome + +"Smartypants, double quotes" + +'Smartypants, single quotes' + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/test/__fixtures__/docs/foo/baz.md b/v2/test/__fixtures__/docs/foo/baz.md new file mode 100644 index 000000000000..75e914961640 --- /dev/null +++ b/v2/test/__fixtures__/docs/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: baz +title: baz +--- + +## Images + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/test/__fixtures__/docs/hello.md b/v2/test/__fixtures__/docs/hello.md new file mode 100644 index 000000000000..ab550d7363c9 --- /dev/null +++ b/v2/test/__fixtures__/docs/hello.md @@ -0,0 +1,54 @@ +--- +id: hello +title: Hello, World ! +--- + +Hi, Endilie here :) + +## Relative links + +Replace this +[foo](foo/bar.md) + +Can't replace this +[file](file.md) + +Do not replace below + +``` +[hello](hello.md) +``` + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/test/__fixtures__/docs/permalink.md b/v2/test/__fixtures__/docs/permalink.md new file mode 100644 index 000000000000..6ca64643b7fc --- /dev/null +++ b/v2/test/__fixtures__/docs/permalink.md @@ -0,0 +1,7 @@ +--- +id: permalink +title: Permalink +permalink: :baseUrl:docsUrl/:langPart/:versionPart/endiliey/:id +--- + +This has a different permalink \ No newline at end of file diff --git a/v2/test/__fixtures__/simple-site/pages/hello/world.js b/v2/test/__fixtures__/simple-site/pages/hello/world.js new file mode 100644 index 000000000000..838f36bb1acd --- /dev/null +++ b/v2/test/__fixtures__/simple-site/pages/hello/world.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class World extends React.Component { + render() { + return ( + + + World + + +
    Hello World
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/simple-site/pages/index.js b/v2/test/__fixtures__/simple-site/pages/index.js new file mode 100644 index 000000000000..58dd9accb134 --- /dev/null +++ b/v2/test/__fixtures__/simple-site/pages/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class Home extends React.Component { + render() { + return ( + + + Home + + +
    Home ...
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/simple-site/sidebars.json b/v2/test/__fixtures__/simple-site/sidebars.json new file mode 100644 index 000000000000..24d61b49c760 --- /dev/null +++ b/v2/test/__fixtures__/simple-site/sidebars.json @@ -0,0 +1,11 @@ +{ + "docs": { + "Test": [ + "foo/bar", + "foo/baz" + ], + "Guides": [ + "hello" + ] + } +} diff --git a/v2/test/__fixtures__/simple-site/siteConfig.js b/v2/test/__fixtures__/simple-site/siteConfig.js new file mode 100644 index 000000000000..e64b9989cf7a --- /dev/null +++ b/v2/test/__fixtures__/simple-site/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/' +}; diff --git a/v2/test/__fixtures__/simple-site/static/css/basic.css b/v2/test/__fixtures__/simple-site/static/css/basic.css new file mode 100644 index 000000000000..e6e089cbfa53 --- /dev/null +++ b/v2/test/__fixtures__/simple-site/static/css/basic.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +.toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +.toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/v2/test/__fixtures__/simple-site/static/img/sakura.png b/v2/test/__fixtures__/simple-site/static/img/sakura.png new file mode 100644 index 000000000000..e10909398bc2 Binary files /dev/null and b/v2/test/__fixtures__/simple-site/static/img/sakura.png differ diff --git a/v2/test/__fixtures__/simple-site/static/img/slash-introducing.png b/v2/test/__fixtures__/simple-site/static/img/slash-introducing.png new file mode 100644 index 000000000000..839457886898 Binary files /dev/null and b/v2/test/__fixtures__/simple-site/static/img/slash-introducing.png differ diff --git a/v2/test/__fixtures__/translated-site/languages.js b/v2/test/__fixtures__/translated-site/languages.js new file mode 100644 index 000000000000..d7e55bf050ce --- /dev/null +++ b/v2/test/__fixtures__/translated-site/languages.js @@ -0,0 +1,178 @@ +const languages = [ + { + enabled: true, + name: 'English', + tag: 'en', + }, + { + enabled: false, + name: '日本語', + tag: 'ja', + }, + { + enabled: false, + name: 'العربية', + tag: 'ar', + }, + { + enabled: false, + name: 'Bosanski', + tag: 'bs-BA', + }, + { + enabled: false, + name: 'Català', + tag: 'ca', + }, + { + enabled: false, + name: 'Čeština', + tag: 'cs', + }, + { + enabled: false, + name: 'Dansk', + tag: 'da', + }, + { + enabled: false, + name: 'Deutsch', + tag: 'de', + }, + { + enabled: false, + name: 'Ελληνικά', + tag: 'el', + }, + { + enabled: false, + name: 'Español', + tag: 'es-ES', + }, + { + enabled: false, + name: 'فارسی', + tag: 'fa-IR', + }, + { + enabled: false, + name: 'Suomi', + tag: 'fi', + }, + { + enabled: false, + name: 'Français', + tag: 'fr', + }, + { + enabled: false, + name: 'עִברִית', + tag: 'he', + }, + { + enabled: false, + name: 'Magyar', + tag: 'hu', + }, + { + enabled: false, + name: 'Bahasa Indonesia', + tag: 'id-ID', + }, + { + enabled: false, + name: 'Italiano', + tag: 'it', + }, + { + enabled: false, + name: 'Afrikaans', + tag: 'af', + }, + { + enabled: true, + name: '한국어', + tag: 'ko', + }, + { + enabled: false, + name: 'मराठी', + tag: 'mr-IN', + }, + { + enabled: false, + name: 'Nederlands', + tag: 'nl', + }, + { + enabled: false, + name: 'Norsk', + tag: 'no-NO', + }, + { + enabled: false, + name: 'Polskie', + tag: 'pl', + }, + { + enabled: false, + name: 'Português', + tag: 'pt-PT', + }, + { + enabled: false, + name: 'Português (Brasil)', + tag: 'pt-BR', + }, + { + enabled: false, + name: 'Română', + tag: 'ro', + }, + { + enabled: false, + name: 'Русский', + tag: 'ru', + }, + { + enabled: false, + name: 'Slovenský', + tag: 'sk-SK', + }, + { + enabled: false, + name: 'Српски језик (Ћирилица)', + tag: 'sr', + }, + { + enabled: false, + name: 'Svenska', + tag: 'sv-SE', + }, + { + enabled: false, + name: 'Türkçe', + tag: 'tr', + }, + { + enabled: false, + name: 'Українська', + tag: 'uk', + }, + { + enabled: false, + name: 'Tiếng Việt', + tag: 'vi', + }, + { + enabled: false, + name: '简体中文', + tag: 'zh-CN', + }, + { + enabled: false, + name: '繁體中文', + tag: 'zh-TW', + }, +]; +module.exports = languages; diff --git a/v2/test/__fixtures__/translated-site/pages/hello/world.js b/v2/test/__fixtures__/translated-site/pages/hello/world.js new file mode 100644 index 000000000000..838f36bb1acd --- /dev/null +++ b/v2/test/__fixtures__/translated-site/pages/hello/world.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class World extends React.Component { + render() { + return ( + + + World + + +
    Hello World
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/translated-site/pages/index.js b/v2/test/__fixtures__/translated-site/pages/index.js new file mode 100644 index 000000000000..58dd9accb134 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/pages/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class Home extends React.Component { + render() { + return ( + + + Home + + +
    Home ...
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/translated-site/sidebars.json b/v2/test/__fixtures__/translated-site/sidebars.json new file mode 100644 index 000000000000..24d61b49c760 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/sidebars.json @@ -0,0 +1,11 @@ +{ + "docs": { + "Test": [ + "foo/bar", + "foo/baz" + ], + "Guides": [ + "hello" + ] + } +} diff --git a/v2/test/__fixtures__/translated-site/siteConfig.js b/v2/test/__fixtures__/translated-site/siteConfig.js new file mode 100644 index 000000000000..661f59c98134 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/siteConfig.js @@ -0,0 +1,8 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/', + defaultLanguage: 'en' +}; diff --git a/v2/test/__fixtures__/translated-site/static/css/basic.css b/v2/test/__fixtures__/translated-site/static/css/basic.css new file mode 100644 index 000000000000..e6e089cbfa53 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/static/css/basic.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +.toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +.toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/v2/test/__fixtures__/translated-site/static/img/sakura.png b/v2/test/__fixtures__/translated-site/static/img/sakura.png new file mode 100644 index 000000000000..e10909398bc2 Binary files /dev/null and b/v2/test/__fixtures__/translated-site/static/img/sakura.png differ diff --git a/v2/test/__fixtures__/translated-site/static/img/slash-introducing.png b/v2/test/__fixtures__/translated-site/static/img/slash-introducing.png new file mode 100644 index 000000000000..839457886898 Binary files /dev/null and b/v2/test/__fixtures__/translated-site/static/img/slash-introducing.png differ diff --git a/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/bar.md b/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/bar.md new file mode 100644 index 000000000000..a1b031cb23e1 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: bar +title: Bar +--- + +# Remarkable + +> Remarkable로 실시간 편집을 경험하십시오! + +깨끗한 슬레이트로 시작하려면`clear` 링크를 클릭하고 결과를 공유하거나 저장하려면`permalink`를 가져옵니다. + +*** + +# h1 제목 +## h2 제목 +### h3 제목 +#### h4 헤딩 +##### h5 제목 +###### h6 제목 + + +## 수평 규칙 + +___ + +*** + +*** + + +## 활자체 대체 + +입력기 옵션을 사용하면 결과를 볼 수 있습니다. + +(p) (P) + - (r) (t) + +테스트 .. 테스트 ... 테스트 ..... 테스트? ..... 테스트! .... + +!!!!!! ???? ,, + +놀라운 - 굉장한 + +"Smartypants, 큰 따옴표" + +'Smartypants, 작은 따옴표' + + +## 강조 + +** 이것은 굵은 글씨입니다 ** + +__ 이것은 굵은 글씨입니다 __ + +* 이탤릭체 텍스트 * + +_ 이탤릭체 텍스트 _ + +~~ 삭제 된 텍스트 ~~ + +위 첨자 : 19 ^ th ^ + +아래 첨자 : H ~ 2 ~ O + +++ 삽입 된 텍스트 ++ + +== 표시된 텍스트 == \ No newline at end of file diff --git a/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/baz.md b/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/baz.md new file mode 100644 index 000000000000..c078572ef4d1 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/translated_docs/ko/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: baz +title: baz +--- + +## 이미지 + +링크와 마찬가지로 이미지에도 각주 스타일 구문이 있습니다. + +! [Alt text] [id] + +나중에 URL 위치를 정의하는 문서에서 참조로 : + +[id] : https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## 링크 + +[링크 텍스트] (http://dev.nodeca.com) + +[제목 링크] (http://nodeca.github.io/pica/demo/ "제목 텍스트!") + +자동 변환 된 링크 https://github.com/nodeca/pica (linkify를 사용하도록 설정) + + + +## 각주 + +각주 1 링크 [^ 첫 번째]. + +각주 2 링크 [^ 초]. + +인라인 각주 ^ [인라인 각주의 텍스트] 정의. + +중복 된 각주 참조 [^ 초]. + +[^ first] : 각주 **는 마크 업을 가질 수 있습니다 ** + +    및 여러 단락. + +[^ 초] : 각주 텍스트. + + +## 정의 목록 + +1 학기 + +정의 1 +게으른 연속. + +* 인라인 마크 업과 함께 2 학기 * + +: 정의 2 + +        {일부 코드, 정의 2의 일부} + +    정의의 세 번째 단락 2. + +_ 컴팩트 스타일 : _ + +1 학기 +  ~ 정의 1 + +2 학기 +  ~ 정의 2a +  ~ 정의 2b + + +## 약어 + +이것은 HTML 약어입니다. + +그것은 "HTML"을 변환하지만 "xxxHTMLyyy"와 같이 부분적인 항목을 그대로 유지합니다. + +* [HTML] : 하이퍼 텍스트 마크 업 언어 \ No newline at end of file diff --git a/v2/test/__fixtures__/translated-site/translated_docs/ko/hello.md b/v2/test/__fixtures__/translated-site/translated_docs/ko/hello.md new file mode 100644 index 000000000000..9c67f37d2e83 --- /dev/null +++ b/v2/test/__fixtures__/translated-site/translated_docs/ko/hello.md @@ -0,0 +1,40 @@ +--- +id: hello +title: Hello, World ! +--- + +안녕하세요, 여기 엔 틸리에 :) + +## Blockquotes + +> Blockquotes는 또한 중첩 될 수 있습니다 ... +>> ... 서로 옆에 큰 더 큰 부호를 사용하여 ... +>>> ... 또는 화살표 사이에 공백이 있어야합니다. + + +## 목록 + +정렬되지 않은 + ++`+`,`-` 또는`*`를 사용하여 행을 시작하여 목록을 만듭니다. ++ 하위 목록은 2 칸을 들여서 만들어집니다 : +   - 마커 문자 변경으로 새로운 목록 시작 : +     * AC tristique libero volutpat at +     + Preisium nisl aliquet에 대한 + 시설 +     - Nulla volutpat aliquam velit ++ 매우 쉽습니다! + +주문 됨 + +1. Lorem ipsum dolor sit amet +2. 컨소시엄 adipiscing 엘리트 +3. massa에서의 정수 lorem + + +1. 일련 번호를 사용할 수 있습니다 ... +1. ... 또는 모든 숫자를 '1'로 유지하십시오. + +오프셋을 사용하여 번호 매기기 시작 : + +57. foo +1. 막대기 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/languages.js b/v2/test/__fixtures__/transversioned-site/languages.js new file mode 100644 index 000000000000..d7e55bf050ce --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/languages.js @@ -0,0 +1,178 @@ +const languages = [ + { + enabled: true, + name: 'English', + tag: 'en', + }, + { + enabled: false, + name: '日本語', + tag: 'ja', + }, + { + enabled: false, + name: 'العربية', + tag: 'ar', + }, + { + enabled: false, + name: 'Bosanski', + tag: 'bs-BA', + }, + { + enabled: false, + name: 'Català', + tag: 'ca', + }, + { + enabled: false, + name: 'Čeština', + tag: 'cs', + }, + { + enabled: false, + name: 'Dansk', + tag: 'da', + }, + { + enabled: false, + name: 'Deutsch', + tag: 'de', + }, + { + enabled: false, + name: 'Ελληνικά', + tag: 'el', + }, + { + enabled: false, + name: 'Español', + tag: 'es-ES', + }, + { + enabled: false, + name: 'فارسی', + tag: 'fa-IR', + }, + { + enabled: false, + name: 'Suomi', + tag: 'fi', + }, + { + enabled: false, + name: 'Français', + tag: 'fr', + }, + { + enabled: false, + name: 'עִברִית', + tag: 'he', + }, + { + enabled: false, + name: 'Magyar', + tag: 'hu', + }, + { + enabled: false, + name: 'Bahasa Indonesia', + tag: 'id-ID', + }, + { + enabled: false, + name: 'Italiano', + tag: 'it', + }, + { + enabled: false, + name: 'Afrikaans', + tag: 'af', + }, + { + enabled: true, + name: '한국어', + tag: 'ko', + }, + { + enabled: false, + name: 'मराठी', + tag: 'mr-IN', + }, + { + enabled: false, + name: 'Nederlands', + tag: 'nl', + }, + { + enabled: false, + name: 'Norsk', + tag: 'no-NO', + }, + { + enabled: false, + name: 'Polskie', + tag: 'pl', + }, + { + enabled: false, + name: 'Português', + tag: 'pt-PT', + }, + { + enabled: false, + name: 'Português (Brasil)', + tag: 'pt-BR', + }, + { + enabled: false, + name: 'Română', + tag: 'ro', + }, + { + enabled: false, + name: 'Русский', + tag: 'ru', + }, + { + enabled: false, + name: 'Slovenský', + tag: 'sk-SK', + }, + { + enabled: false, + name: 'Српски језик (Ћирилица)', + tag: 'sr', + }, + { + enabled: false, + name: 'Svenska', + tag: 'sv-SE', + }, + { + enabled: false, + name: 'Türkçe', + tag: 'tr', + }, + { + enabled: false, + name: 'Українська', + tag: 'uk', + }, + { + enabled: false, + name: 'Tiếng Việt', + tag: 'vi', + }, + { + enabled: false, + name: '简体中文', + tag: 'zh-CN', + }, + { + enabled: false, + name: '繁體中文', + tag: 'zh-TW', + }, +]; +module.exports = languages; diff --git a/v2/test/__fixtures__/transversioned-site/pages/hello/world.js b/v2/test/__fixtures__/transversioned-site/pages/hello/world.js new file mode 100644 index 000000000000..838f36bb1acd --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/pages/hello/world.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class World extends React.Component { + render() { + return ( + + + World + + +
    Hello World
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/transversioned-site/pages/index.js b/v2/test/__fixtures__/transversioned-site/pages/index.js new file mode 100644 index 000000000000..58dd9accb134 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/pages/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class Home extends React.Component { + render() { + return ( + + + Home + + +
    Home ...
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/transversioned-site/sidebars.json b/v2/test/__fixtures__/transversioned-site/sidebars.json new file mode 100644 index 000000000000..24d61b49c760 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/sidebars.json @@ -0,0 +1,11 @@ +{ + "docs": { + "Test": [ + "foo/bar", + "foo/baz" + ], + "Guides": [ + "hello" + ] + } +} diff --git a/v2/test/__fixtures__/transversioned-site/siteConfig.js b/v2/test/__fixtures__/transversioned-site/siteConfig.js new file mode 100644 index 000000000000..661f59c98134 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/siteConfig.js @@ -0,0 +1,8 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/', + defaultLanguage: 'en' +}; diff --git a/v2/test/__fixtures__/transversioned-site/static/css/basic.css b/v2/test/__fixtures__/transversioned-site/static/css/basic.css new file mode 100644 index 000000000000..e6e089cbfa53 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/static/css/basic.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +.toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +.toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/v2/test/__fixtures__/transversioned-site/static/img/sakura.png b/v2/test/__fixtures__/transversioned-site/static/img/sakura.png new file mode 100644 index 000000000000..e10909398bc2 Binary files /dev/null and b/v2/test/__fixtures__/transversioned-site/static/img/sakura.png differ diff --git a/v2/test/__fixtures__/transversioned-site/static/img/slash-introducing.png b/v2/test/__fixtures__/transversioned-site/static/img/slash-introducing.png new file mode 100644 index 000000000000..839457886898 Binary files /dev/null and b/v2/test/__fixtures__/transversioned-site/static/img/slash-introducing.png differ diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/bar.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/bar.md new file mode 100644 index 000000000000..a1b031cb23e1 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: bar +title: Bar +--- + +# Remarkable + +> Remarkable로 실시간 편집을 경험하십시오! + +깨끗한 슬레이트로 시작하려면`clear` 링크를 클릭하고 결과를 공유하거나 저장하려면`permalink`를 가져옵니다. + +*** + +# h1 제목 +## h2 제목 +### h3 제목 +#### h4 헤딩 +##### h5 제목 +###### h6 제목 + + +## 수평 규칙 + +___ + +*** + +*** + + +## 활자체 대체 + +입력기 옵션을 사용하면 결과를 볼 수 있습니다. + +(p) (P) + - (r) (t) + +테스트 .. 테스트 ... 테스트 ..... 테스트? ..... 테스트! .... + +!!!!!! ???? ,, + +놀라운 - 굉장한 + +"Smartypants, 큰 따옴표" + +'Smartypants, 작은 따옴표' + + +## 강조 + +** 이것은 굵은 글씨입니다 ** + +__ 이것은 굵은 글씨입니다 __ + +* 이탤릭체 텍스트 * + +_ 이탤릭체 텍스트 _ + +~~ 삭제 된 텍스트 ~~ + +위 첨자 : 19 ^ th ^ + +아래 첨자 : H ~ 2 ~ O + +++ 삽입 된 텍스트 ++ + +== 표시된 텍스트 == \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/baz.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/baz.md new file mode 100644 index 000000000000..c078572ef4d1 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: baz +title: baz +--- + +## 이미지 + +링크와 마찬가지로 이미지에도 각주 스타일 구문이 있습니다. + +! [Alt text] [id] + +나중에 URL 위치를 정의하는 문서에서 참조로 : + +[id] : https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## 링크 + +[링크 텍스트] (http://dev.nodeca.com) + +[제목 링크] (http://nodeca.github.io/pica/demo/ "제목 텍스트!") + +자동 변환 된 링크 https://github.com/nodeca/pica (linkify를 사용하도록 설정) + + + +## 각주 + +각주 1 링크 [^ 첫 번째]. + +각주 2 링크 [^ 초]. + +인라인 각주 ^ [인라인 각주의 텍스트] 정의. + +중복 된 각주 참조 [^ 초]. + +[^ first] : 각주 **는 마크 업을 가질 수 있습니다 ** + +    및 여러 단락. + +[^ 초] : 각주 텍스트. + + +## 정의 목록 + +1 학기 + +정의 1 +게으른 연속. + +* 인라인 마크 업과 함께 2 학기 * + +: 정의 2 + +        {일부 코드, 정의 2의 일부} + +    정의의 세 번째 단락 2. + +_ 컴팩트 스타일 : _ + +1 학기 +  ~ 정의 1 + +2 학기 +  ~ 정의 2a +  ~ 정의 2b + + +## 약어 + +이것은 HTML 약어입니다. + +그것은 "HTML"을 변환하지만 "xxxHTMLyyy"와 같이 부분적인 항목을 그대로 유지합니다. + +* [HTML] : 하이퍼 텍스트 마크 업 언어 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/hello.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/hello.md new file mode 100644 index 000000000000..cb2afd18886e --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/hello.md @@ -0,0 +1,54 @@ +--- +id: hello +title: Hello, World ! +--- + +안녕하세요, 여기 엔 틸리에 :) + +## 상대 링크 + +이것 바꾸기 +[foo](foo/bar.md) + +이것을 대체 할 수 없습니다. +[파일] (file.md) + +아래를 교체하지 마십시오. + +``` +[hello] (hello.md) +``` + +## Blockquotes + +> Blockquotes는 또한 중첩 될 수 있습니다 ... +>> ... 서로 옆에 큰 더 큰 부호를 사용하여 ... +>>> ... 또는 화살표 사이에 공백이 있어야합니다. + + +## 목록 + +정렬되지 않은 + ++`+`,`-` 또는`*`를 사용하여 행을 시작하여 목록을 만듭니다. ++ 하위 목록은 2 칸을 들여서 만들어집니다 : +   - 마커 문자 변경으로 새로운 목록 시작 : +     * AC tristique libero volutpat at +     + Preisium nisl aliquet에 대한 + 시설 +     - Nulla volutpat aliquam velit ++ 매우 쉽습니다! + +주문 됨 + +1. Lorem ipsum dolor sit amet +2. 컨소시엄 adipiscing 엘리트 +3. massa에서의 정수 lorem + + +1. 일련 번호를 사용할 수 있습니다 ... +1. ... 또는 모든 숫자를 '1'로 유지하십시오. + +오프셋을 사용하여 번호 매기기 시작 : + +57. foo +1. 막대기 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/bar.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/bar.md new file mode 100644 index 000000000000..6daa8d7b8149 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.0-bar +title: Bar +--- + +# Remarkable + +> Remarkable로 실시간 편집을 경험하십시오! + +깨끗한 슬레이트로 시작하려면`clear` 링크를 클릭하고 결과를 공유하거나 저장하려면`permalink`를 가져옵니다. + +*** + +# h1 제목 +## h2 제목 +### h3 제목 +#### h4 헤딩 +##### h5 제목 +###### h6 제목 + + +## 수평 규칙 + +___ + +*** + +*** + + +## 활자체 대체 + +입력기 옵션을 사용하면 결과를 볼 수 있습니다. + +(p) (P) + - (r) (t) + +테스트 .. 테스트 ... 테스트 ..... 테스트? ..... 테스트! .... + +!!!!!! ???? ,, + +놀라운 - 굉장한 + +"Smartypants, 큰 따옴표" + +'Smartypants, 작은 따옴표' + + +## 강조 + +** 이것은 굵은 글씨입니다 ** + +__ 이것은 굵은 글씨입니다 __ + +* 이탤릭체 텍스트 * + +_ 이탤릭체 텍스트 _ + +~~ 삭제 된 텍스트 ~~ + +위 첨자 : 19 ^ th ^ + +아래 첨자 : H ~ 2 ~ O + +++ 삽입 된 텍스트 ++ + +== 표시된 텍스트 == \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/baz.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/baz.md new file mode 100644 index 000000000000..7d057cf795ab --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.0-baz +title: baz +--- + +## 이미지 + +링크와 마찬가지로 이미지에도 각주 스타일 구문이 있습니다. + +! [Alt text] [id] + +나중에 URL 위치를 정의하는 문서에서 참조로 : + +[id] : https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## 링크 + +[링크 텍스트] (http://dev.nodeca.com) + +[제목 링크] (http://nodeca.github.io/pica/demo/ "제목 텍스트!") + +자동 변환 된 링크 https://github.com/nodeca/pica (linkify를 사용하도록 설정) + + + +## 각주 + +각주 1 링크 [^ 첫 번째]. + +각주 2 링크 [^ 초]. + +인라인 각주 ^ [인라인 각주의 텍스트] 정의. + +중복 된 각주 참조 [^ 초]. + +[^ first] : 각주 **는 마크 업을 가질 수 있습니다 ** + +    및 여러 단락. + +[^ 초] : 각주 텍스트. + + +## 정의 목록 + +1 학기 + +정의 1 +게으른 연속. + +* 인라인 마크 업과 함께 2 학기 * + +: 정의 2 + +        {일부 코드, 정의 2의 일부} + +    정의의 세 번째 단락 2. + +_ 컴팩트 스타일 : _ + +1 학기 +  ~ 정의 1 + +2 학기 +  ~ 정의 2a +  ~ 정의 2b + + +## 약어 + +이것은 HTML 약어입니다. + +그것은 "HTML"을 변환하지만 "xxxHTMLyyy"와 같이 부분적인 항목을 그대로 유지합니다. + +* [HTML] : 하이퍼 텍스트 마크 업 언어 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/hello.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/hello.md new file mode 100644 index 000000000000..5148b6723f8e --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.0/hello.md @@ -0,0 +1,54 @@ +--- +id: version-1.0.0-hello +title: Hello, World ! +--- + +안녕하세요, 여기 엔 틸리에 :) + +## 상대 링크 + +이것 바꾸기 +[foo](foo/bar.md) + +이것을 대체 할 수 없습니다. +[파일] (file.md) + +아래를 교체하지 마십시오. + +``` +[hello] (hello.md) +``` + +## Blockquotes + +> Blockquotes는 또한 중첩 될 수 있습니다 ... +>> ... 서로 옆에 큰 더 큰 부호를 사용하여 ... +>>> ... 또는 화살표 사이에 공백이 있어야합니다. + + +## 목록 + +정렬되지 않은 + ++`+`,`-` 또는`*`를 사용하여 행을 시작하여 목록을 만듭니다. ++ 하위 목록은 2 칸을 들여서 만들어집니다 : +   - 마커 문자 변경으로 새로운 목록 시작 : +     * AC tristique libero volutpat at +     + Preisium nisl aliquet에 대한 + 시설 +     - Nulla volutpat aliquam velit ++ 매우 쉽습니다! + +주문 됨 + +1. Lorem ipsum dolor sit amet +2. 컨소시엄 adipiscing 엘리트 +3. massa에서의 정수 lorem + + +1. 일련 번호를 사용할 수 있습니다 ... +1. ... 또는 모든 숫자를 '1'로 유지하십시오. + +오프셋을 사용하여 번호 매기기 시작 : + +57. foo +1. 막대기 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/bar.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/bar.md new file mode 100644 index 000000000000..1e9fefaf124e --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.1-bar +title: Bar +--- + +# Remarkable + +> Remarkable로 실시간 편집을 경험하십시오! + +깨끗한 슬레이트로 시작하려면`clear` 링크를 클릭하고 결과를 공유하거나 저장하려면`permalink`를 가져옵니다. + +*** + +# h1 제목 +## h2 제목 +### h3 제목 +#### h4 헤딩 +##### h5 제목 +###### h6 제목 + + +## 수평 규칙 + +___ + +*** + +*** + + +## 활자체 대체 + +입력기 옵션을 사용하면 결과를 볼 수 있습니다. + +(p) (P) + - (r) (t) + +테스트 .. 테스트 ... 테스트 ..... 테스트? ..... 테스트! .... + +!!!!!! ???? ,, + +놀라운 - 굉장한 + +"Smartypants, 큰 따옴표" + +'Smartypants, 작은 따옴표' + + +## 강조 + +** 이것은 굵은 글씨입니다 ** + +__ 이것은 굵은 글씨입니다 __ + +* 이탤릭체 텍스트 * + +_ 이탤릭체 텍스트 _ + +~~ 삭제 된 텍스트 ~~ + +위 첨자 : 19 ^ th ^ + +아래 첨자 : H ~ 2 ~ O + +++ 삽입 된 텍스트 ++ + +== 표시된 텍스트 == \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/baz.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/baz.md new file mode 100644 index 000000000000..e6e285d707ed --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.1-baz +title: baz +--- + +## 이미지 + +링크와 마찬가지로 이미지에도 각주 스타일 구문이 있습니다. + +! [Alt text] [id] + +나중에 URL 위치를 정의하는 문서에서 참조로 : + +[id] : https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## 링크 + +[링크 텍스트] (http://dev.nodeca.com) + +[제목 링크] (http://nodeca.github.io/pica/demo/ "제목 텍스트!") + +자동 변환 된 링크 https://github.com/nodeca/pica (linkify를 사용하도록 설정) + + + +## 각주 + +각주 1 링크 [^ 첫 번째]. + +각주 2 링크 [^ 초]. + +인라인 각주 ^ [인라인 각주의 텍스트] 정의. + +중복 된 각주 참조 [^ 초]. + +[^ first] : 각주 **는 마크 업을 가질 수 있습니다 ** + +    및 여러 단락. + +[^ 초] : 각주 텍스트. + + +## 정의 목록 + +1 학기 + +정의 1 +게으른 연속. + +* 인라인 마크 업과 함께 2 학기 * + +: 정의 2 + +        {일부 코드, 정의 2의 일부} + +    정의의 세 번째 단락 2. + +_ 컴팩트 스타일 : _ + +1 학기 +  ~ 정의 1 + +2 학기 +  ~ 정의 2a +  ~ 정의 2b + + +## 약어 + +이것은 HTML 약어입니다. + +그것은 "HTML"을 변환하지만 "xxxHTMLyyy"와 같이 부분적인 항목을 그대로 유지합니다. + +* [HTML] : 하이퍼 텍스트 마크 업 언어 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/hello.md b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/hello.md new file mode 100644 index 000000000000..f76f93aabb24 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/translated_docs/ko/version-1.0.1/hello.md @@ -0,0 +1,54 @@ +--- +id: version-1.0.1-hello +title: Hello, World ! +--- + +안녕하세요, 여기 엔 틸리에 :) + +## 상대 링크 + +이것 바꾸기 +[foo](foo/bar.md) + +이것을 대체 할 수 없습니다. +[파일] (file.md) + +아래를 교체하지 마십시오. + +``` +[hello] (hello.md) +``` + +## Blockquotes + +> Blockquotes는 또한 중첩 될 수 있습니다 ... +>> ... 서로 옆에 큰 더 큰 부호를 사용하여 ... +>>> ... 또는 화살표 사이에 공백이 있어야합니다. + + +## 목록 + +정렬되지 않은 + ++`+`,`-` 또는`*`를 사용하여 행을 시작하여 목록을 만듭니다. ++ 하위 목록은 2 칸을 들여서 만들어집니다 : +   - 마커 문자 변경으로 새로운 목록 시작 : +     * AC tristique libero volutpat at +     + Preisium nisl aliquet에 대한 + 시설 +     - Nulla volutpat aliquam velit ++ 매우 쉽습니다! + +주문 됨 + +1. Lorem ipsum dolor sit amet +2. 컨소시엄 adipiscing 엘리트 +3. massa에서의 정수 lorem + + +1. 일련 번호를 사용할 수 있습니다 ... +1. ... 또는 모든 숫자를 '1'로 유지하십시오. + +오프셋을 사용하여 번호 매기기 시작 : + +57. foo +1. 막대기 \ No newline at end of file diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/bar.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/bar.md new file mode 100644 index 000000000000..ecaf1c0d115b --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.0-bar +title: Bar +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +___ + +*** + +*** + + +## Typographic replacements + +Enable typographer option to see result. + +(c) (C) (r) (R) (tm) (TM) (p) (P) +- + +test.. test... test..... test?..... test!.... + +!!!!!! ???? ,, + +Remarkable -- awesome + +"Smartypants, double quotes" + +'Smartypants, single quotes' + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/baz.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/baz.md new file mode 100644 index 000000000000..3b02bd716c46 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.0-baz +title: Baz +--- + +## Images + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/hello.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/hello.md new file mode 100644 index 000000000000..56665f5b2ea6 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.0/hello.md @@ -0,0 +1,54 @@ +--- +id: version-1.0.0-hello +title: Hello, World ! +--- + +Hi, Endilie here :) + +## Relative links + +Replace this +[foo](foo/bar.md) + +Can't replace this +[file](file.md) + +Do not replace below + +``` +[hello](hello.md) +``` + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/bar.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/bar.md new file mode 100644 index 000000000000..03b948629b85 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.1-bar +title: Bar +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +___ + +*** + +*** + + +## Typographic replacements + +Enable typographer option to see result. + +(c) (C) (r) (R) (tm) (TM) (p) (P) +- + +test.. test... test..... test?..... test!.... + +!!!!!! ???? ,, + +Remarkable -- awesome + +"Smartypants, double quotes" + +'Smartypants, single quotes' + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/baz.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/baz.md new file mode 100644 index 000000000000..79aac52ca668 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.1-baz +title: Baz +--- + +## Images + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/hello.md b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/hello.md new file mode 100644 index 000000000000..9e6725f6880d --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_docs/version-1.0.1/hello.md @@ -0,0 +1,54 @@ +--- +id: version-1.0.1-hello +title: Hello, World ! +--- + +Hi, Endilie here :) + +## Relative links + +Replace this +[foo](foo/bar.md) + +Can't replace this +[file](file.md) + +Do not replace below + +``` +[hello](hello.md) +``` + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json b/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json new file mode 100644 index 000000000000..404b11d43b32 --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json @@ -0,0 +1,11 @@ +{ + "version-1.0.0-docs": { + "Test": [ + "version-1.0.0-foo/bar", + "version-1.0.0-foo/baz" + ], + "Guides": [ + "version-1.0.0-hello" + ] + } +} diff --git a/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json b/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json new file mode 100644 index 000000000000..48287dffc33e --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json @@ -0,0 +1,11 @@ +{ + "version-1.0.1-docs": { + "Test": [ + "version-1.0.1-foo/bar", + "version-1.0.1-foo/baz" + ], + "Guides": [ + "version-1.0.1-hello" + ] + } +} diff --git a/v2/test/__fixtures__/transversioned-site/versions.json b/v2/test/__fixtures__/transversioned-site/versions.json new file mode 100644 index 000000000000..542b187dfeeb --- /dev/null +++ b/v2/test/__fixtures__/transversioned-site/versions.json @@ -0,0 +1,4 @@ +[ + "1.0.1", + "1.0.0" +] diff --git a/v2/test/__fixtures__/versioned-site/pages/hello/world.js b/v2/test/__fixtures__/versioned-site/pages/hello/world.js new file mode 100644 index 000000000000..838f36bb1acd --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/pages/hello/world.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class World extends React.Component { + render() { + return ( + + + World + + +
    Hello World
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/versioned-site/pages/index.js b/v2/test/__fixtures__/versioned-site/pages/index.js new file mode 100644 index 000000000000..58dd9accb134 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/pages/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; + +export default class Home extends React.Component { + render() { + return ( + + + Home + + +
    Home ...
    +
    + ); + } +} diff --git a/v2/test/__fixtures__/versioned-site/sidebars.json b/v2/test/__fixtures__/versioned-site/sidebars.json new file mode 100644 index 000000000000..24d61b49c760 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/sidebars.json @@ -0,0 +1,11 @@ +{ + "docs": { + "Test": [ + "foo/bar", + "foo/baz" + ], + "Guides": [ + "hello" + ] + } +} diff --git a/v2/test/__fixtures__/versioned-site/siteConfig.js b/v2/test/__fixtures__/versioned-site/siteConfig.js new file mode 100644 index 000000000000..e64b9989cf7a --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/' +}; diff --git a/v2/test/__fixtures__/versioned-site/static/css/basic.css b/v2/test/__fixtures__/versioned-site/static/css/basic.css new file mode 100644 index 000000000000..e6e089cbfa53 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/static/css/basic.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +.toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +.toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/v2/test/__fixtures__/versioned-site/static/img/sakura.png b/v2/test/__fixtures__/versioned-site/static/img/sakura.png new file mode 100644 index 000000000000..e10909398bc2 Binary files /dev/null and b/v2/test/__fixtures__/versioned-site/static/img/sakura.png differ diff --git a/v2/test/__fixtures__/versioned-site/static/img/slash-introducing.png b/v2/test/__fixtures__/versioned-site/static/img/slash-introducing.png new file mode 100644 index 000000000000..839457886898 Binary files /dev/null and b/v2/test/__fixtures__/versioned-site/static/img/slash-introducing.png differ diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md new file mode 100644 index 000000000000..ecaf1c0d115b --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.0-bar +title: Bar +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +___ + +*** + +*** + + +## Typographic replacements + +Enable typographer option to see result. + +(c) (C) (r) (R) (tm) (TM) (p) (P) +- + +test.. test... test..... test?..... test!.... + +!!!!!! ???? ,, + +Remarkable -- awesome + +"Smartypants, double quotes" + +'Smartypants, single quotes' + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md new file mode 100644 index 000000000000..3b02bd716c46 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.0-baz +title: Baz +--- + +## Images + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md new file mode 100644 index 000000000000..ef91d008267c --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md @@ -0,0 +1,40 @@ +--- +id: version-1.0.0-hello +title: Hello, World ! +--- + +Hi, Endilie here :) + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md new file mode 100644 index 000000000000..03b948629b85 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md @@ -0,0 +1,66 @@ +--- +id: version-1.0.1-bar +title: Bar +--- + +# Remarkable + +> Experience real-time editing with Remarkable! + +Click the `clear` link to start with a clean slate, or get the `permalink` to share or save your results. + +*** + +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules + +___ + +*** + +*** + + +## Typographic replacements + +Enable typographer option to see result. + +(c) (C) (r) (R) (tm) (TM) (p) (P) +- + +test.. test... test..... test?..... test!.... + +!!!!!! ???? ,, + +Remarkable -- awesome + +"Smartypants, double quotes" + +'Smartypants, single quotes' + + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Deleted text~~ + +Superscript: 19^th^ + +Subscript: H~2~O + +++Inserted text++ + +==Marked text== diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/baz.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/baz.md new file mode 100644 index 000000000000..79aac52ca668 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/baz.md @@ -0,0 +1,74 @@ +--- +id: version-1.0.1-baz +title: Baz +--- + +## Images + +Like links, Images also have a footnote style syntax + +![Alt text][id] + +With a reference later in the document defining the URL location: + +[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat" + +## Links + +[link text](http://dev.nodeca.com) + +[link with title](http://nodeca.github.io/pica/demo/ "title text!") + +Autoconverted link https://github.com/nodeca/pica (enable linkify to see) + + + +## Footnotes + +Footnote 1 link[^first]. + +Footnote 2 link[^second]. + +Inline footnote^[Text of inline footnote] definition. + +Duplicated footnote reference[^second]. + +[^first]: Footnote **can have markup** + + and multiple paragraphs. + +[^second]: Footnote text. + + +## Definition lists + +Term 1 + +: Definition 1 +with lazy continuation. + +Term 2 with *inline markup* + +: Definition 2 + + { some code, part of Definition 2 } + + Third paragraph of definition 2. + +_Compact style:_ + +Term 1 + ~ Definition 1 + +Term 2 + ~ Definition 2a + ~ Definition 2b + + +## Abbreviations + +This is HTML abbreviation example. + +It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on. + +*[HTML]: Hyper Text Markup Language diff --git a/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md new file mode 100644 index 000000000000..3a8146169164 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md @@ -0,0 +1,40 @@ +--- +id: version-1.0.1-hello +title: Hello, World ! +--- + +Hi, Endilie here :) + +## Blockquotes + +> Blockquotes can also be nested... +>> ...by using additional greater-than signs right next to each other... +> > > ...or with spaces between arrows. + + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar diff --git a/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json b/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json new file mode 100644 index 000000000000..404b11d43b32 --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json @@ -0,0 +1,11 @@ +{ + "version-1.0.0-docs": { + "Test": [ + "version-1.0.0-foo/bar", + "version-1.0.0-foo/baz" + ], + "Guides": [ + "version-1.0.0-hello" + ] + } +} diff --git a/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json b/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json new file mode 100644 index 000000000000..48287dffc33e --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json @@ -0,0 +1,11 @@ +{ + "version-1.0.1-docs": { + "Test": [ + "version-1.0.1-foo/bar", + "version-1.0.1-foo/baz" + ], + "Guides": [ + "version-1.0.1-hello" + ] + } +} diff --git a/v2/test/__fixtures__/versioned-site/versions.json b/v2/test/__fixtures__/versioned-site/versions.json new file mode 100644 index 000000000000..542b187dfeeb --- /dev/null +++ b/v2/test/__fixtures__/versioned-site/versions.json @@ -0,0 +1,4 @@ +[ + "1.0.1", + "1.0.0" +] diff --git a/v2/test/jest.config.js b/v2/test/jest.config.js new file mode 100644 index 000000000000..7c7392384c02 --- /dev/null +++ b/v2/test/jest.config.js @@ -0,0 +1,12 @@ +const path = require('path'); + +module.exports = { + rootDir: path.resolve(__dirname, '..'), + verbose: true, + testURL: 'http://localhost/', + testEnvironment: 'node', + moduleNameMapper: { + '^@lib/(.*)$': '/lib/$1' + }, + testPathIgnorePatterns: ['/node_modules/', '__fixtures__'] +}; diff --git a/v2/test/load/__fixtures__/bad-site/languages.js b/v2/test/load/__fixtures__/bad-site/languages.js new file mode 100644 index 000000000000..fb5033422d9c --- /dev/null +++ b/v2/test/load/__fixtures__/bad-site/languages.js @@ -0,0 +1,178 @@ +const languages = [ + { + enabled: false, + name: 'English', + tag: 'en', + }, + { + enabled: false, + name: '日本語', + tag: 'ja', + }, + { + enabled: false, + name: 'العربية', + tag: 'ar', + }, + { + enabled: false, + name: 'Bosanski', + tag: 'bs-BA', + }, + { + enabled: false, + name: 'Català', + tag: 'ca', + }, + { + enabled: false, + name: 'Čeština', + tag: 'cs', + }, + { + enabled: false, + name: 'Dansk', + tag: 'da', + }, + { + enabled: false, + name: 'Deutsch', + tag: 'de', + }, + { + enabled: false, + name: 'Ελληνικά', + tag: 'el', + }, + { + enabled: false, + name: 'Español', + tag: 'es-ES', + }, + { + enabled: false, + name: 'فارسی', + tag: 'fa-IR', + }, + { + enabled: false, + name: 'Suomi', + tag: 'fi', + }, + { + enabled: false, + name: 'Français', + tag: 'fr', + }, + { + enabled: false, + name: 'עִברִית', + tag: 'he', + }, + { + enabled: false, + name: 'Magyar', + tag: 'hu', + }, + { + enabled: false, + name: 'Bahasa Indonesia', + tag: 'id-ID', + }, + { + enabled: false, + name: 'Italiano', + tag: 'it', + }, + { + enabled: false, + name: 'Afrikaans', + tag: 'af', + }, + { + enabled: false, + name: '한국어', + tag: 'ko', + }, + { + enabled: false, + name: 'मराठी', + tag: 'mr-IN', + }, + { + enabled: false, + name: 'Nederlands', + tag: 'nl', + }, + { + enabled: false, + name: 'Norsk', + tag: 'no-NO', + }, + { + enabled: false, + name: 'Polskie', + tag: 'pl', + }, + { + enabled: false, + name: 'Português', + tag: 'pt-PT', + }, + { + enabled: false, + name: 'Português (Brasil)', + tag: 'pt-BR', + }, + { + enabled: false, + name: 'Română', + tag: 'ro', + }, + { + enabled: false, + name: 'Русский', + tag: 'ru', + }, + { + enabled: false, + name: 'Slovenský', + tag: 'sk-SK', + }, + { + enabled: false, + name: 'Српски језик (Ћирилица)', + tag: 'sr', + }, + { + enabled: false, + name: 'Svenska', + tag: 'sv-SE', + }, + { + enabled: false, + name: 'Türkçe', + tag: 'tr', + }, + { + enabled: false, + name: 'Українська', + tag: 'uk', + }, + { + enabled: false, + name: 'Tiếng Việt', + tag: 'vi', + }, + { + enabled: false, + name: '简体中文', + tag: 'zh-CN', + }, + { + enabled: false, + name: '繁體中文', + tag: 'zh-TW', + }, +]; +module.exports = languages; diff --git a/v2/test/load/__fixtures__/bad-site/siteConfig.js b/v2/test/load/__fixtures__/bad-site/siteConfig.js new file mode 100644 index 000000000000..2f574304238f --- /dev/null +++ b/v2/test/load/__fixtures__/bad-site/siteConfig.js @@ -0,0 +1,4 @@ +module.exports = { + title: 'Munseo', + baseUrl: '/' +}; diff --git a/v2/test/load/__fixtures__/simple-pages/bar/baz.js b/v2/test/load/__fixtures__/simple-pages/bar/baz.js new file mode 100644 index 000000000000..75a8c700155c --- /dev/null +++ b/v2/test/load/__fixtures__/simple-pages/bar/baz.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Baz
    ; diff --git a/v2/test/load/__fixtures__/simple-pages/foo.js b/v2/test/load/__fixtures__/simple-pages/foo.js new file mode 100644 index 000000000000..3b52ec615cf0 --- /dev/null +++ b/v2/test/load/__fixtures__/simple-pages/foo.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Foo
    ; diff --git a/v2/test/load/__fixtures__/simple-pages/foo/index.js b/v2/test/load/__fixtures__/simple-pages/foo/index.js new file mode 100644 index 000000000000..5faf67ae13f9 --- /dev/null +++ b/v2/test/load/__fixtures__/simple-pages/foo/index.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Foo in subfolder
    ; diff --git a/v2/test/load/__fixtures__/simple-pages/index.js b/v2/test/load/__fixtures__/simple-pages/index.js new file mode 100644 index 000000000000..13063810a738 --- /dev/null +++ b/v2/test/load/__fixtures__/simple-pages/index.js @@ -0,0 +1,3 @@ +import React from 'react'; + +export default () =>
    Index
    ; diff --git a/v2/test/load/__fixtures__/simple-site/sidebars.json b/v2/test/load/__fixtures__/simple-site/sidebars.json new file mode 100644 index 000000000000..49667e47b52f --- /dev/null +++ b/v2/test/load/__fixtures__/simple-site/sidebars.json @@ -0,0 +1,10 @@ +{ + "docs": { + "Getting Started": [ + "installation" + ], + "Guides": [ + "blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/simple-site/siteConfig.js b/v2/test/load/__fixtures__/simple-site/siteConfig.js new file mode 100644 index 000000000000..e64b9989cf7a --- /dev/null +++ b/v2/test/load/__fixtures__/simple-site/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/' +}; diff --git a/v2/test/load/__fixtures__/translated-site/languages.js b/v2/test/load/__fixtures__/translated-site/languages.js new file mode 100644 index 000000000000..14c4aca911ad --- /dev/null +++ b/v2/test/load/__fixtures__/translated-site/languages.js @@ -0,0 +1,178 @@ +const languages = [ + { + enabled: true, + name: 'English', + tag: 'en', + }, + { + enabled: false, + name: '日本語', + tag: 'ja', + }, + { + enabled: false, + name: 'العربية', + tag: 'ar', + }, + { + enabled: false, + name: 'Bosanski', + tag: 'bs-BA', + }, + { + enabled: false, + name: 'Català', + tag: 'ca', + }, + { + enabled: false, + name: 'Čeština', + tag: 'cs', + }, + { + enabled: false, + name: 'Dansk', + tag: 'da', + }, + { + enabled: false, + name: 'Deutsch', + tag: 'de', + }, + { + enabled: false, + name: 'Ελληνικά', + tag: 'el', + }, + { + enabled: true, + name: 'Español', + tag: 'es-ES', + }, + { + enabled: false, + name: 'فارسی', + tag: 'fa-IR', + }, + { + enabled: false, + name: 'Suomi', + tag: 'fi', + }, + { + enabled: false, + name: 'Français', + tag: 'fr', + }, + { + enabled: false, + name: 'עִברִית', + tag: 'he', + }, + { + enabled: false, + name: 'Magyar', + tag: 'hu', + }, + { + enabled: false, + name: 'Bahasa Indonesia', + tag: 'id-ID', + }, + { + enabled: false, + name: 'Italiano', + tag: 'it', + }, + { + enabled: false, + name: 'Afrikaans', + tag: 'af', + }, + { + enabled: false, + name: '한국어', + tag: 'ko', + }, + { + enabled: false, + name: 'मराठी', + tag: 'mr-IN', + }, + { + enabled: false, + name: 'Nederlands', + tag: 'nl', + }, + { + enabled: false, + name: 'Norsk', + tag: 'no-NO', + }, + { + enabled: false, + name: 'Polskie', + tag: 'pl', + }, + { + enabled: false, + name: 'Português', + tag: 'pt-PT', + }, + { + enabled: false, + name: 'Português (Brasil)', + tag: 'pt-BR', + }, + { + enabled: true, + name: 'Română', + tag: 'ro', + }, + { + enabled: false, + name: 'Русский', + tag: 'ru', + }, + { + enabled: false, + name: 'Slovenský', + tag: 'sk-SK', + }, + { + enabled: false, + name: 'Српски језик (Ћирилица)', + tag: 'sr', + }, + { + enabled: false, + name: 'Svenska', + tag: 'sv-SE', + }, + { + enabled: true, + name: 'Türkçe', + tag: 'tr', + }, + { + enabled: false, + name: 'Українська', + tag: 'uk', + }, + { + enabled: false, + name: 'Tiếng Việt', + tag: 'vi', + }, + { + enabled: true, + name: '简体中文', + tag: 'zh-CN', + }, + { + enabled: false, + name: '繁體中文', + tag: 'zh-TW', + }, +]; +module.exports = languages; diff --git a/v2/test/load/__fixtures__/translated-site/siteConfig.js b/v2/test/load/__fixtures__/translated-site/siteConfig.js new file mode 100644 index 000000000000..661f59c98134 --- /dev/null +++ b/v2/test/load/__fixtures__/translated-site/siteConfig.js @@ -0,0 +1,8 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/', + defaultLanguage: 'en' +}; diff --git a/v2/test/load/__fixtures__/transversioned-site/languages.js b/v2/test/load/__fixtures__/transversioned-site/languages.js new file mode 100644 index 000000000000..14c4aca911ad --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/languages.js @@ -0,0 +1,178 @@ +const languages = [ + { + enabled: true, + name: 'English', + tag: 'en', + }, + { + enabled: false, + name: '日本語', + tag: 'ja', + }, + { + enabled: false, + name: 'العربية', + tag: 'ar', + }, + { + enabled: false, + name: 'Bosanski', + tag: 'bs-BA', + }, + { + enabled: false, + name: 'Català', + tag: 'ca', + }, + { + enabled: false, + name: 'Čeština', + tag: 'cs', + }, + { + enabled: false, + name: 'Dansk', + tag: 'da', + }, + { + enabled: false, + name: 'Deutsch', + tag: 'de', + }, + { + enabled: false, + name: 'Ελληνικά', + tag: 'el', + }, + { + enabled: true, + name: 'Español', + tag: 'es-ES', + }, + { + enabled: false, + name: 'فارسی', + tag: 'fa-IR', + }, + { + enabled: false, + name: 'Suomi', + tag: 'fi', + }, + { + enabled: false, + name: 'Français', + tag: 'fr', + }, + { + enabled: false, + name: 'עִברִית', + tag: 'he', + }, + { + enabled: false, + name: 'Magyar', + tag: 'hu', + }, + { + enabled: false, + name: 'Bahasa Indonesia', + tag: 'id-ID', + }, + { + enabled: false, + name: 'Italiano', + tag: 'it', + }, + { + enabled: false, + name: 'Afrikaans', + tag: 'af', + }, + { + enabled: false, + name: '한국어', + tag: 'ko', + }, + { + enabled: false, + name: 'मराठी', + tag: 'mr-IN', + }, + { + enabled: false, + name: 'Nederlands', + tag: 'nl', + }, + { + enabled: false, + name: 'Norsk', + tag: 'no-NO', + }, + { + enabled: false, + name: 'Polskie', + tag: 'pl', + }, + { + enabled: false, + name: 'Português', + tag: 'pt-PT', + }, + { + enabled: false, + name: 'Português (Brasil)', + tag: 'pt-BR', + }, + { + enabled: true, + name: 'Română', + tag: 'ro', + }, + { + enabled: false, + name: 'Русский', + tag: 'ru', + }, + { + enabled: false, + name: 'Slovenský', + tag: 'sk-SK', + }, + { + enabled: false, + name: 'Српски језик (Ћирилица)', + tag: 'sr', + }, + { + enabled: false, + name: 'Svenska', + tag: 'sv-SE', + }, + { + enabled: true, + name: 'Türkçe', + tag: 'tr', + }, + { + enabled: false, + name: 'Українська', + tag: 'uk', + }, + { + enabled: false, + name: 'Tiếng Việt', + tag: 'vi', + }, + { + enabled: true, + name: '简体中文', + tag: 'zh-CN', + }, + { + enabled: false, + name: '繁體中文', + tag: 'zh-TW', + }, +]; +module.exports = languages; diff --git a/v2/test/load/__fixtures__/transversioned-site/sidebars.json b/v2/test/load/__fixtures__/transversioned-site/sidebars.json new file mode 100644 index 000000000000..49667e47b52f --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/sidebars.json @@ -0,0 +1,10 @@ +{ + "docs": { + "Getting Started": [ + "installation" + ], + "Guides": [ + "blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/transversioned-site/siteConfig.js b/v2/test/load/__fixtures__/transversioned-site/siteConfig.js new file mode 100644 index 000000000000..661f59c98134 --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/siteConfig.js @@ -0,0 +1,8 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/', + defaultLanguage: 'en' +}; diff --git a/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json b/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json new file mode 100644 index 000000000000..7769c0cf64f6 --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.0-sidebars.json @@ -0,0 +1,10 @@ +{ + "version-1.0.0-docs": { + "Getting Started": [ + "version-1.0.0-installation" + ], + "Guides": [ + "version-1.0.0-blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json b/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json new file mode 100644 index 000000000000..386bfae67e39 --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/versioned_sidebars/version-1.0.1-sidebars.json @@ -0,0 +1,10 @@ +{ + "version-1.0.1-docs": { + "Getting Started": [ + "version-1.0.1-installation" + ], + "Guides": [ + "version-1.0.1-blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/transversioned-site/versions.json b/v2/test/load/__fixtures__/transversioned-site/versions.json new file mode 100644 index 000000000000..542b187dfeeb --- /dev/null +++ b/v2/test/load/__fixtures__/transversioned-site/versions.json @@ -0,0 +1,4 @@ +[ + "1.0.1", + "1.0.0" +] diff --git a/v2/test/load/__fixtures__/versioned-site/sidebars.json b/v2/test/load/__fixtures__/versioned-site/sidebars.json new file mode 100644 index 000000000000..49667e47b52f --- /dev/null +++ b/v2/test/load/__fixtures__/versioned-site/sidebars.json @@ -0,0 +1,10 @@ +{ + "docs": { + "Getting Started": [ + "installation" + ], + "Guides": [ + "blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/versioned-site/siteConfig.js b/v2/test/load/__fixtures__/versioned-site/siteConfig.js new file mode 100644 index 000000000000..e64b9989cf7a --- /dev/null +++ b/v2/test/load/__fixtures__/versioned-site/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/' +}; diff --git a/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json b/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json new file mode 100644 index 000000000000..7769c0cf64f6 --- /dev/null +++ b/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json @@ -0,0 +1,10 @@ +{ + "version-1.0.0-docs": { + "Getting Started": [ + "version-1.0.0-installation" + ], + "Guides": [ + "version-1.0.0-blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json b/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json new file mode 100644 index 000000000000..386bfae67e39 --- /dev/null +++ b/v2/test/load/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json @@ -0,0 +1,10 @@ +{ + "version-1.0.1-docs": { + "Getting Started": [ + "version-1.0.1-installation" + ], + "Guides": [ + "version-1.0.1-blog" + ] + } +} diff --git a/v2/test/load/__fixtures__/versioned-site/versions.json b/v2/test/load/__fixtures__/versioned-site/versions.json new file mode 100644 index 000000000000..542b187dfeeb --- /dev/null +++ b/v2/test/load/__fixtures__/versioned-site/versions.json @@ -0,0 +1,4 @@ +[ + "1.0.1", + "1.0.0" +] diff --git a/v2/test/load/__fixtures__/wrong-site/siteConfig.js b/v2/test/load/__fixtures__/wrong-site/siteConfig.js new file mode 100644 index 000000000000..49d6f120be3e --- /dev/null +++ b/v2/test/load/__fixtures__/wrong-site/siteConfig.js @@ -0,0 +1,11 @@ +module.exports = { + title: 'Hello', + tagline: 'Hello World', + organizationName: 'endiliey', + projectName: 'hello', + baseUrl: '/', + useLessField: 'what', + superman: 'lol', + admin: 'endi', + customFields: ['admin', 'superman'] +}; diff --git a/v2/test/load/__snapshots__/env.test.js.snap b/v2/test/load/__snapshots__/env.test.js.snap new file mode 100644 index 000000000000..cdc1ab62070a --- /dev/null +++ b/v2/test/load/__snapshots__/env.test.js.snap @@ -0,0 +1,131 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`loadEnv website with both versioning & translation disabled 1`] = ` +Object { + "translation": Object { + "defaultLanguage": Object {}, + "enabled": false, + "enabledLanguages": Array [], + }, + "versioning": Object { + "defaultVersion": null, + "enabled": false, + "latestVersion": null, + "versions": Array [], + }, +} +`; + +exports[`loadEnv website with translation enabled 1`] = ` +Object { + "translation": Object { + "defaultLanguage": Object { + "enabled": true, + "name": "English", + "tag": "en", + }, + "enabled": true, + "enabledLanguages": Array [ + Object { + "enabled": true, + "name": "English", + "tag": "en", + }, + Object { + "enabled": true, + "name": "Español", + "tag": "es-ES", + }, + Object { + "enabled": true, + "name": "Română", + "tag": "ro", + }, + Object { + "enabled": true, + "name": "Türkçe", + "tag": "tr", + }, + Object { + "enabled": true, + "name": "简体中文", + "tag": "zh-CN", + }, + ], + }, + "versioning": Object { + "defaultVersion": null, + "enabled": false, + "latestVersion": null, + "versions": Array [], + }, +} +`; + +exports[`loadEnv website with versioning & translation enabled 1`] = ` +Object { + "translation": Object { + "defaultLanguage": Object { + "enabled": true, + "name": "English", + "tag": "en", + }, + "enabled": true, + "enabledLanguages": Array [ + Object { + "enabled": true, + "name": "English", + "tag": "en", + }, + Object { + "enabled": true, + "name": "Español", + "tag": "es-ES", + }, + Object { + "enabled": true, + "name": "Română", + "tag": "ro", + }, + Object { + "enabled": true, + "name": "Türkçe", + "tag": "tr", + }, + Object { + "enabled": true, + "name": "简体中文", + "tag": "zh-CN", + }, + ], + }, + "versioning": Object { + "defaultVersion": "1.0.1", + "enabled": true, + "latestVersion": "1.0.1", + "versions": Array [ + "1.0.1", + "1.0.0", + ], + }, +} +`; + +exports[`loadEnv website with versioning enabled 1`] = ` +Object { + "translation": Object { + "defaultLanguage": Object {}, + "enabled": false, + "enabledLanguages": Array [], + }, + "versioning": Object { + "defaultVersion": "1.0.1", + "enabled": true, + "latestVersion": "1.0.1", + "versions": Array [ + "1.0.1", + "1.0.0", + ], + }, +} +`; diff --git a/v2/test/load/config.test.js b/v2/test/load/config.test.js new file mode 100644 index 000000000000..0288acfe3975 --- /dev/null +++ b/v2/test/load/config.test.js @@ -0,0 +1,46 @@ +import path from 'path'; +import loadConfig from '@lib/load/config'; + +describe('loadConfig', () => { + test('website with valid siteConfig', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'simple-site'); + const config = loadConfig(siteDir); + expect(config).toEqual({ + baseUrl: '/', + organizationName: 'endiliey', + customDocsPath: 'docs', + docsUrl: 'docs', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello' + }); + expect(config).not.toEqual({}); + }); + + test('website with incomplete siteConfig', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'bad-site'); + expect(() => { + loadConfig(siteDir); + }).toThrowErrorMatchingInlineSnapshot( + `"tagline, organizationName, projectName fields are missing in siteConfig.js"` + ); + }); + + test('website with useless field (wrong field) in siteConfig', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'wrong-site'); + expect(() => { + loadConfig(siteDir); + }).toThrowErrorMatchingInlineSnapshot( + `"useLessField fields are useless in siteConfig.js"` + ); + }); + + test('website with no siteConfig', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'nonExisting'); + expect(() => { + loadConfig(siteDir); + }).toThrowErrorMatchingInlineSnapshot( + `"title, tagline, organizationName, projectName, baseUrl fields are missing in siteConfig.js"` + ); + }); +}); diff --git a/v2/test/load/docs/__snapshots__/index.test.js.snap b/v2/test/load/docs/__snapshots__/index.test.js.snap new file mode 100644 index 000000000000..77ec92bbcc35 --- /dev/null +++ b/v2/test/load/docs/__snapshots__/index.test.js.snap @@ -0,0 +1,597 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`loadDocs simple website 1`] = ` +Object { + "foo/bar": Object { + "category": "Test", + "id": "foo/bar", + "language": undefined, + "localized_id": "foo/bar", + "next": "foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/foo/bar", + "sidebar": "docs", + "source": "@docs/foo/bar.md", + "title": "Bar", + "version": undefined, + }, + "foo/baz": Object { + "category": "Test", + "id": "foo/baz", + "language": undefined, + "localized_id": "foo/baz", + "next": "hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/foo/baz", + "previous": "foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@docs/foo/baz.md", + "title": "baz", + "version": undefined, + }, + "hello": Object { + "category": "Guides", + "id": "hello", + "language": undefined, + "localized_id": "hello", + "permalink": "/docs/hello", + "previous": "foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@docs/hello.md", + "title": "Hello, World !", + "version": undefined, + }, + "permalink": Object { + "id": "permalink", + "language": undefined, + "localized_id": "permalink", + "permalink": "/docs/endiliey/permalink", + "source": "@docs/permalink.md", + "title": "Permalink", + "version": undefined, + }, +} +`; + +exports[`loadDocs translated website 1`] = ` +Object { + "en-foo/bar": Object { + "category": "Test", + "id": "en-foo/bar", + "language": "en", + "localized_id": "foo/bar", + "next": "en-foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/en/foo/bar", + "sidebar": "docs", + "source": "@docs/foo/bar.md", + "title": "Bar", + "version": undefined, + }, + "en-foo/baz": Object { + "category": "Test", + "id": "en-foo/baz", + "language": "en", + "localized_id": "foo/baz", + "next": "en-hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/en/foo/baz", + "previous": "en-foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@docs/foo/baz.md", + "title": "baz", + "version": undefined, + }, + "en-hello": Object { + "category": "Guides", + "id": "en-hello", + "language": "en", + "localized_id": "hello", + "permalink": "/docs/en/hello", + "previous": "en-foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@docs/hello.md", + "title": "Hello, World !", + "version": undefined, + }, + "en-permalink": Object { + "id": "en-permalink", + "language": "en", + "localized_id": "permalink", + "permalink": "/docs/en/endiliey/permalink", + "source": "@docs/permalink.md", + "title": "Permalink", + "version": undefined, + }, + "ko-foo/bar": Object { + "category": "Test", + "id": "ko-foo/bar", + "language": "ko", + "localized_id": "foo/bar", + "next": "ko-foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/ko/foo/bar", + "sidebar": "docs", + "source": "@translated_docs/ko/foo/bar.md", + "title": "Bar", + "version": undefined, + }, + "ko-foo/baz": Object { + "category": "Test", + "id": "ko-foo/baz", + "language": "ko", + "localized_id": "foo/baz", + "next": "ko-hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/ko/foo/baz", + "previous": "ko-foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@translated_docs/ko/foo/baz.md", + "title": "baz", + "version": undefined, + }, + "ko-hello": Object { + "category": "Guides", + "id": "ko-hello", + "language": "ko", + "localized_id": "hello", + "permalink": "/docs/ko/hello", + "previous": "ko-foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@translated_docs/ko/hello.md", + "title": "Hello, World !", + "version": undefined, + }, +} +`; + +exports[`loadDocs versioned & translated website 1`] = ` +Object { + "en-foo/bar": Object { + "category": "Test", + "id": "en-foo/bar", + "language": "en", + "localized_id": "foo/bar", + "next": "en-foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/en/next/foo/bar", + "sidebar": "docs", + "source": "@docs/foo/bar.md", + "title": "Bar", + "version": "next", + }, + "en-foo/baz": Object { + "category": "Test", + "id": "en-foo/baz", + "language": "en", + "localized_id": "foo/baz", + "next": "en-hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/en/next/foo/baz", + "previous": "en-foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@docs/foo/baz.md", + "title": "baz", + "version": "next", + }, + "en-hello": Object { + "category": "Guides", + "id": "en-hello", + "language": "en", + "localized_id": "hello", + "permalink": "/docs/en/next/hello", + "previous": "en-foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@docs/hello.md", + "title": "Hello, World !", + "version": "next", + }, + "en-permalink": Object { + "id": "en-permalink", + "language": "en", + "localized_id": "permalink", + "permalink": "/docs/en/next/endiliey/permalink", + "source": "@docs/permalink.md", + "title": "Permalink", + "version": "next", + }, + "en-version-1.0.0-foo/bar": Object { + "category": "Test", + "id": "en-version-1.0.0-foo/bar", + "language": "en", + "localized_id": "version-1.0.0-foo/bar", + "next": "en-version-1.0.0-foo/baz", + "next_id": "version-1.0.0-foo/baz", + "next_title": "Baz", + "permalink": "/docs/en/1.0.0/foo/bar", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/foo/bar.md", + "title": "Bar", + "version": "1.0.0", + }, + "en-version-1.0.0-foo/baz": Object { + "category": "Test", + "id": "en-version-1.0.0-foo/baz", + "language": "en", + "localized_id": "version-1.0.0-foo/baz", + "next": "en-version-1.0.0-hello", + "next_id": "version-1.0.0-hello", + "next_title": "Hello, World !", + "permalink": "/docs/en/1.0.0/foo/baz", + "previous": "en-version-1.0.0-foo/bar", + "previous_id": "version-1.0.0-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/foo/baz.md", + "title": "Baz", + "version": "1.0.0", + }, + "en-version-1.0.0-hello": Object { + "category": "Guides", + "id": "en-version-1.0.0-hello", + "language": "en", + "localized_id": "version-1.0.0-hello", + "permalink": "/docs/en/1.0.0/hello", + "previous": "en-version-1.0.0-foo/baz", + "previous_id": "version-1.0.0-foo/baz", + "previous_title": "Baz", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/hello.md", + "title": "Hello, World !", + "version": "1.0.0", + }, + "en-version-1.0.1-foo/bar": Object { + "category": "Test", + "id": "en-version-1.0.1-foo/bar", + "language": "en", + "localized_id": "version-1.0.1-foo/bar", + "next": "en-version-1.0.1-foo/baz", + "next_id": "version-1.0.1-foo/baz", + "next_title": "Baz", + "permalink": "/docs/en/foo/bar", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/foo/bar.md", + "title": "Bar", + "version": "1.0.1", + }, + "en-version-1.0.1-foo/baz": Object { + "category": "Test", + "id": "en-version-1.0.1-foo/baz", + "language": "en", + "localized_id": "version-1.0.1-foo/baz", + "next": "en-version-1.0.1-hello", + "next_id": "version-1.0.1-hello", + "next_title": "Hello, World !", + "permalink": "/docs/en/foo/baz", + "previous": "en-version-1.0.1-foo/bar", + "previous_id": "version-1.0.1-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/foo/baz.md", + "title": "Baz", + "version": "1.0.1", + }, + "en-version-1.0.1-hello": Object { + "category": "Guides", + "id": "en-version-1.0.1-hello", + "language": "en", + "localized_id": "version-1.0.1-hello", + "permalink": "/docs/en/hello", + "previous": "en-version-1.0.1-foo/baz", + "previous_id": "version-1.0.1-foo/baz", + "previous_title": "Baz", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/hello.md", + "title": "Hello, World !", + "version": "1.0.1", + }, + "ko-foo/bar": Object { + "category": "Test", + "id": "ko-foo/bar", + "language": "ko", + "localized_id": "foo/bar", + "next": "ko-foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/ko/next/foo/bar", + "sidebar": "docs", + "source": "@translated_docs/ko/foo/bar.md", + "title": "Bar", + "version": "next", + }, + "ko-foo/baz": Object { + "category": "Test", + "id": "ko-foo/baz", + "language": "ko", + "localized_id": "foo/baz", + "next": "ko-hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/ko/next/foo/baz", + "previous": "ko-foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@translated_docs/ko/foo/baz.md", + "title": "baz", + "version": "next", + }, + "ko-hello": Object { + "category": "Guides", + "id": "ko-hello", + "language": "ko", + "localized_id": "hello", + "permalink": "/docs/ko/next/hello", + "previous": "ko-foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@translated_docs/ko/hello.md", + "title": "Hello, World !", + "version": "next", + }, + "ko-version-1.0.0-foo/bar": Object { + "category": "Test", + "id": "ko-version-1.0.0-foo/bar", + "language": "ko", + "localized_id": "version-1.0.0-foo/bar", + "next": "ko-version-1.0.0-foo/baz", + "next_id": "version-1.0.0-foo/baz", + "next_title": "baz", + "permalink": "/docs/ko/1.0.0/foo/bar", + "sidebar": "version-1.0.0-docs", + "source": "@translated_docs/ko/version-1.0.0/foo/bar.md", + "title": "Bar", + "version": "1.0.0", + }, + "ko-version-1.0.0-foo/baz": Object { + "category": "Test", + "id": "ko-version-1.0.0-foo/baz", + "language": "ko", + "localized_id": "version-1.0.0-foo/baz", + "next": "ko-version-1.0.0-hello", + "next_id": "version-1.0.0-hello", + "next_title": "Hello, World !", + "permalink": "/docs/ko/1.0.0/foo/baz", + "previous": "ko-version-1.0.0-foo/bar", + "previous_id": "version-1.0.0-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.0-docs", + "source": "@translated_docs/ko/version-1.0.0/foo/baz.md", + "title": "baz", + "version": "1.0.0", + }, + "ko-version-1.0.0-hello": Object { + "category": "Guides", + "id": "ko-version-1.0.0-hello", + "language": "ko", + "localized_id": "version-1.0.0-hello", + "permalink": "/docs/ko/1.0.0/hello", + "previous": "ko-version-1.0.0-foo/baz", + "previous_id": "version-1.0.0-foo/baz", + "previous_title": "baz", + "sidebar": "version-1.0.0-docs", + "source": "@translated_docs/ko/version-1.0.0/hello.md", + "title": "Hello, World !", + "version": "1.0.0", + }, + "ko-version-1.0.1-foo/bar": Object { + "category": "Test", + "id": "ko-version-1.0.1-foo/bar", + "language": "ko", + "localized_id": "version-1.0.1-foo/bar", + "next": "ko-version-1.0.1-foo/baz", + "next_id": "version-1.0.1-foo/baz", + "next_title": "baz", + "permalink": "/docs/ko/foo/bar", + "sidebar": "version-1.0.1-docs", + "source": "@translated_docs/ko/version-1.0.1/foo/bar.md", + "title": "Bar", + "version": "1.0.1", + }, + "ko-version-1.0.1-foo/baz": Object { + "category": "Test", + "id": "ko-version-1.0.1-foo/baz", + "language": "ko", + "localized_id": "version-1.0.1-foo/baz", + "next": "ko-version-1.0.1-hello", + "next_id": "version-1.0.1-hello", + "next_title": "Hello, World !", + "permalink": "/docs/ko/foo/baz", + "previous": "ko-version-1.0.1-foo/bar", + "previous_id": "version-1.0.1-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.1-docs", + "source": "@translated_docs/ko/version-1.0.1/foo/baz.md", + "title": "baz", + "version": "1.0.1", + }, + "ko-version-1.0.1-hello": Object { + "category": "Guides", + "id": "ko-version-1.0.1-hello", + "language": "ko", + "localized_id": "version-1.0.1-hello", + "permalink": "/docs/ko/hello", + "previous": "ko-version-1.0.1-foo/baz", + "previous_id": "version-1.0.1-foo/baz", + "previous_title": "baz", + "sidebar": "version-1.0.1-docs", + "source": "@translated_docs/ko/version-1.0.1/hello.md", + "title": "Hello, World !", + "version": "1.0.1", + }, +} +`; + +exports[`loadDocs versioned website 1`] = ` +Object { + "foo/bar": Object { + "category": "Test", + "id": "foo/bar", + "language": undefined, + "localized_id": "foo/bar", + "next": "foo/baz", + "next_id": "foo/baz", + "next_title": "baz", + "permalink": "/docs/next/foo/bar", + "sidebar": "docs", + "source": "@docs/foo/bar.md", + "title": "Bar", + "version": "next", + }, + "foo/baz": Object { + "category": "Test", + "id": "foo/baz", + "language": undefined, + "localized_id": "foo/baz", + "next": "hello", + "next_id": "hello", + "next_title": "Hello, World !", + "permalink": "/docs/next/foo/baz", + "previous": "foo/bar", + "previous_id": "foo/bar", + "previous_title": "Bar", + "sidebar": "docs", + "source": "@docs/foo/baz.md", + "title": "baz", + "version": "next", + }, + "hello": Object { + "category": "Guides", + "id": "hello", + "language": undefined, + "localized_id": "hello", + "permalink": "/docs/next/hello", + "previous": "foo/baz", + "previous_id": "foo/baz", + "previous_title": "baz", + "sidebar": "docs", + "source": "@docs/hello.md", + "title": "Hello, World !", + "version": "next", + }, + "permalink": Object { + "id": "permalink", + "language": undefined, + "localized_id": "permalink", + "permalink": "/docs/next/endiliey/permalink", + "source": "@docs/permalink.md", + "title": "Permalink", + "version": "next", + }, + "version-1.0.0-foo/bar": Object { + "category": "Test", + "id": "version-1.0.0-foo/bar", + "language": undefined, + "localized_id": "version-1.0.0-foo/bar", + "next": "version-1.0.0-foo/baz", + "next_id": "version-1.0.0-foo/baz", + "next_title": "Baz", + "permalink": "/docs/1.0.0/foo/bar", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/foo/bar.md", + "title": "Bar", + "version": "1.0.0", + }, + "version-1.0.0-foo/baz": Object { + "category": "Test", + "id": "version-1.0.0-foo/baz", + "language": undefined, + "localized_id": "version-1.0.0-foo/baz", + "next": "version-1.0.0-hello", + "next_id": "version-1.0.0-hello", + "next_title": "Hello, World !", + "permalink": "/docs/1.0.0/foo/baz", + "previous": "version-1.0.0-foo/bar", + "previous_id": "version-1.0.0-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/foo/baz.md", + "title": "Baz", + "version": "1.0.0", + }, + "version-1.0.0-hello": Object { + "category": "Guides", + "id": "version-1.0.0-hello", + "language": undefined, + "localized_id": "version-1.0.0-hello", + "permalink": "/docs/1.0.0/hello", + "previous": "version-1.0.0-foo/baz", + "previous_id": "version-1.0.0-foo/baz", + "previous_title": "Baz", + "sidebar": "version-1.0.0-docs", + "source": "@versioned_docs/version-1.0.0/hello.md", + "title": "Hello, World !", + "version": "1.0.0", + }, + "version-1.0.1-foo/bar": Object { + "category": "Test", + "id": "version-1.0.1-foo/bar", + "language": undefined, + "localized_id": "version-1.0.1-foo/bar", + "next": "version-1.0.1-foo/baz", + "next_id": "version-1.0.1-foo/baz", + "next_title": "Baz", + "permalink": "/docs/foo/bar", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/foo/bar.md", + "title": "Bar", + "version": "1.0.1", + }, + "version-1.0.1-foo/baz": Object { + "category": "Test", + "id": "version-1.0.1-foo/baz", + "language": undefined, + "localized_id": "version-1.0.1-foo/baz", + "next": "version-1.0.1-hello", + "next_id": "version-1.0.1-hello", + "next_title": "Hello, World !", + "permalink": "/docs/foo/baz", + "previous": "version-1.0.1-foo/bar", + "previous_id": "version-1.0.1-foo/bar", + "previous_title": "Bar", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/foo/baz.md", + "title": "Baz", + "version": "1.0.1", + }, + "version-1.0.1-hello": Object { + "category": "Guides", + "id": "version-1.0.1-hello", + "language": undefined, + "localized_id": "version-1.0.1-hello", + "permalink": "/docs/hello", + "previous": "version-1.0.1-foo/baz", + "previous_id": "version-1.0.1-foo/baz", + "previous_title": "Baz", + "sidebar": "version-1.0.1-docs", + "source": "@versioned_docs/version-1.0.1/hello.md", + "title": "Hello, World !", + "version": "1.0.1", + }, +} +`; diff --git a/v2/test/load/docs/__snapshots__/sidebars.test.js.snap b/v2/test/load/docs/__snapshots__/sidebars.test.js.snap new file mode 100644 index 000000000000..e96f753e75bd --- /dev/null +++ b/v2/test/load/docs/__snapshots__/sidebars.test.js.snap @@ -0,0 +1,45 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`loadSidebars normal site with sidebars 1`] = ` +Object { + "docs": Object { + "Getting Started": Array [ + "installation", + ], + "Guides": Array [ + "blog", + ], + }, +} +`; + +exports[`loadSidebars site with sidebars & versioned sidebars 1`] = ` +Object { + "docs": Object { + "Getting Started": Array [ + "installation", + ], + "Guides": Array [ + "blog", + ], + }, + "version-1.0.0-docs": Object { + "Getting Started": Array [ + "version-1.0.0-installation", + ], + "Guides": Array [ + "version-1.0.0-blog", + ], + }, + "version-1.0.1-docs": Object { + "Getting Started": Array [ + "version-1.0.1-installation", + ], + "Guides": Array [ + "version-1.0.1-blog", + ], + }, +} +`; + +exports[`loadSidebars site without sidebars 1`] = `Object {}`; diff --git a/v2/test/load/docs/index.test.js b/v2/test/load/docs/index.test.js new file mode 100644 index 000000000000..cca715567486 --- /dev/null +++ b/v2/test/load/docs/index.test.js @@ -0,0 +1,32 @@ +import loadDocs from '@lib/load/docs'; +import loadSetup from '../../loadSetup'; + +describe('loadDocs', () => { + test('simple website', async () => { + const props = await loadSetup('simple'); + const {siteDir, docsDir, env, siteConfig} = props; + const {docsMetadatas} = await loadDocs({siteDir, docsDir, env, siteConfig}); + expect(docsMetadatas).toMatchSnapshot(); + }); + + test('versioned website', async () => { + const props = await loadSetup('versioned'); + const {siteDir, docsDir, env, siteConfig} = props; + const {docsMetadatas} = await loadDocs({siteDir, docsDir, env, siteConfig}); + expect(docsMetadatas).toMatchSnapshot(); + }); + + test('versioned & translated website', async () => { + const props = await loadSetup('transversioned'); + const {siteDir, docsDir, env, siteConfig} = props; + const {docsMetadatas} = await loadDocs({siteDir, docsDir, env, siteConfig}); + expect(docsMetadatas).toMatchSnapshot(); + }); + + test('translated website', async () => { + const props = await loadSetup('translated'); + const {siteDir, docsDir, env, siteConfig} = props; + const {docsMetadatas} = await loadDocs({siteDir, docsDir, env, siteConfig}); + expect(docsMetadatas).toMatchSnapshot(); + }); +}); diff --git a/v2/test/load/docs/metadata.test.js b/v2/test/load/docs/metadata.test.js new file mode 100644 index 000000000000..bf2a96640a71 --- /dev/null +++ b/v2/test/load/docs/metadata.test.js @@ -0,0 +1,154 @@ +import path from 'path'; +import processMetadata from '@lib/load/docs/metadata'; +import loadSetup from '../../loadSetup'; + +describe('processMetadata', () => { + test('normal docs', async () => { + const props = await loadSetup('simple'); + const {docsDir, env, siteConfig} = props; + const sourceA = path.join('foo', 'bar.md'); + const sourceB = path.join('hello.md'); + const dataA = await processMetadata(sourceA, docsDir, env, {}, siteConfig); + const dataB = await processMetadata(sourceB, docsDir, env, {}, siteConfig); + expect(dataA).toEqual({ + id: 'foo/bar', + language: undefined, + localized_id: 'foo/bar', + permalink: '/docs/foo/bar', + source: '@docs/foo/bar.md', + title: 'Bar', + version: undefined + }); + expect(dataB).toEqual({ + id: 'hello', + language: undefined, + localized_id: 'hello', + permalink: '/docs/hello', + source: '@docs/hello.md', + title: 'Hello, World !', + version: undefined + }); + }); + + test('docs with custom permalink', async () => { + const props = await loadSetup('simple'); + const {docsDir, env, siteConfig} = props; + const source = path.join('permalink.md'); + const data = await processMetadata(source, docsDir, env, {}, siteConfig); + expect(data).toEqual({ + id: 'permalink', + language: undefined, + localized_id: 'permalink', + permalink: '/docs/endiliey/permalink', + source: '@docs/permalink.md', + title: 'Permalink', + version: undefined + }); + }); + + test('versioned docs (without translation)', async () => { + const props = await loadSetup('versioned'); + const {siteDir, env, siteConfig} = props; + const refDir = path.join(siteDir, 'versioned_docs'); + const sourceA = path.join('version-1.0.0', 'foo', 'bar.md'); + const sourceB = path.join('version-1.0.0', 'hello.md'); + const dataA = await processMetadata(sourceA, refDir, env, {}, siteConfig); + const dataB = await processMetadata(sourceB, refDir, env, {}, siteConfig); + expect(dataA).toEqual({ + id: 'version-1.0.0-foo/bar', + language: undefined, + localized_id: 'version-1.0.0-foo/bar', + permalink: '/docs/1.0.0/foo/bar', + source: '@versioned_docs/version-1.0.0/foo/bar.md', + title: 'Bar', + version: '1.0.0' + }); + expect(dataB).toEqual({ + id: 'version-1.0.0-hello', + language: undefined, + localized_id: 'version-1.0.0-hello', + permalink: '/docs/1.0.0/hello', + source: '@versioned_docs/version-1.0.0/hello.md', + title: 'Hello, World !', + version: '1.0.0' + }); + }); + + test('translated versioned docs', async () => { + const props = await loadSetup('transversioned'); + const {siteDir, env, siteConfig} = props; + const refDir = path.join(siteDir, 'translated_docs'); + const sourceA = path.join('ko', 'version-1.0.0', 'foo', 'bar.md'); + const sourceB = path.join('ko', 'version-1.0.0', 'hello.md'); + const sourceC = path.join('ko', 'version-1.0.1', 'foo', 'bar.md'); + const sourceD = path.join('ko', 'version-1.0.1', 'hello.md'); + const dataA = await processMetadata(sourceA, refDir, env, {}, siteConfig); + const dataB = await processMetadata(sourceB, refDir, env, {}, siteConfig); + const dataC = await processMetadata(sourceC, refDir, env, {}, siteConfig); + const dataD = await processMetadata(sourceD, refDir, env, {}, siteConfig); + expect(dataA).toEqual({ + id: 'ko-version-1.0.0-foo/bar', + language: 'ko', + localized_id: 'version-1.0.0-foo/bar', + permalink: '/docs/ko/1.0.0/foo/bar', + source: '@translated_docs/ko/version-1.0.0/foo/bar.md', + title: 'Bar', + version: '1.0.0' + }); + expect(dataB).toEqual({ + id: 'ko-version-1.0.0-hello', + language: 'ko', + localized_id: 'version-1.0.0-hello', + permalink: '/docs/ko/1.0.0/hello', + source: '@translated_docs/ko/version-1.0.0/hello.md', + title: 'Hello, World !', + version: '1.0.0' + }); + expect(dataC).toEqual({ + id: 'ko-version-1.0.1-foo/bar', + language: 'ko', + localized_id: 'version-1.0.1-foo/bar', + permalink: '/docs/ko/foo/bar', + source: '@translated_docs/ko/version-1.0.1/foo/bar.md', + title: 'Bar', + version: '1.0.1' + }); + expect(dataD).toEqual({ + id: 'ko-version-1.0.1-hello', + language: 'ko', + localized_id: 'version-1.0.1-hello', + permalink: '/docs/ko/hello', + source: '@translated_docs/ko/version-1.0.1/hello.md', + title: 'Hello, World !', + version: '1.0.1' + }); + }); + + test('translated docs only', async () => { + const props = await loadSetup('translated'); + const {siteDir, env, siteConfig} = props; + const refDir = path.join(siteDir, 'translated_docs'); + const sourceA = path.join('ko', 'foo', 'bar.md'); + const sourceB = path.join('ko', 'hello.md'); + const dataA = await processMetadata(sourceA, refDir, env, {}, siteConfig); + const dataB = await processMetadata(sourceB, refDir, env, {}, siteConfig); + expect(dataA).toEqual({ + id: 'ko-foo/bar', + language: 'ko', + localized_id: 'foo/bar', + permalink: '/docs/ko/foo/bar', + source: '@translated_docs/ko/foo/bar.md', + title: 'Bar', + version: undefined + }); + expect(dataB).toEqual({ + id: 'ko-hello', + language: 'ko', + localized_id: 'hello', + permalink: '/docs/ko/hello', + source: '@translated_docs/ko/hello.md', + title: 'Hello, World !', + version: undefined + }); + }); +}); diff --git a/v2/test/load/docs/order.test.js b/v2/test/load/docs/order.test.js new file mode 100644 index 000000000000..65b2d5388c22 --- /dev/null +++ b/v2/test/load/docs/order.test.js @@ -0,0 +1,85 @@ +import createOrder from '@lib/load/docs/order'; + +describe('createOrder', () => { + test('should populate docs index from multiple sidebars', () => { + const result = createOrder({ + docs: { + Category1: ['doc1', 'doc2'], + Category2: ['doc3', 'doc4'] + }, + otherDocs: { + Category1: ['doc5'] + } + }); + expect(result).toEqual({ + doc1: { + category: 'Category1', + next: 'doc2', + previous: undefined, + sidebar: 'docs' + }, + doc2: { + category: 'Category1', + next: 'doc3', + previous: 'doc1', + sidebar: 'docs' + }, + doc3: { + category: 'Category2', + next: 'doc4', + previous: 'doc2', + sidebar: 'docs' + }, + doc4: { + category: 'Category2', + next: undefined, + previous: 'doc3', + sidebar: 'docs' + }, + doc5: { + category: 'Category1', + next: undefined, + previous: undefined, + sidebar: 'otherDocs' + } + }); + }); + + test('should resolve docs from older versions', () => { + const result = createOrder({ + docs: { + Category1: ['doc1'] + }, + 'version-1.2.3-docs': { + Category1: ['version-1.2.3-doc2'], + Category2: ['version-1.2.3-doc1'] + } + }); + expect(result).toEqual({ + doc1: { + category: 'Category1', + next: undefined, + previous: undefined, + sidebar: 'docs' + }, + 'version-1.2.3-doc1': { + category: 'Category2', + next: undefined, + previous: 'version-1.2.3-doc2', + sidebar: 'version-1.2.3-docs' + }, + 'version-1.2.3-doc2': { + category: 'Category1', + next: 'version-1.2.3-doc1', + previous: undefined, + sidebar: 'version-1.2.3-docs' + } + }); + }); + + test('edge cases', () => { + expect(createOrder({})).toEqual({}); + expect(createOrder(null)).toEqual({}); + expect(createOrder(undefined)).toEqual({}); + }); +}); diff --git a/v2/test/load/docs/sidebars.test.js b/v2/test/load/docs/sidebars.test.js new file mode 100644 index 000000000000..6aebf8e966eb --- /dev/null +++ b/v2/test/load/docs/sidebars.test.js @@ -0,0 +1,46 @@ +import path from 'path'; +import loadSidebars from '@lib/load/docs/sidebars'; + +describe('loadSidebars', () => { + const fixtures = path.join(__dirname, '..', '__fixtures__'); + test('normal site with sidebars', () => { + const env = {}; + const siteDir = path.join(fixtures, 'simple-site'); + const result = loadSidebars({siteDir, env}); + expect(result).toMatchSnapshot(); + }); + + test('site without sidebars', () => { + const env = {}; + const siteDir = path.join(fixtures, 'bad-site'); + const result = loadSidebars({siteDir, env}); + expect(result).toMatchSnapshot(); + }); + + test('site with sidebars & versioned sidebars', () => { + const env = { + versioning: { + enabled: true, + versions: ['1.0.1', '1.0.0'] + } + }; + const siteDir = path.join(fixtures, 'versioned-site'); + const result = loadSidebars({siteDir, env}); + expect(result).toMatchSnapshot(); + }); + + test('site with missing versioned sidebars', () => { + const env = { + versioning: { + enabled: true, + versions: ['2.0.0'] + } + }; + const siteDir = path.join(fixtures, 'versioned-site'); + expect(() => { + loadSidebars({siteDir, env}); + }).toThrowErrorMatchingInlineSnapshot( + `"Failed to load versioned_sidebars/version-2.0.0-sidebars.json. It does not exist."` + ); + }); +}); diff --git a/v2/test/load/env.test.js b/v2/test/load/env.test.js new file mode 100644 index 000000000000..7724bf9186de --- /dev/null +++ b/v2/test/load/env.test.js @@ -0,0 +1,98 @@ +import path from 'path'; +import loadEnv from '@lib/load/env'; + +describe('loadEnv', () => { + test('website with both versioning & translation disabled', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'simple-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello' + }; + const env = loadEnv({siteDir, siteConfig}); + expect(env.versioning.enabled).toBe(false); + expect(env.translation.enabled).toBe(false); + expect(env).toMatchSnapshot(); + }); + + test('website with versioning enabled', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'versioned-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello' + }; + const env = loadEnv({siteDir, siteConfig}); + expect(env.versioning.enabled).toBe(true); + expect(env.translation.enabled).toBe(false); + expect(env).toMatchSnapshot(); + }); + + test('website with translation enabled', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'translated-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello', + defaultLanguage: 'en' + }; + const env = loadEnv({siteDir, siteConfig}); + expect(env.versioning.enabled).toBe(false); + expect(env.translation.enabled).toBe(true); + expect(env).toMatchSnapshot(); + }); + + test('website with versioning & translation enabled', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'transversioned-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello', + defaultLanguage: 'en' + }; + const env = loadEnv({siteDir, siteConfig}); + expect(env.versioning.enabled).toBe(true); + expect(env.translation.enabled).toBe(true); + expect(env).toMatchSnapshot(); + }); + + test('website with languages.js but no lang is enabled', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'bad-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello' + }; + expect(() => { + loadEnv({siteDir, siteConfig}); + }).toThrowErrorMatchingInlineSnapshot( + `"Please at least enable one language in 'languages.js'"` + ); + }); + + test('website with languages.js but no default language set', () => { + const siteDir = path.join(__dirname, '__fixtures__', 'translated-site'); + const siteConfig = { + baseUrl: '/', + organizationName: 'endiliey', + projectName: 'hello', + tagline: 'Hello World', + title: 'Hello' + }; + expect(() => { + loadEnv({siteDir, siteConfig}); + }).toThrowErrorMatchingInlineSnapshot( + `"Please set a default language in 'siteConfig.js' which is enabled in 'languages.js'"` + ); + }); +}); diff --git a/v2/test/load/pages.test.js b/v2/test/load/pages.test.js new file mode 100644 index 000000000000..4f43cf2779cf --- /dev/null +++ b/v2/test/load/pages.test.js @@ -0,0 +1,35 @@ +import loadPages from '@lib/load/pages'; +import path from 'path'; + +describe('loadPages', () => { + test('valid pages', async () => { + const pagesDir = path.join(__dirname, '__fixtures__', 'simple-pages'); + const pagesMetadatas = await loadPages(pagesDir); + pagesMetadatas.sort((a, b) => a.path > b.path); // because it was unordered + expect(pagesMetadatas).toEqual([ + { + path: '/', + source: 'index.js' + }, + { + path: '/bar/baz', + source: 'bar/baz.js' + }, + { + path: '/foo', + source: 'foo.js' + }, + { + path: '/foo/', + source: 'foo/index.js' + } + ]); + expect(pagesMetadatas).not.toBeNull(); + }); + + test('invalid pages', async () => { + const nonExistingDir = path.join(__dirname, '__fixtures__', 'nonExisting'); + const pagesMetadatas = await loadPages(nonExistingDir); + expect(pagesMetadatas).toEqual([]); + }); +}); diff --git a/v2/test/load/routes.test.js b/v2/test/load/routes.test.js new file mode 100644 index 000000000000..28ba6c19df5e --- /dev/null +++ b/v2/test/load/routes.test.js @@ -0,0 +1,24 @@ +import genRoutesConfig from '@lib/load/routes'; +import loadSetup from '../loadSetup'; + +describe('genRoutesConfig', () => { + test('simple website', async () => { + const props = await loadSetup('simple'); + await genRoutesConfig(props); + }); + + test('versioned website', async () => { + const props = await loadSetup('versioned'); + await genRoutesConfig(props); + }); + + test('versioned & translated website', async () => { + const props = await loadSetup('transversioned'); + await genRoutesConfig(props); + }); + + test('translated website', async () => { + const props = await loadSetup('translated'); + await genRoutesConfig(props); + }); +}); diff --git a/v2/test/load/utils.test.js b/v2/test/load/utils.test.js new file mode 100644 index 000000000000..8264c71e7e4b --- /dev/null +++ b/v2/test/load/utils.test.js @@ -0,0 +1,100 @@ +import path from 'path'; +import { + fileToPath, + fileToComponentName, + idx, + getSubFolder +} from '@lib/load/utils'; + +describe('load utils', () => { + test('fileToComponentName', () => { + const asserts = { + 'index.md': 'MDIndex', + 'hello/index.md': 'MDHelloIndex', + 'foo.md': 'MDFoo', + 'foo-bar.md': 'MDFooBar', + 'index.js': 'JSIndex', + 'foobar.js': 'JSFoobar', + 'docusaurus/index.js': 'JSDocusaurusIndex', + '234.md': 'MD234', + '2018-07-08-test.md': 'MD20180708Test', + '%asd.md': 'MDAsd' + }; + Object.keys(asserts).forEach(file => { + expect(fileToComponentName(file)).toBe(asserts[file]); + }); + }); + + test('fileToPath', () => { + const asserts = { + 'index.md': '/', + 'hello/index.md': '/hello/', + 'foo.md': '/foo', + 'foo/bar.md': '/foo/bar', + 'index.js': '/', + 'hello/index.js': '/hello/', + 'foo.js': '/foo', + 'foo/bar.js': '/foo/bar' + }; + Object.keys(asserts).forEach(file => { + expect(fileToPath(file)).toBe(asserts[file]); + }); + }); + + test('idx', () => { + const a = {}; + const b = {hello: 'world'}; + const env = { + translation: { + enabled: true, + enabledLanguages: [ + { + enabled: true, + name: 'English', + tag: 'en' + }, + { + enabled: true, + name: '日本語', + tag: 'ja' + } + ] + }, + versioning: { + enabled: false, + versions: [] + } + }; + const test = {arr: [1, 2, 3]}; + const variable = 'enabledLanguages'; + expect(idx(a, [('b', 'c')])).toBeUndefined(); + expect(idx(b, ['hello'])).toEqual('world'); + expect(idx(b, 'hello')).toEqual('world'); + expect(idx(env, 'typo')).toBeUndefined(); + expect(idx(env, 'versioning')).toEqual({ + enabled: false, + versions: [] + }); + expect(idx(env, ['translation', 'enabled'])).toEqual(true); + expect(idx(env, ['translation', variable]).map(lang => lang.tag)).toEqual([ + 'en', + 'ja' + ]); + expect(idx(test, ['arr', 0])).toEqual(1); + expect(idx(undefined)).toBeUndefined(); + expect(idx(null)).toBeNull(); + }); + + test('getSubFolder', () => { + const testA = path.join('folder', 'en', 'test.md'); + const testB = path.join('folder', 'ja', 'test.md'); + const testC = path.join('folder', 'ja', 'en', 'test.md'); + const testD = path.join('docs', 'ro', 'test.md'); + const testE = path.join('docs', 'test.md'); + expect(getSubFolder(testA, 'folder')).toBe('en'); + expect(getSubFolder(testB, 'folder')).toBe('ja'); + expect(getSubFolder(testC, 'folder')).toBe('ja'); + expect(getSubFolder(testD, 'docs')).toBe('ro'); + expect(getSubFolder(testE, 'docs')).toBeNull(); + }); +}); diff --git a/v2/test/loadSetup.js b/v2/test/loadSetup.js new file mode 100644 index 000000000000..b990354f6c9f --- /dev/null +++ b/v2/test/loadSetup.js @@ -0,0 +1,29 @@ +import path from 'path'; +import load from '@lib/load'; + +// Helper methods to setup dummy/ fake projects +const loadSetup = async name => { + const fixtures = path.join(__dirname, '__fixtures__'); + const simpleSite = path.join(fixtures, 'simple-site'); + const customSite = path.join(fixtures, 'custom-site'); + const versionedSite = path.join(fixtures, 'versioned-site'); + const translatedSite = path.join(fixtures, 'translated-site'); + const transversionedSite = path.join(fixtures, 'transversioned-site'); + + switch (name) { + case 'simple': + return load(simpleSite); + case 'custom': + return load(customSite); + case 'versioned': + return load(versionedSite); + case 'transversioned': + return load(transversionedSite); + case 'translated': + return load(translatedSite); + default: + return {}; + } +}; + +export default loadSetup; diff --git a/v2/test/webpack/base.test.js b/v2/test/webpack/base.test.js new file mode 100644 index 000000000000..1e17156703fd --- /dev/null +++ b/v2/test/webpack/base.test.js @@ -0,0 +1,21 @@ +import createBaseConfig from '@lib/webpack/base'; +import {validate} from 'webpack'; +import loadSetup from '../loadSetup'; + +describe('webpack base config', () => { + test('simple', async () => { + console.log = jest.fn(); + const props = await loadSetup('simple'); + const config = createBaseConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); + + test('custom', async () => { + console.log = jest.fn(); + const props = await loadSetup('custom'); + const config = createBaseConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); +}); diff --git a/v2/test/webpack/client.test.js b/v2/test/webpack/client.test.js new file mode 100644 index 000000000000..2f22a3ffd0d5 --- /dev/null +++ b/v2/test/webpack/client.test.js @@ -0,0 +1,21 @@ +import createClientConfig from '@lib/webpack/client'; +import {validate} from 'webpack'; +import loadSetup from '../loadSetup'; + +describe('webpack dev config', () => { + test('simple', async () => { + console.log = jest.fn(); + const props = await loadSetup('simple'); + const config = createClientConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); + + test('custom', async () => { + console.log = jest.fn(); + const props = await loadSetup('custom'); + const config = createClientConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); +}); diff --git a/v2/test/webpack/server.test.js b/v2/test/webpack/server.test.js new file mode 100644 index 000000000000..9e4abf7b9b8e --- /dev/null +++ b/v2/test/webpack/server.test.js @@ -0,0 +1,21 @@ +import createServerConfig from '@lib/webpack/server'; +import {validate} from 'webpack'; +import loadSetup from '../loadSetup'; + +describe('webpack production config', () => { + test('simple', async () => { + console.log = jest.fn(); + const props = await loadSetup('simple'); + const config = createServerConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); + + test('custom', async () => { + console.log = jest.fn(); + const props = await loadSetup('custom'); + const config = createServerConfig(props).toConfig(); + const errors = validate(config); + expect(errors.length).toBe(0); + }); +}); diff --git a/v2/test/webpack/utils.test.js b/v2/test/webpack/utils.test.js new file mode 100644 index 000000000000..8ffd610fbe4e --- /dev/null +++ b/v2/test/webpack/utils.test.js @@ -0,0 +1,107 @@ +import {validate} from 'webpack'; +import path from 'path'; +import Config from 'webpack-chain'; + +import {applyConfigureWebpack, applyChainWebpack} from '@lib/webpack/utils'; + +describe('extending generated webpack config', () => { + test('direct mutation on generated webpack config object', async () => { + // fake generated webpack config + let config = { + output: { + path: __dirname, + filename: 'bundle.js' + } + }; + + /* eslint-disable */ + const configureWebpack = (generatedConfig, isServer) => { + if (!isServer) { + generatedConfig.entry = 'entry.js'; + generatedConfig.output = { + path: path.join(__dirname, 'dist'), + filename: 'new.bundle.js' + }; + } + }; + /* eslint-enable */ + + config = applyConfigureWebpack(configureWebpack, config, false); + expect(config).toEqual({ + entry: 'entry.js', + output: { + path: path.join(__dirname, 'dist'), + filename: 'new.bundle.js' + } + }); + const errors = validate(config); + + console.log(errors); + expect(errors.length).toBe(0); + }); + + test('webpack-merge with user webpack config object', async () => { + // fake generated webpack config + let config = { + output: { + path: __dirname, + filename: 'bundle.js' + } + }; + + /* eslint-disable */ + const configureWebpack = { + entry: 'entry.js', + output: { + path: path.join(__dirname, 'dist'), + filename: 'new.bundle.js' + } + }; + /* eslint-enable */ + + config = applyConfigureWebpack(configureWebpack, config, false); + expect(config).toEqual({ + entry: 'entry.js', + output: { + path: path.join(__dirname, 'dist'), + filename: 'new.bundle.js' + } + }); + const errors = validate(config); + expect(errors.length).toBe(0); + }); + + test('use webpack-chain API', async () => { + // fake generated webpack config in webpack-chain format + let config = new Config(); + config.output.path(__dirname).filename('bundle.js'); + + // user chainWebpack + /* eslint-disable */ + const chainWebpack = (oldConfig, isServer) => { + if (!isServer) { + oldConfig.entry('main').add('./entry.js'); + oldConfig.output + .path(path.join(__dirname, 'dist')) + .filename('new.bundle.js'); + } + }; + /* eslint-enable */ + + applyChainWebpack(chainWebpack, config, false); + + // transform to webpack configuration object format + config = config.toConfig(); + expect(config).toEqual({ + output: { + path: path.join(__dirname, 'dist'), + filename: 'new.bundle.js' + }, + entry: { + main: ['./entry.js'] + } + }); + const errors = validate(config); + expect(errors.length).toBe(0); + }); +}); diff --git a/v2/website/blog/2018-08-08-sakura.md b/v2/website/blog/2018-08-08-sakura.md new file mode 100644 index 000000000000..68668e018b15 --- /dev/null +++ b/v2/website/blog/2018-08-08-sakura.md @@ -0,0 +1,11 @@ +--- +title: Sakura +author: Endilie +authorURL: https://github.com/endiliey +authorFBID: 100000251103620 +authorTwitter: endiliey +--- + +![Sakura](/img/sakura.png) + +Sakura Miyawaki (宮脇 咲良 Miyawaki Sakura, born 19 March 1998) is a Japanese singer and a member of the Japanese idol girl groups HKT48 and AKB48. She is vice-captain of HKT48's Team KIV and former concurrent member of AKB48's Team A. \ No newline at end of file diff --git a/v2/website/components/Tictactoe/board.js b/v2/website/components/Tictactoe/board.js new file mode 100644 index 000000000000..a189cb5a45f8 --- /dev/null +++ b/v2/website/components/Tictactoe/board.js @@ -0,0 +1,36 @@ +import React from 'react'; +import Square from './square'; +import styles from './styles.css'; + +export default class Board extends React.Component { + renderSquare(i) { + return ( + this.props.onClick(i)} + /> + ); + } + + render() { + return ( +
    +
    + {this.renderSquare(0)} + {this.renderSquare(1)} + {this.renderSquare(2)} +
    +
    + {this.renderSquare(3)} + {this.renderSquare(4)} + {this.renderSquare(5)} +
    +
    + {this.renderSquare(6)} + {this.renderSquare(7)} + {this.renderSquare(8)} +
    +
    + ); + } +} diff --git a/v2/website/components/Tictactoe/index.js b/v2/website/components/Tictactoe/index.js new file mode 100644 index 000000000000..9602eaa1e7b4 --- /dev/null +++ b/v2/website/components/Tictactoe/index.js @@ -0,0 +1,106 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; +import Board from './board'; +import styles from './styles.css'; + +class Game extends React.Component { + constructor(props) { + super(props); + this.state = { + history: [ + { + squares: Array(9).fill(null) + } + ], + stepNumber: 0, + xIsNext: true + }; + } + + calculateWinner(squares) { + const lines = [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + [0, 3, 6], + [1, 4, 7], + [2, 5, 8], + [0, 4, 8], + [2, 4, 6] + ]; + for (let i = 0; i < lines.length; i++) { + const [a, b, c] = lines[i]; + if ( + squares[a] && + squares[a] === squares[b] && + squares[a] === squares[c] + ) { + return squares[a]; + } + } + return null; + } + + handleClick(i) { + const history = this.state.history.slice(0, this.state.stepNumber + 1); + const current = history[history.length - 1]; + const squares = current.squares.slice(); + if (this.calculateWinner(squares) || squares[i]) { + return; + } + squares[i] = this.state.xIsNext ? 'X' : 'O'; + this.setState({ + history: history.concat([ + { + squares: squares + } + ]), + stepNumber: history.length, + xIsNext: !this.state.xIsNext + }); + } + + jumpTo(step) { + this.setState({ + stepNumber: step, + xIsNext: step % 2 === 0 + }); + } + + render() { + const history = this.state.history; + const current = history[this.state.stepNumber]; + const winner = this.calculateWinner(current.squares); + + const moves = history.map((step, move) => { + const desc = move ? 'Go to move #' + move : 'Go to game start'; + return ( +
  • + +
  • + ); + }); + + let status; + if (winner) { + status = 'Winner: ' + winner; + } else { + status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O'); + } + + return ( +
    +
    + this.handleClick(i)} /> +
    +
    +
    {status}
    +
      {moves}
    +
    +
    + ); + } +} + +export default Game; diff --git a/v2/website/components/Tictactoe/square.js b/v2/website/components/Tictactoe/square.js new file mode 100644 index 000000000000..1fed93a2707c --- /dev/null +++ b/v2/website/components/Tictactoe/square.js @@ -0,0 +1,10 @@ +import React from 'react'; +import styles from './styles.css'; + +export default props => { + return ( + + ); +}; diff --git a/v2/website/components/Tictactoe/styles.css b/v2/website/components/Tictactoe/styles.css new file mode 100644 index 000000000000..5d5a305eba68 --- /dev/null +++ b/v2/website/components/Tictactoe/styles.css @@ -0,0 +1,44 @@ +.boardRow:after { + clear: both; + content: ""; + display: table; +} + +.status { + margin-bottom: 10px; +} + +.square { + background: #fff; + border: 1px solid #999; + float: left; + font-size: 24px; + font-weight: bold; + line-height: 34px; + height: 34px; + margin-right: -1px; + margin-top: -1px; + padding: 0; + text-align: center; + width: 34px; +} + +.square:focus { + outline: none; +} + +.game { + display: flex; + flex-direction: row; + margin-left: auto; + margin-right: auto; + justify-content: center; +} + +.gameInfo { + margin-left: 20px; +} + +.gameBoard { + margin-left: 10px; +} \ No newline at end of file diff --git a/v2/website/components/Todo/TodoItem.js b/v2/website/components/Todo/TodoItem.js new file mode 100644 index 000000000000..a6a68879d586 --- /dev/null +++ b/v2/website/components/Todo/TodoItem.js @@ -0,0 +1,94 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import classNames from 'classnames'; + +const ESCAPE_KEY = 27; +const ENTER_KEY = 13; + +export default class TodoItem extends React.Component { + constructor(props) { + super(props); + this.state = { + editText: props.todo.title + }; + this.handleEdit = this.handleEdit.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + this.handleKeyDown = this.handleKeyDown.bind(this); + this.handleChange = this.handleChange.bind(this); + } + + shouldComponentUpdate(nextProps, nextState) { + return ( + nextProps.todo !== this.props.todo || + nextProps.editing !== this.props.editing || + nextState.editText !== this.state.editText + ); + } + + componentDidUpdate(prevProps) { + if (!prevProps.editing && this.props.editing) { + const node = ReactDOM.findDOMNode(this.refs.editField); + node.focus(); + node.setSelectionRange(node.value.length, node.value.length); + } + } + + handleSubmit() { + const val = this.state.editText.trim(); + if (val) { + this.props.onSave(val); + this.setState({editText: val}); + } else { + this.props.onDestroy(); + } + } + + handleEdit() { + this.props.onEdit(); + this.setState({editText: this.props.todo.title}); + } + + handleKeyDown(event) { + if (event.which === ESCAPE_KEY) { + this.setState({editText: this.props.todo.title}); + this.props.onCancel(event); + } else if (event.which === ENTER_KEY) { + this.handleSubmit(event); + } + } + + handleChange(event) { + if (this.props.editing) { + this.setState({editText: event.target.value}); + } + } + + render() { + return ( +
  • +
    + + +
    + +
  • + ); + } +} diff --git a/v2/website/components/Todo/TodoList.js b/v2/website/components/Todo/TodoList.js new file mode 100644 index 000000000000..070a815c16de --- /dev/null +++ b/v2/website/components/Todo/TodoList.js @@ -0,0 +1,29 @@ +import React from 'react'; +import TodoItem from './TodoItem'; + +export default function TodoList(props) { + const todoItems = props.todos.map(todo => ( + { + props.onToggle(todo); + }} + onDestroy={() => { + props.onDestroy(todo); + }} + onEdit={() => { + props.onEdit(todo); + }} + editing={props.editing(todo)} + onSave={text => { + props.onSave(todo, text); + }} + onCancel={() => { + props.onCancel(); + }} + /> + )); + + return
    {todoItems}
    ; +} diff --git a/v2/website/components/Todo/index.js b/v2/website/components/Todo/index.js new file mode 100644 index 000000000000..f0da5a519ba7 --- /dev/null +++ b/v2/website/components/Todo/index.js @@ -0,0 +1,205 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import TodoList from './TodoList'; + +const ENTER_KEY = 13; + +function uuid() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`; +} + +const todos = [ + { + id: 'ed0bcc48-bbbe-5f06-c7c9-2ccb0456ceba', + title: 'Build this Todo App.', + completed: true + }, + { + id: '42582304-3c6e-311e-7f88-7e3791caf88c', + title: '?????', + completed: true + }, + { + id: '1cf63885-5f75-8deb-19dc-9b6765deae6c', + title: '1,000 stars on GitHub.', + completed: false + }, + { + id: '63a871b2-0b6f-4427-9c35-304bc680a4b7', + title: 'Write a popular medium post.', + completed: false + }, + { + id: '63a871b2-0b6f-4422-9c35-304bc680a4b7', + title: 'Contribute to open source.', + completed: false + }, + { + id: '036af7f9-1181-fb8f-258f-3f06034c020f', + title: 'Write a blog post.', + completed: false + } +]; + +class TodoApp extends React.Component { + constructor(props) { + super(props); + + this.state = { + editing: null, + newTodo: '', + todos: todos + }; + } + + handleChange(event) { + this.setState({newTodo: event.target.value}); + } + + handleNewTodoKeyDown(event) { + if (event.keyCode !== ENTER_KEY) { + return; + } + + event.preventDefault(); + + const val = this.state.newTodo.trim(); + + if (val) { + this.setState({ + todos: this.state.todos.concat({ + id: uuid(), + title: val, + completed: false + }), + newTodo: '' + }); + } + } + + toggleAll(event) { + const {checked} = event.target; + this.setState({ + todos: this.state.todos.map(todo => + Object.assign({}, todo, {completed: checked}) + ) + }); + } + + toggle(todoToToggle) { + this.setState({ + todos: this.state.todos.map(todo => { + if (todo === todoToToggle) { + return Object.assign({}, todo, { + completed: !todo.completed + }); + } + return todo; + }) + }); + } + + destroy(passedTodo) { + this.setState({ + todos: this.state.todos.filter(todo => todo !== passedTodo) + }); + } + + edit(todo) { + this.setState({editing: todo.id}); + } + + save(todoToSave, text) { + this.setState({ + todos: this.state.todos.map(todo => { + if (todo === todoToSave) { + return Object.assign({}, todo, { + title: text + }); + } + return todo; + }), + editing: null + }); + } + + cancel() { + this.setState({editing: null}); + } + + clearCompleted() { + this.setState({ + todos: this.state.todos.filter(todo => !todo.completed) + }); + } + + render() { + let main; + const {todos} = this.state; + + const activeTodoCount = todos.reduce( + (accum, todo) => (todo.completed ? accum : accum + 1), + 0 + ); + + if (todos.length) { + main = ( +
    + +
      + { + this.toggle(todo); + }} + onDestroy={todo => { + this.destroy(todo); + }} + onEdit={todo => { + this.edit(todo); + }} + editing={todo => this.state.editing === todo.id} + onSave={(todo, text) => { + this.save(todo, text); + }} + onCancel={() => this.cancel()} + /> +
    +
    + ); + } + + return ( +
    +
    +

    todos

    + { + this.handleNewTodoKeyDown(event); + }} + onChange={event => { + this.handleChange(event); + }} + autoFocus + /> +
    + {main} +
    + ); + } +} + +export default TodoApp; diff --git a/v2/website/package.json b/v2/website/package.json new file mode 100644 index 000000000000..050e454bfbc5 --- /dev/null +++ b/v2/website/package.json @@ -0,0 +1,9 @@ +{ + "scripts": { + "start": "node ../bin/munseo start", + "build": "node ../bin/munseo build" + }, + "dependencies": { + "munseo": "../../munseo/" + } +} \ No newline at end of file diff --git a/v2/website/pages/index.js b/v2/website/pages/index.js new file mode 100644 index 000000000000..951a4b8598b4 --- /dev/null +++ b/v2/website/pages/index.js @@ -0,0 +1,18 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; +import Todo from '@site/components/Todo'; + +export default class Home extends React.Component { + render() { + return ( + + + Todo App + + + + + ); + } +} diff --git a/v2/website/pages/tictactoe.js b/v2/website/pages/tictactoe.js new file mode 100644 index 000000000000..41072c4387f1 --- /dev/null +++ b/v2/website/pages/tictactoe.js @@ -0,0 +1,17 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import Layout from '@theme/Layout'; +import Tictactoe from '@site/components/Tictactoe'; + +export default class Home extends React.Component { + render() { + return ( + + + Tic Tac Toe + + + + ); + } +} diff --git a/v2/website/pages/youtube.js b/v2/website/pages/youtube.js new file mode 100644 index 000000000000..04a7709620f3 --- /dev/null +++ b/v2/website/pages/youtube.js @@ -0,0 +1,33 @@ +import React from 'react'; +import Helmet from 'react-helmet'; +import YouTube from 'react-youtube'; +import Layout from '@theme/Layout'; + +export default class Player extends React.Component { + render() { + const opts = { + height: '390', + width: '640', + playerVars: { + autoplay: 1 + } + }; + + return ( + + + My Youtube + +

    + {/* this is a React-youtube component */ } + +

    +
    + ); + } + + _onReady(event) { + // access to player in all event handlers via event.target + event.target.playVideo(); + } +} diff --git a/v2/website/sidebars.json b/v2/website/sidebars.json new file mode 100644 index 000000000000..0c6122112435 --- /dev/null +++ b/v2/website/sidebars.json @@ -0,0 +1,13 @@ +{ + "docs": { + "Foo": [ + "foo/bar", + "foo/baz" + ], + "Endi": [ + "docusaurus", + "highlight", + "hello" + ] + } +} diff --git a/v2/website/siteConfig.js b/v2/website/siteConfig.js new file mode 100644 index 000000000000..7155f839a692 --- /dev/null +++ b/v2/website/siteConfig.js @@ -0,0 +1,7 @@ +module.exports = { + title: 'Munseo', + tagline: '📝⚡️ Transform your document (문서) to a website', + organizationName: 'endiliey', + projectName: 'munseo', + baseUrl: '/' +}; diff --git a/v2/website/static/css/basic.css b/v2/website/static/css/basic.css new file mode 100644 index 000000000000..e6e089cbfa53 --- /dev/null +++ b/v2/website/static/css/basic.css @@ -0,0 +1,378 @@ +html, +body { + margin: 0; + padding: 0; +} + +button { + margin: 0; + padding: 0; + border: 0; + background: none; + font-size: 100%; + vertical-align: baseline; + font-family: inherit; + font-weight: inherit; + color: inherit; + -webkit-appearance: none; + appearance: none; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +body { + font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.4em; + background: #f5f5f5; + color: #4d4d4d; + min-width: 230px; + max-width: 550px; + margin: 0 auto; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; + font-weight: 300; +} + +button, +input[type="checkbox"] { + outline: none; +} + +.hidden { + display: none; +} + +.todoapp { + background: #fff; + margin: 130px 0 40px 0; + position: relative; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), + 0 25px 50px 0 rgba(0, 0, 0, 0.1); +} + +.todoapp input::-webkit-input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::-moz-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp input::input-placeholder { + font-style: italic; + font-weight: 300; + color: #e6e6e6; +} + +.todoapp h1 { + position: absolute; + top: -155px; + width: 100%; + font-size: 100px; + font-weight: 100; + text-align: center; + color: rgba(175, 47, 47, 0.15); + -webkit-text-rendering: optimizeLegibility; + -moz-text-rendering: optimizeLegibility; + text-rendering: optimizeLegibility; +} + +.new-todo, +.edit { + position: relative; + margin: 0; + width: 100%; + font-size: 24px; + font-family: inherit; + font-weight: inherit; + line-height: 1.4em; + border: 0; + outline: none; + color: inherit; + padding: 6px; + border: 1px solid #999; + box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2); + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + font-smoothing: antialiased; +} + +.new-todo { + padding: 16px 16px 16px 60px; + border: none; + background: rgba(0, 0, 0, 0.003); + box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03); +} + +.main { + position: relative; + z-index: 2; + border-top: 1px solid #e6e6e6; +} + +label[for='toggle-all'] { + display: none; +} + +.toggle-all { + position: absolute; + top: -55px; + left: -12px; + width: 60px; + height: 34px; + text-align: center; + border: none; /* Mobile Safari */ +} + +.toggle-all:before { + content: '❯'; + font-size: 22px; + color: #e6e6e6; + padding: 10px 27px 10px 27px; +} + +.toggle-all:checked:before { + color: #737373; +} + +.todo-list { + margin: 0; + padding: 0; + list-style: none; +} + +.todo-list li { + position: relative; + font-size: 24px; + border-bottom: 1px solid #ededed; +} + +.todo-list li:last-child { + border-bottom: none; +} + +.todo-list li.editing { + border-bottom: none; + padding: 0; +} + +.todo-list li.editing .edit { + display: block; + width: 506px; + padding: 13px 17px 12px 17px; + margin: 0 0 0 43px; +} + +.todo-list li.editing .view { + display: none; +} + +.todo-list li .toggle { + text-align: center; + width: 40px; + /* auto, since non-WebKit browsers doesn't support input styling */ + height: auto; + position: absolute; + top: 0; + bottom: 0; + margin: auto 0; + border: none; /* Mobile Safari */ + -webkit-appearance: none; + appearance: none; +} + +.todo-list li .toggle:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li .toggle:checked:after { + content: url('data:image/svg+xml;utf8,'); +} + +.todo-list li label { + white-space: pre-line; + word-break: break-all; + padding: 15px 60px 15px 15px; + margin-left: 45px; + display: block; + line-height: 1.2; + transition: color 0.4s; +} + +.todo-list li.completed label { + color: #d9d9d9; + text-decoration: line-through; +} + +.todo-list li .destroy { + display: none; + position: absolute; + top: 0; + right: 10px; + bottom: 0; + width: 40px; + height: 40px; + margin: auto 0; + font-size: 30px; + color: #cc9a9a; + margin-bottom: 11px; + transition: color 0.2s ease-out; +} + +.todo-list li .destroy:hover { + color: #af5b5e; +} + +.todo-list li .destroy:after { + content: '×'; +} + +.todo-list li:hover .destroy { + display: block; +} + +.todo-list li .edit { + display: none; +} + +.todo-list li.editing:last-child { + margin-bottom: -1px; +} + +.footer { + color: #777; + padding: 10px 15px; + height: 20px; + text-align: center; + border-top: 1px solid #e6e6e6; +} + +.footer:before { + content: ''; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 50px; + overflow: hidden; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + 0 8px 0 -3px #f6f6f6, + 0 9px 1px -3px rgba(0, 0, 0, 0.2), + 0 16px 0 -6px #f6f6f6, + 0 17px 2px -6px rgba(0, 0, 0, 0.2); +} + +.todo-count { + float: left; + text-align: left; +} + +.todo-count strong { + font-weight: 300; +} + +.filters { + margin: 0; + padding: 0; + list-style: none; + position: absolute; + right: 0; + left: 0; +} + +.filters li { + display: inline; +} + +.filters li a { + color: inherit; + margin: 3px; + padding: 3px 7px; + text-decoration: none; + border: 1px solid transparent; + border-radius: 3px; +} + +.filters li a.selected, +.filters li a:hover { + border-color: rgba(175, 47, 47, 0.1); +} + +.filters li a.selected { + border-color: rgba(175, 47, 47, 0.2); +} + +.clear-completed, +html .clear-completed:active { + float: right; + position: relative; + line-height: 20px; + text-decoration: none; + cursor: pointer; + position: relative; +} + +.clear-completed:hover { + text-decoration: underline; +} + +.info { + margin: 65px auto 0; + color: #bfbfbf; + font-size: 10px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-align: center; +} + +.info p { + line-height: 1; +} + +.info a { + color: inherit; + text-decoration: none; + font-weight: 400; +} + +.info a:hover { + text-decoration: underline; +} + +/* + Hack to remove background from Mobile Safari. + Can't use it globally since it destroys checkboxes in Firefox +*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .toggle-all, + .todo-list li .toggle { + background: none; + } + + .todo-list li .toggle { + height: 40px; + } + + .toggle-all { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-appearance: none; + appearance: none; + } +} + +@media (max-width: 430px) { + .footer { + height: 50px; + } + + .filters { + bottom: 10px; + } +} diff --git a/v2/website/static/img/sakura.png b/v2/website/static/img/sakura.png new file mode 100644 index 000000000000..e10909398bc2 Binary files /dev/null and b/v2/website/static/img/sakura.png differ diff --git a/v2/website/static/img/slash-introducing.png b/v2/website/static/img/slash-introducing.png new file mode 100644 index 000000000000..839457886898 Binary files /dev/null and b/v2/website/static/img/slash-introducing.png differ diff --git a/v2/yarn.lock b/v2/yarn.lock new file mode 100644 index 000000000000..d2ac6d5e74c9 --- /dev/null +++ b/v2/yarn.lock @@ -0,0 +1,7306 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.54" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.54.tgz#0024f96fdf7028a21d68e273afd4e953214a1ead" + dependencies: + "@babel/highlight" "7.0.0-beta.54" + +"@babel/highlight@7.0.0-beta.54": + version "7.0.0-beta.54" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.54.tgz#155d507358329b8e7068970017c3fd74a9b08584" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a" + +"@shellscape/koa-send@^4.1.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@shellscape/koa-send/-/koa-send-4.1.3.tgz#1a7c8df21f63487e060b7bfd8ed82e1d3c4ae0b0" + dependencies: + debug "^2.6.3" + http-errors "^1.6.1" + mz "^2.6.0" + resolve-path "^1.3.3" + +"@shellscape/koa-static@^4.0.4": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@shellscape/koa-static/-/koa-static-4.0.5.tgz#b329b55bfd41056a6981c584ae6bace30b5b6b3b" + dependencies: + "@shellscape/koa-send" "^4.1.0" + debug "^2.6.8" + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + +"@webassemblyjs/ast@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" + dependencies: + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/floating-point-hex-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" + +"@webassemblyjs/helper-api-error@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" + +"@webassemblyjs/helper-buffer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" + dependencies: + debug "^3.1.0" + +"@webassemblyjs/helper-code-frame@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" + dependencies: + "@webassemblyjs/wast-printer" "1.5.13" + +"@webassemblyjs/helper-fsm@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" + +"@webassemblyjs/helper-module-context@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" + dependencies: + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" + +"@webassemblyjs/helper-wasm-section@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/ieee754@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" + dependencies: + ieee754 "^1.1.11" + +"@webassemblyjs/leb128@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" + dependencies: + long "4.0.0" + +"@webassemblyjs/utf8@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" + +"@webassemblyjs/wasm-edit@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/helper-wasm-section" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + "@webassemblyjs/wast-printer" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-gen@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-opt@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wast-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/floating-point-hex-parser" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-code-frame" "1.5.13" + "@webassemblyjs/helper-fsm" "1.5.13" + long "^3.2.0" + mamacro "^0.0.3" + +"@webassemblyjs/wast-printer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + long "^3.2.0" + +"@webpack-contrib/cli-utils@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@webpack-contrib/cli-utils/-/cli-utils-1.0.2.tgz#9618b68a79f5b3462224e0ecca416cc812b65054" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + camelize "^1.0.0" + chalk "^2.4.1" + decamelize "^2.0.0" + loader-utils "^1.1.0" + meant "^1.0.1" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.2.0" + +"@webpack-contrib/config-loader@^1.1.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz#5b3dd474e207437939d294d200c68b7b00008e04" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + chalk "^2.1.0" + cosmiconfig "^5.0.2" + is-plain-obj "^1.1.0" + loud-rejection "^1.6.0" + merge-options "^1.0.1" + minimist "^1.2.0" + resolve "^1.6.0" + webpack-log "^1.1.2" + +"@webpack-contrib/schema-utils@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chalk "^2.3.2" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.1.2" + +abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + dependencies: + acorn "^5.0.0" + +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + +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@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2: + version "5.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + +address@1.0.3, address@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.0.1, ajv@^6.1.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.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-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +app-root-path@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" + +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + dependencies: + default-require-extensions "^2.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +arch@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +argparse@~0.1.15: + version "0.1.16" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +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-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +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-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + 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@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +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" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.4.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + +autolinker@~0.15.0: + version "0.15.3" + resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-0.15.3.tgz#342417d8f2f3461b14cf09088d5edf8791dc9832" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" + +axobject-query@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.1.tgz#05dfa705ada8ad9db993fa6896f22d395b0b0a07" + dependencies: + ast-types-flow "0.0.7" + +babel-code-frame@6.26.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877" + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + +babel-loader@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-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-dynamic-import-node@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.0.0.tgz#d6fc3f6c5e3bdc34e49c15faca7ce069755c0a57" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + object.assign "^4.1.0" + +babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" + +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-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-flow@^6.18.0: + 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.13.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-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^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.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +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, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +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.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +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.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^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-react-display-name@^6.23.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + 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.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^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.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.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.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.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.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-jest@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" + dependencies: + babel-plugin-jest-hoist "^23.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-preset-react@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +bluebird@^3.0.5, bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + 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" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +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.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + 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.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" + +buffer-xor@^1.0.3: + 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: + 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" + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + +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" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + +caniuse-lite@^1.0.30000844: + version "1.0.30000865" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz#70026616e8afe6e1442f8bb4e1092987d81a2f25" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@1.1.3, 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" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chokidar@^2.0.2, chokidar@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + dependencies: + tslib "^1.9.0" + +ci-info@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + +clean-css@4.1.x: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + +clean-webpack-plugin@^0.1.19: + version "0.1.19" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" + dependencies: + rimraf "^2.6.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +clipboard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +clipboardy@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + dependencies: + arch "^2.1.0" + execa "^0.8.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" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + 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" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + dependencies: + color-name "1.1.1" + +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +combined-stream@1.0.6, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.16.x, commander@^2.11.0, commander@^2.16.0, commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +compare-versions@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +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.5.0, concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-history-api-fallback@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +consola@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/consola/-/consola-1.4.1.tgz#4b1c6259c8db23f51e7cfb68cd383ec5ee298f0e" + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + lodash "^4.17.5" + std-env "^1.1.0" + +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" + +content-disposition@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookies@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + +core-util-is@1.0.2, 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" + +cosmiconfig@^5.0.2: + version "5.0.5" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + 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" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +css-loader@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.0.tgz#9f46aaa5ca41dbe31860e3b62b8e23c42916bf56" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select@^1.1.0, css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + +cssstyle@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.0.0.tgz#79b16d51ec5591faec60e688891f15d2a5705129" + dependencies: + cssom "0.3.x" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + +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" + +data-urls@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" + dependencies: + abab "^1.0.4" + whatwg-mimetype "^2.0.0" + whatwg-url "^6.4.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.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@^1.0.1, deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + dependencies: + strip-bom "^3.0.0" + +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" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +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" + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@^1.1.2, depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +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" + +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" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +doctrine@1.5.0: + 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" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +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" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.3.47: + version "1.3.52" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz#d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + +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" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +error-inject@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +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.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.45" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +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.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.9.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.0.0.tgz#2ee6279c4891128e49d6445b24aa13c2d1a21450" + dependencies: + eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-airbnb@17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.0.0.tgz#1bb8c4255483320bb68c3b614f71ae6058b0b2db" + dependencies: + eslint-config-airbnb-base "^13.0.0" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + +eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-import@^2.12.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed" + dependencies: + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.2.0" + has "^1.0.1" + lodash "^4.17.4" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + resolve "^1.6.0" + +eslint-plugin-jsx-a11y@^6.0.3: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz#7bf56dbe7d47d811d14dbb3ddff644aa656ce8e1" + dependencies: + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.1" + damerau-levenshtein "^1.0.4" + emoji-regex "^6.5.1" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + +eslint-plugin-react@^7.9.1: + version "7.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50" + dependencies: + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.2" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.1.0" + doctrine "^2.1.0" + eslint-scope "^3.7.1" + eslint-visitor-keys "^1.0.0" + espree "^3.5.4" + esquery "^1.0.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^1.0.1" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "4.0.2" + text-table "~0.2.0" + +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + dependencies: + acorn "^5.5.0" + acorn-jsx "^3.0.0" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esquery@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +eval@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.2.tgz#9f7103284c105a66df4030b2b3273165837013da" + dependencies: + require-like ">= 0.1.1" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + dependencies: + merge "^1.2.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exenv@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +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-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +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" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +expect@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.4.0.tgz#6da4ecc99c1471253e7288338983ad1ebadb60c3" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.2.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +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" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs@^0.8.16: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +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.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +filesize@3.5.11: + version "3.5.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flush-write-stream@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +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.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +front-matter@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.3.0.tgz#7203af896ce357ee04e2aa45169ea91ed7f67504" + dependencies: + js-yaml "^3.10.0" + +fs-extra@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +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.2.2, fsevents@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + 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" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +global-modules@1.0.0, global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.0.1: + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +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" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + dependencies: + delegate "^3.1.2" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +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" + +handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +highlight.js@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + +history@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + resolve-pathname "^2.2.0" + value-equal "^0.4.0" + warning "^3.0.0" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^2.5.0: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + +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" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +html-minifier@^3.2.3: + version "3.5.19" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.16.x" + he "1.1.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-assert@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" + +http-errors@^1.6.1, http-errors@^1.6.3, http-errors@~1.6.1, http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.11, ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.3, ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +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.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + 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.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@3.3.0, inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + 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-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.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.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + +is-ci@^1.0.10, is-ci@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + dependencies: + ci-info "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +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-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.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-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +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-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + +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-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +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.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.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-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-root@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + 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-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +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" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isomorphic-fetch@^2.1.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.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + dependencies: + async "^2.1.4" + compare-versions "^3.1.0" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" + +istanbul-lib-hook@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" + dependencies: + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + dependencies: + handlebars "^4.0.3" + +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + +jest-changed-files@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" + dependencies: + throat "^4.0.0" + +jest-cli@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.4.2.tgz#49d56bcfe6cf01871bfcc4a0494e08edaf2b61d0" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.3.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" + jest-changed-files "^23.4.2" + jest-config "^23.4.2" + jest-environment-jsdom "^23.4.0" + jest-get-type "^22.1.0" + jest-haste-map "^23.4.1" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve-dependencies "^23.4.2" + jest-runner "^23.4.2" + jest-runtime "^23.4.2" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + jest-validate "^23.4.0" + jest-watcher "^23.4.0" + jest-worker "^23.2.0" + micromatch "^2.3.11" + node-notifier "^5.2.1" + prompts "^0.1.9" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^11.0.0" + +jest-config@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.4.2.tgz#62a105e14b8266458f2bf4d32403b2c44418fa77" + dependencies: + babel-core "^6.0.0" + babel-jest "^23.4.2" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.4.2" + jest-regex-util "^23.3.0" + jest-resolve "^23.4.1" + jest-util "^23.4.0" + jest-validate "^23.4.0" + pretty-format "^23.2.0" + +jest-diff@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.2.0" + +jest-docblock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" + dependencies: + detect-newline "^2.1.0" + +jest-each@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.4.0.tgz#2fa9edd89daa1a4edc9ff9bf6062a36b71345143" + dependencies: + chalk "^2.0.1" + pretty-format "^23.2.0" + +jest-environment-jsdom@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jsdom "^11.5.1" + +jest-environment-node@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + +jest-haste-map@^23.4.1: + version "23.4.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.4.1.tgz#43a174ba7ac079ae1dd74eaf5a5fe78989474dd2" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^23.2.0" + jest-serializer "^23.0.1" + jest-worker "^23.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.4.2.tgz#2fbf52f93e43ed4c5e7326a90bb1d785be4321ac" + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.4.0" + is-generator-fn "^1.0.0" + jest-diff "^23.2.0" + jest-each "^23.4.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + pretty-format "^23.2.0" + +jest-leak-detector@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d" + dependencies: + pretty-format "^23.2.0" + +jest-matcher-utils@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.2.0" + +jest-message-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" + +jest-regex-util@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" + +jest-resolve-dependencies@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.4.2.tgz#0675ba876a5b819deffc449ad72e9985c2592048" + dependencies: + jest-regex-util "^23.3.0" + jest-snapshot "^23.4.2" + +jest-resolve@^23.4.1: + version "23.4.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.4.1.tgz#7f3c17104732a2c0c940a01256025ed745814982" + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + +jest-runner@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.4.2.tgz#579a88524ac52c846075b0129a21c7b483e75a7e" + dependencies: + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^23.4.2" + jest-docblock "^23.2.0" + jest-haste-map "^23.4.1" + jest-jasmine2 "^23.4.2" + jest-leak-detector "^23.2.0" + jest-message-util "^23.4.0" + jest-runtime "^23.4.2" + jest-util "^23.4.0" + jest-worker "^23.2.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.4.2.tgz#00c3bb8385253d401a394a27d1112d3615e5a65c" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.1.6" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.11" + jest-config "^23.4.2" + jest-haste-map "^23.4.1" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.4.1" + jest-snapshot "^23.4.2" + jest-util "^23.4.0" + jest-validate "^23.4.0" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^11.0.0" + +jest-serializer@^23.0.1: + version "23.0.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + +jest-snapshot@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.4.2.tgz#8fa6130feb5a527dac73e5fa80d86f29f7c42ab6" + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.2.0" + jest-matcher-utils "^23.2.0" + jest-message-util "^23.4.0" + jest-resolve "^23.4.1" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.2.0" + semver "^5.5.0" + +jest-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^23.4.0" + mkdirp "^0.5.1" + slash "^1.0.0" + source-map "^0.6.0" + +jest-validate@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.4.0.tgz#d96eede01ef03ac909c009e9c8e455197d48c201" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.2.0" + +jest-watcher@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + string-length "^2.0.0" + +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + dependencies: + merge-stream "^1.0.1" + +jest@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-23.4.2.tgz#1fae3ed832192143070ae85156b25cea891a1260" + dependencies: + import-local "^1.0.0" + jest-cli "^23.4.2" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.10.0, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +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-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +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-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + +json-stringify-safe@^5.0.1, 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" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + 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" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + +keygrip@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +kleur@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.1.tgz#7cc64b0d188d0dcbc98bdcdfdda2cc10619ddce8" + +koa-compose@^3.0.0, koa-compose@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + +koa-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.0.1.tgz#2acad159c33862de1d73aa4562a48de13f137c0f" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa-mount@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/koa-mount/-/koa-mount-3.0.0.tgz#08cab3b83d31442ed8b7e75c54b1abeb922ec197" + dependencies: + debug "^2.6.1" + koa-compose "^3.2.1" + +koa-range@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/koa-range/-/koa-range-0.3.0.tgz#3588e3496473a839a1bd264d2a42b1d85bd7feac" + dependencies: + stream-slice "^0.1.2" + +koa-send@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-5.0.0.tgz#5e8441e07ef55737734d7ced25b842e50646e7eb" + dependencies: + debug "^3.1.0" + http-errors "^1.6.3" + mz "^2.7.0" + resolve-path "^1.4.0" + +koa-static@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943" + dependencies: + debug "^3.1.0" + koa-send "^5.0.0" + +koa-webpack@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/koa-webpack/-/koa-webpack-5.1.0.tgz#7b9f04ea85c43c4d7ad845d0de01f0ed495eb5c0" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + app-root-path "^2.0.1" + loud-rejection "^1.6.0" + merge-options "^1.0.0" + webpack-dev-middleware "^3.0.0" + webpack-hot-client "^4.1.0" + webpack-log "^1.1.1" + +koa@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.5.2.tgz#f2bda7f3e70be54924e7e5e9789a249f77256fe3" + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.7.1" + debug "^3.1.0" + delegates "^1.0.0" + depd "^1.1.2" + destroy "^1.0.4" + error-inject "^1.0.0" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +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" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +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" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + +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.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + +lodash.merge@^4.4.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loglevelnext@^1.0.1, loglevelnext@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + +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, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0, loud-rejection@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +meant@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +mem@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-3.0.1.tgz#152410d0d7e835e4a4363e626238d9e5be3d6f5a" + dependencies: + mimic-fn "^1.0.0" + p-is-promise "^1.1.0" + +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" + +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +merge-options@^1.0.0, merge-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" + dependencies: + is-plain-obj "^1.1" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + +merge@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" + +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.17, mime-types@~2.1.18: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" + dependencies: + mime-db "~1.35.0" + +mime@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +mini-css-extract-plugin@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + loader-utils "^1.1.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +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" + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +mz@^2.6.0, mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nanoassert@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + +nanobus@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/nanobus/-/nanobus-4.3.3.tgz#a9635d38c687853641e2646bb2be6510cf966233" + dependencies: + nanotiming "^7.2.0" + remove-array-items "^1.0.0" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +nanoscheduler@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/nanoscheduler/-/nanoscheduler-1.0.3.tgz#6ca027941bf3e04139ea4bab6227ea6ad803692f" + dependencies: + nanoassert "^1.1.0" + +nanotiming@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/nanotiming/-/nanotiming-7.3.1.tgz#dc5cf8d9d8ad401a4394d1a9b7a16714bccfefda" + dependencies: + nanoassert "^1.1.0" + nanoscheduler "^1.0.2" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +needle@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + 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 "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-version@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.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" + +nwsapi@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.7.tgz#6fc54c254621f10cac5225b76e81c74120139b78" + +oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.8: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +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" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +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" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +opn@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + dependencies: + is-wsl "^1.1.0" + +opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, 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" + +original@>=0.0.5: + version "1.0.1" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190" + dependencies: + url-parse "~1.4.0" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + +p-series@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-series/-/p-series-1.1.0.tgz#f2d8522cdfd58b464eb9685651d465037ee3c957" + dependencies: + "@sindresorhus/is" "^0.7.0" + p-reduce "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + 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" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + +parseurl@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + 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, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + dependencies: + isarray "0.0.1" + +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" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.16" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + +portfinder@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss@^6.0.1, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +prettier@^1.13.7: + version "1.13.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-format@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-time@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + +prismjs@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + optionalDependencies: + clipboard "^2.0.0" + +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prompts@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.13.tgz#7fad7ee1c6cafe49834ca0b2a6a471262de57620" + dependencies: + kleur "^2.0.1" + sisteransi "^0.1.1" + +prop-types@^15.5.0, prop-types@^15.5.3, prop-types@^15.5.4, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +psl@^1.1.24: + version "1.1.28" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.28.tgz#4fb6ceb08a1e2214d4fd4de0ca22dae13740bc7b" + +public-encrypt@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +qs@~6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +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" + +querystringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dev-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.1.tgz#1f396e161fe44b595db1b186a40067289bf06613" + dependencies: + address "1.0.3" + babel-code-frame "6.26.0" + chalk "1.1.3" + cross-spawn "5.1.0" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.5.11" + global-modules "1.0.0" + gzip-size "3.0.0" + inquirer "3.3.0" + is-root "1.0.0" + opn "5.2.0" + react-error-overlay "^4.0.0" + recursive-readdir "2.2.1" + shell-quote "1.6.1" + sockjs-client "1.1.4" + strip-ansi "3.0.1" + text-table "0.2.0" + +react-dom@^16.4.1: + version "16.4.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.1.tgz#7f8b0223b3a5fbe205116c56deb85de32685dad6" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +react-error-overlay@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" + +react-helmet@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7" + dependencies: + deep-equal "^1.0.1" + object-assign "^4.1.1" + prop-types "^15.5.4" + react-side-effect "^1.1.0" + +react-loadable@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" + dependencies: + prop-types "^15.5.0" + +react-router-config@^1.0.0-beta.4: + version "1.0.0-beta.4" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-1.0.0-beta.4.tgz#d202496dd0eabdf06cf24eb0793031f6891eef01" + +react-router-dom@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" + dependencies: + history "^4.7.2" + invariant "^2.2.4" + loose-envify "^1.3.1" + prop-types "^15.6.1" + react-router "^4.3.1" + warning "^4.0.1" + +react-router@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" + dependencies: + history "^4.7.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.4" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.1" + warning "^4.0.1" + +react-side-effect@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.1.5.tgz#f26059e50ed9c626d91d661b9f3c8bb38cd0ff2d" + dependencies: + exenv "^1.2.1" + shallowequal "^1.0.1" + +react-youtube@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/react-youtube/-/react-youtube-7.6.0.tgz#ea4b7a9396f635b9f2a9f03bfe2a39b93cbdd59d" + dependencies: + lodash "^4.17.4" + prop-types "^15.5.3" + youtube-player "^5.4.0" + +react@^16.4.1: + version "16.4.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.4.1.tgz#de51ba5764b5dbcd1f9079037b862bd26b82fe32" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.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" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +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" + +realpath-native@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" + dependencies: + util.promisify "^1.0.0" + +recursive-readdir@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + dependencies: + minimatch "3.0.3" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +regenerate@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +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" + +registry-auth-token@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +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" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +remarkable@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-1.7.1.tgz#aaca4972100b66a642a63a1021ca4bac1be3bff6" + dependencies: + argparse "~0.1.15" + autolinker "~0.15.0" + +remove-array-items@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remove-array-items/-/remove-array-items-1.0.0.tgz#07bf42cb332f4cf6e85ead83b5e4e896d2326b21" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +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, repeat-string@^1.6.1: + 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-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@^2.87.0: + version "2.87.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + +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.3: + 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" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^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-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-path@^1.3.3, resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve-pathname@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.5.0, resolve@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +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.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +serialize-javascript@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + +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" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shell-quote@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sister@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sister/-/sister-3.0.1.tgz#a36ba6a1d1e46415ba16cb4ecefe14cbd8d82d1f" + +sisteransi@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +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.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + safer-buffer "^2.0.2" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + dependencies: + safe-buffer "^5.1.1" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +static-site-generator-webpack-plugin@endiliey/static-site-generator-webpack-plugin#master: + version "3.4.1" + resolved "https://codeload.github.com/endiliey/static-site-generator-webpack-plugin/tar.gz/d29365613d5489dabe8bae912d7541334e6acf1b" + dependencies: + bluebird "^3.0.5" + cheerio "^0.22.0" + eval "^0.1.0" + url "^0.11.0" + webpack-sources "^0.2.0" + +"statuses@>= 1.4.0 < 2", statuses@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +std-env@^1.1.0, std-env@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-1.3.1.tgz#4e1758412439e9ece1d437b1b098551911aa44ee" + dependencies: + is-ci "^1.1.0" + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + +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-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +stream-slice@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/stream-slice/-/stream-slice-0.1.2.tgz#2dc4f4e1b936fb13f3eb39a2def1932798d07a4b" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.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-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-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +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" + +style-loader@^0.22.1: + version "0.22.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.22.1.tgz#901ea28aac78fcc00c5075585ac07d7ef3f87a52" + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +table@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + +tar@^4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +test-exclude@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" + dependencies: + arrify "^1.0.1" + micromatch "^3.1.8" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-table@0.2.0, text-table@^0.2.0, 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: + 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.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + dependencies: + any-promise "^1.0.0" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +time-fix-plugin@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/time-fix-plugin/-/time-fix-plugin-2.0.3.tgz#b6b1ead519099bc621e28edb77dac7531918b7e1" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + dependencies: + setimmediate "^1.0.4" + +tiny-emitter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + +tough-cookie@>=2.3.3, tough-cookie@^2.3.4: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +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.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-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" + +type-is@^1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +ua-parser-js@^0.7.18: + version "0.7.18" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.4.x: + version "3.4.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" + dependencies: + commander "~2.16.0" + source-map "~0.6.1" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uglifyjs-webpack-plugin@^1.2.4: + version "1.2.7" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +uglifyjs-webpack-plugin@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +underscore.string@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + +update-notifier@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +uri-js@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url-parse@^1.1.8, url-parse@~1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.1.tgz#4dec9dad3dc8585f862fed461d2e19bbf623df30" + dependencies: + querystringify "^2.0.0" + requires-port "^1.0.0" + +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" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util.promisify@1.0.0, util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.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" + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +uuid@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +v8-compile-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" + +vary@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +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" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745" + dependencies: + loose-envify "^1.0.0" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +webpack-chain@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.8.0.tgz#06fc3dbb9f2707d4c9e899fc6250fbcf2afe6fd1" + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + +webpack-dev-middleware@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed" + dependencies: + loud-rejection "^1.6.0" + memory-fs "~0.4.1" + mime "^2.1.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + url-join "^4.0.0" + webpack-log "^1.0.1" + +webpack-hot-client@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/webpack-hot-client/-/webpack-hot-client-4.1.1.tgz#fc02b396749d5fd26c4f2265567e2fc1521a41ff" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + json-stringify-safe "^5.0.1" + loglevelnext "^1.0.2" + merge-options "^1.0.1" + strip-ansi "^4.0.0" + uuid "^3.1.0" + webpack-log "^1.1.1" + ws "^4.0.0" + +webpack-log@^1.0.1, webpack-log@^1.1.1, webpack-log@^1.1.2, webpack-log@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + dependencies: + lodash "^4.17.5" + +webpack-nicelog@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/webpack-nicelog/-/webpack-nicelog-2.2.1.tgz#e3458003ce0d98966e930657176fb4eb6f536b85" + dependencies: + chalk "^2.4.1" + react-dev-utils "^5.0.1" + webpackbar "^2.6.1" + +webpack-serve@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/webpack-serve/-/webpack-serve-2.0.2.tgz#6263b7c2888e169f84105da2119079098512b404" + dependencies: + "@shellscape/koa-static" "^4.0.4" + "@webpack-contrib/cli-utils" "^1.0.2" + "@webpack-contrib/config-loader" "^1.1.1" + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + chalk "^2.3.0" + clipboardy "^1.2.2" + cosmiconfig "^5.0.2" + debug "^3.1.0" + decamelize "^2.0.0" + get-port "^3.2.0" + import-local "^1.0.0" + is-plain-obj "^1.1.0" + killable "^1.0.0" + koa "^2.4.1" + koa-webpack "^5.1.0" + loud-rejection "^1.6.0" + mem "^3.0.0" + meow "^5.0.0" + merge-options "^1.0.1" + nanobus "^4.3.1" + node-version "^1.1.3" + opn "^5.1.0" + p-defer "^1.0.0" + p-series "^1.1.0" + resolve "^1.6.0" + strip-ansi "^4.0.0" + time-fix-plugin "^2.0.0" + update-notifier "^2.3.0" + url-join "^4.0.0" + v8-compile-cache "^2.0.0" + webpack-log "^1.1.2" + +webpack-sources@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-stats-plugin@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.2.1.tgz#1f5bac13fc25d62cbb5fd0ff646757dc802b8595" + +webpack@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.16.3.tgz#861be3176d81e7e3d71c66c8acc9bba35588b525" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/wasm-edit" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.0.1" + +webpackbar@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-2.6.1.tgz#d1aff0665c43635ff35672be2f2463d1176bdb6f" + dependencies: + chalk "^2.3.2" + consola "^1.2.0" + figures "^2.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + log-update "^2.3.0" + pretty-time "^1.0.0" + schema-utils "^0.4.5" + std-env "^1.3.0" + table "^4.0.3" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-fetch@>=0.10.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + +whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + +whatwg-url@^6.4.0, whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + dependencies: + string-width "^2.1.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + +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" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +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" + +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + +xtend@^4.0.0, xtend@~4.0.1: + 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" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +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" + +ylru@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" + +youtube-player@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/youtube-player/-/youtube-player-5.5.0.tgz#95f058534f9544586185551d0d2d33f381f6587a" + dependencies: + debug "^2.6.6" + load-script "^1.0.0" + sister "^3.0.0"