diff --git a/.gitignore b/.gitignore index 32756f90..af5dc514 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ __benchmarks_results__ # Builds packages/**/build/ packages/**/dist/ +docs/dist/ diff --git a/docs/config.js b/docs/config.js new file mode 100644 index 00000000..1b6255eb --- /dev/null +++ b/docs/config.js @@ -0,0 +1,13 @@ +module.exports = { + // Ordered list of docs what will be loaded + docs: { + pages: [ + 'install', + 'introduction', + ], + }, + blog: { + latest: 'welcome_to_best' + // pages are discovered and ordered automatically + }, +}; diff --git a/docs/content/blog/old_post.md b/docs/content/blog/old_post.md new file mode 100644 index 00000000..a025e309 --- /dev/null +++ b/docs/content/blog/old_post.md @@ -0,0 +1,9 @@ +--- +title: Testing old post +subtitle: Old like hell +created_at: 'May 20, 2019' +--- + +# Behold! + +Yay! \ No newline at end of file diff --git a/docs/content/blog/welcome_to_best.md b/docs/content/blog/welcome_to_best.md new file mode 100644 index 00000000..cf5e9a65 --- /dev/null +++ b/docs/content/blog/welcome_to_best.md @@ -0,0 +1,16 @@ +--- +title: Welcome to Best +subtitle: Its finally here! +author: LWC Team +created_at: May 26, 2019 +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vitae nisl et justo mattis fringilla. Quisque vitae mi tellus. Nulla sollicitudin nunc vitae nulla molestie, eu varius mauris vulputate. Suspendisse consequat finibus vehicula. Donec ultricies eros vel pulvinar sagittis. Vestibulum molestie leo ex, ac viverra ligula rhoncus eu. Morbi euismod viverra est vitae aliquam. + +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin ex est, sollicitudin nec tellus ac, ornare molestie sapien. Nulla sed faucibus felis, ut consequat odio. Aenean sollicitudin mauris quis dui hendrerit, at pharetra justo ullamcorper. Quisque eros leo, maximus interdum mauris sed, vulputate egestas est. Praesent interdum fringilla quam, vitae pellentesque ante eleifend quis. Nullam tempor ornare luctus. Nullam vitae blandit dui. Praesent quis dolor ac felis elementum tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec eget mauris est. Vivamus rhoncus elit non consequat suscipit. Aliquam laoreet quam lectus, sed sagittis urna scelerisque facilisis. Quisque ac turpis eu odio varius pharetra id ac nunc. Ut lacinia rhoncus ornare. + +## What should we write here? + +Curabitur vestibulum tellus fringilla massa interdum, sed fringilla urna aliquet. Nulla vitae erat id est dapibus mollis vel sed dui. Phasellus sollicitudin lorem eu velit mollis ornare. Quisque vel pellentesque tellus. Mauris nec malesuada odio. Donec ullamcorper metus ligula, eu vestibulum sem efficitur a. Ut et augue vitae mi efficitur tincidunt. Suspendisse sagittis, sem sit amet pretium fermentum, erat leo congue lacus, at volutpat neque massa nec nulla. Morbi ut efficitur nunc. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec scelerisque auctor enim, et accumsan orci fringilla sed. Nam rhoncus blandit nisi in euismod. Ut cursus imperdiet tortor, euismod porttitor ex lobortis pretium. + +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In sollicitudin augue ut ante dictum, id rutrum erat euismod. In ut dui odio. Aenean dictum nunc in arcu tincidunt, a tempus turpis eleifend. Cras leo sem, bibendum posuere risus id, pulvinar malesuada ante. Phasellus posuere sem odio, eget faucibus arcu dignissim quis. Vivamus at lectus ac odio ultrices venenatis vitae sed leo. Etiam nec lorem sed odio finibus fringilla ac vel felis. Pellentesque commodo ligula ac diam vestibulum vehicula. diff --git a/docs/content/docs/install.md b/docs/content/docs/install.md new file mode 100644 index 00000000..a2978cdd --- /dev/null +++ b/docs/content/docs/install.md @@ -0,0 +1,111 @@ +--- +title: Installation +--- + +# Installation + +::: tip +If you aren't familiar with build tools but want to explore Best... +::: + +## Best CLI + +Foo Bar + +```bash +npx lwc-create-app my-app +cd my-app +npm run watch +``` + +To install the CLI, you must have [Node.js](https://nodejs.org/) installed, with at least npm 5.2+. You should be familiar with either [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/). The npx tool is a package runner that installs with npm 5.2+. + +For information about component naming and bundle structure, see [Component Bundles](reference#component-bundles). + +## Tools + +To develop Lightning web components, you can use just about any code editor and tools. + +For code formatting, we recommend [Prettier](https://Prettier.io/). Prettier supports HTML, CSS, and Javascript, which are the files you write to create Lightning web components. + +To install and use Prettier, see the official [documentation](https://Prettier.io/docs/en/install.html). If you're using Git, it's a good idea to use a [pre-commit hook](https://Prettier.io/docs/en/precommit.html) to ensure that code is formatted before it's committed to source control. + +To configure Prettier, add a [configuration file](https://Prettier.io/docs/en/configuration.html) to your project. To correctly format HTML templates with Prettier, set the `parser` to `lwc`. The parser is just HTML, but it tells Prettier not to add quotes around template properties in HTML attributes as required by LWC. + +The following example sets all HTML files to use the `lwc` parser. + +```json +{ + "overrides": [ + { + "files": "*.html", + "options": { "parser": "lwc" } + } + ] +} +``` + +## Recipes + +The [`github.com/trailheadapps/lwc-recipes-oss`](https://github.com/trailheadapps/lwc-recipes-oss) repo includes simple code recipes that teach you how to build apps. The recipes are used as code examples throughout this developer guide. + +```bash +git clone https://github.com/trailheadapps/lwc-recipes-oss.git +cd lwc-recipes-oss +``` + +You can view some of the recipes in the Lightning Web Components recipes app: +[recipes.lwc.dev](https://recipes.lwc.dev). + +## Playground + +The simplest recipe is the `helloWorld` component. The `name` property in the component's JavaScript class binds to the component's HTML template. Change `World` to `Earth` to see the binding in action. + +Add another property in `helloWorld.js`. + +```js +@api greeting = 'Welcome to Lightning Web Components!' +``` + +Don't forget to add `{greeting}` in the `helloWorld.html` template. + +The `@api` decorator makes the `name` property public. Because the `name` and `greeting` properties are public, a component that consumes the `helloWorld` component can set their values. + +If we remove `@api`, the property still binds to the HTML template but it's private. To see for yourself, remove `@api`. + +To learn more, see [HTML Templates](html_templates). + +## Supported Browsers + +| Browser | Version | +| --- | --- | +|Microsoft® Internet Explorer® | IE 11* | +|Microsoft® Edge| Latest | +|Google Chrome™|Latest | +|Mozilla® Firefox®| Latest| +|Apple® Safari®| 12.x+| + +::: note +For IE 11, Lightning Web Components uses compatibility mode. Code is transpiled down to ES5 and the required polyfills are added. Components work in compatibility mode, but performance suffers. To develop Lightning web components that run in IE 11, follow the [Compat Performance](https://github.com/salesforce/eslint-plugin-lwc#compat-performance) rules in the ESLint Plugin for Lightning Web Components Github repo. +::: + +## Supported JavaScript + +To develop Lightning web components, use the latest versions of JavaScript. + +Lightning Web Components JavaScript support includes: + +- ES6 \(ECMAScript 2015\) +- ES7 \(ECMAScript 2016\) +- ES8 \(ECMAScript 2017\)—excluding Shared Memory and Atomics +- ES9 \(ECMAScript 2018\)—including only [Object Spread Properties](https://github.com/tc39/proposal-object-rest-spread) \(not Object Rest Properties\) + +A huge benefit of Lightning Web Components is that you write standard JavaScript code. The Salesforce engineers who developed Lightning Web Components are contributing members of the Ecma International Technical Committee 39 \([TC39](https://tc39.github.io/ecma262/)\), which is the committee that evolves JavaScript. Salesforce is also a member of the [World Wide Web Consortium \(W3C\)](https://www.w3.org/Consortium/Member/List). + +This developer guide explains how to develop Lightning web components and documents the [directives](reference#html-template-directives), [decorators](reference#javascript-decorators), and [lifecycle hooks](lifecycle) that are unique to the programming model. + +This developer guide doesn’t document standard JavaScript or teach JavaScript fundamentals. Standard JavaScript is documented in the [Mozilla Developer Network \(MDN\) JavaScript Reference](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference). If you’re looking for documentation for a function, try MDN first. For example, if you’re looking for information about `addEventListener()`, use MDN. + +::: tip +To learn JavaScript \(or if you want a refresher\), start with the [Modern JavaScript Development](https://trailhead.salesforce.com/en/content/learn/modules/modern-javascript-development?trail_id=learn-to-work-with-javascript) Trailhead module. In just an hour and fifteen minutes, you’ll be up-to-date and ready to develop Lightning web components. +::: diff --git a/docs/content/docs/introduction.md b/docs/content/docs/introduction.md new file mode 100644 index 00000000..5fe52f8b --- /dev/null +++ b/docs/content/docs/introduction.md @@ -0,0 +1,11 @@ +--- +title: Dev Guide +--- + +# Dev Guide + +Best is amazing! + +::: tip +The name of Best, is because... blah. +::: diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000..6858ebd7 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,51 @@ +{ + "name":"@best/docs", + "version": "4.0.0", + "private": true, + "scripts": { + "test:links": "node scripts/verify-doc-links", + "clean": "rm -rf dist/", + "build:assets": "node scripts/generate-assets", + "build:home": "node scripts/generate-homepage.js", + "build:notfound": "node scripts/generate-notfound.js", + "build:docs": "node scripts/generate-documentation.js", + "build:blog": "node scripts/generate-blog.js", + "build": "yarn build:assets && yarn build:home && yarn build:blog && yarn build:docs && yarn build:notfound", + "watch": "cross-env WATCH=1 yarn start", + "start": "node ./src/server/index.js" + }, + "dependencies": { + "compression": "~1.7.3", + "express": "~4.16.4", + "express-winston": "~3.0.1", + "serve-static": "~1.14.1", + "winston": "~3.1.0" + }, + "devDependencies": { + "@lwc/compiler": "~1.0.0", + "@lwc/engine": "~1.0.0", + "@lwc/jest-preset": "~1.0.0", + "@lwc/rollup-plugin": "~1.0.0", + "@lwc/synthetic-shadow": "~1.0.0", + "@lwc/wire-service": "~1.0.0", + "cpy": "~7.0.1", + "dateformat": "^3.0.3", + "decamelize": "^3.2.0", + "escape-html": "1.0.3", + "gray-matter": "~4.0.2", + "hash-sum": "^1.0.2", + "lint-staged": "~8.1.0", + "lru-cache": "^5.1.1", + "markdown-it": "~8.4.1", + "markdown-it-anchor": "~5.0.2", + "markdown-it-chain": "~1.3.0", + "markdown-it-container": "2.0.0", + "markdown-it-emoji": "~1.4.0", + "markdown-link-check": "^3.7.3", + "mkdirp": "~0.5.1", + "prismjs": "~1.16.0", + "reload": "~3.0.1", + "watch": "^1.0.2", + "cross-env": "^5.2.0" + } +} diff --git a/docs/scripts/build-assets.js b/docs/scripts/build-assets.js new file mode 100644 index 00000000..58b13b6f --- /dev/null +++ b/docs/scripts/build-assets.js @@ -0,0 +1,50 @@ +const fs = require('fs'); +const path = require('path'); +const cpy = require('cpy'); +const mkdirp = require('mkdirp'); +const crypto = require('crypto'); + +const { + SRC_DIR, + DIST_DIR, + LWC_ENGINE_PATH, + PAGE_STYLESHEETS, + PAGE_STYLESHEETS_PROD_DIR, + LWC_VERSION, +} = require('./config'); +const ENGINE_FILE = `engine_v${LWC_VERSION}.js`; + +function buildAndCompileStyles(dist) { + const bundleSrc = PAGE_STYLESHEETS.reduce((str, stylesheetPath) => { + const abs = path.join(dist, stylesheetPath); + return (str += fs.readFileSync(abs, 'utf-8')); + }, ''); + + const hash = crypto + .createHash('md5') + .update(bundleSrc) + .digest('hex'); + mkdirp.sync(PAGE_STYLESHEETS_PROD_DIR); + fs.writeFileSync( + path.join(PAGE_STYLESHEETS_PROD_DIR, `bundle.${hash}.css`), + bundleSrc, + 'utf-8', + ); +} + +module.exports = async function() { + // Copy all assets + await cpy(['**', '!images/favicon.ico'], path.join(DIST_DIR, 'assets'), { + cwd: path.resolve(SRC_DIR, 'assets'), + parents: true, + }); + + // Copy the `favicon.ico` in the root + await cpy(path.resolve(SRC_DIR, 'assets/images/favicon.ico'), DIST_DIR); + + // Compile styles + await buildAndCompileStyles(DIST_DIR); + + // Copy engine + fs.copyFileSync(LWC_ENGINE_PATH, path.join(DIST_DIR, `assets/js/lwc/${ENGINE_FILE}`)); +}; diff --git a/docs/scripts/build-blog.js b/docs/scripts/build-blog.js new file mode 100644 index 00000000..b4d2f146 --- /dev/null +++ b/docs/scripts/build-blog.js @@ -0,0 +1,67 @@ +// -- modules --------------------------------------------------------------------------- +const path = require('path'); +const fs = require('fs'); +const { readHtml } = require('./utils/readFile'); +const parseDocument = require('./utils/parseDocument'); +const parseSidebar = require('./utils/parseSidebar'); +const buildPage = require('./utils/buildDocPage'); +const buildBlogPostHeader = require('./utils/buildBlogPostHeader'); +const markdown = require('./utils/markdown'); + +// -- Global Config --------------------------------------------------------------------- +const { SRC_DIR, DIST_DIR, BLOG_DIR } = require('./config'); +const HTML_TEMPLATE = readHtml('template', SRC_DIR); +const MD_INSTANCE = markdown(); + +// -- Helpers --------------------------------------------------------------------------- +async function generatePageHtml(pageDoc, sidebarData, template, opts) { + const { docName } = pageDoc; + const htmlContent = await buildPage(pageDoc, sidebarData, template, opts); + fs.writeFileSync(path.resolve(DIST_DIR, `${docName}.html`), htmlContent, 'utf-8'); +} + +function createDate(str) { + const date = Date.parse(str); + if (isNaN(date)) { + throw new Error('Invalid date for blog entry'); + } + + return new Date(date); +} + +function sortBlogPages(a, b) { + const timeA = createDate(a.metadata.created_at); + const timeB = createDate(b.metadata.created_at); + return timeA.getTime() < timeB.getTime(); +} + +function beforeRender(markdown, metadata) { + return buildBlogPostHeader(metadata) + markdown; +} + +async function generatePageHtml(pageDoc, sidebarData, template, opts) { + const { docName } = pageDoc; + const htmlContent = await buildPage(pageDoc, sidebarData, template, opts); + fs.writeFileSync(path.resolve(DIST_DIR, `blog_${docName}.html`), htmlContent, 'utf-8'); +} + +// -- API ------------------------------------------------------------------------------- +module.exports = async function buildDocumentation() { + // For every markdown document file generate a + // page representation that holds all the metadata + const BLOG_LIST = fs.readdirSync(BLOG_DIR).map(file => path.basename(file, '.md')); + const pageDocList = BLOG_LIST.map(doc => + parseDocument(doc, BLOG_DIR, MD_INSTANCE, { beforeRender }), + ).sort(sortBlogPages); + + // We will process each page independently + for (const pageDocument of pageDocList) { + const pageSidebar = parseSidebar(pageDocument, pageDocList, { levels: 1 }); + // Generate the HTML for a given page, sidebar and template + await generatePageHtml(pageDocument, pageSidebar, HTML_TEMPLATE, { + pageClasses: 'blog content-wrapper flex-wrapper', + activeTab: 'blog', + prefixUrl: '/blog', + }); + } +}; diff --git a/docs/scripts/build-documentation.js b/docs/scripts/build-documentation.js new file mode 100644 index 00000000..625a50f5 --- /dev/null +++ b/docs/scripts/build-documentation.js @@ -0,0 +1,37 @@ +// -- modules --------------------------------------------------------------------------- +const path = require('path'); +const fs = require('fs'); +const { readHtml } = require('./utils/readFile'); +const parseDocument = require('./utils/parseDocument'); +const parseSidebar = require('./utils/parseSidebar'); +const buildPage = require('./utils/buildDocPage'); +const markdown = require('./utils/markdown'); + +// -- Global Config --------------------------------------------------------------------- +const { DOCS_LIST, SRC_DIR, DIST_DIR, DOCS_DIR } = require('./config'); +const HTML_TEMPLATE = readHtml('template', SRC_DIR); +const MD_INSTANCE = markdown(); + +// -- Helpers --------------------------------------------------------------------------- +async function generatePageHtml(pageDoc, sidebarData, template, opts) { + const { docName } = pageDoc; + const htmlContent = await buildPage(pageDoc, sidebarData, template, opts); + fs.writeFileSync(path.resolve(DIST_DIR, `${docName}.html`), htmlContent, 'utf-8'); +} + +// -- API ------------------------------------------------------------------------------- +module.exports = async function buildDocumentation() { + // For every markdown document file generate a + // page representation that holds all the metadata + const pageDocList = DOCS_LIST.map(doc => parseDocument(doc, DOCS_DIR, MD_INSTANCE)); + + // We will process each page independently + for (const pageDocument of pageDocList) { + const pageSidebar = parseSidebar(pageDocument, pageDocList); + // Generate the HTML for a given page, sidebar and template + await generatePageHtml(pageDocument, pageSidebar, HTML_TEMPLATE, { + activeTab: 'guide', + prefixUrl: '/guide', + }); + } +}; diff --git a/docs/scripts/build-homepage.js b/docs/scripts/build-homepage.js new file mode 100644 index 00000000..ff9425eb --- /dev/null +++ b/docs/scripts/build-homepage.js @@ -0,0 +1,36 @@ +// -- modules --------------------------------------------------------------------------- +const path = require('path'); +const fs = require('fs'); +const { readHtml } = require('./utils/readFile'); +const { __PROD__ } = require('./config'); +const buildPageHtml = require('./utils/buildPageHtml'); +const buildPageStyles = require('./utils/buildPageStyles'); +const buildNavBar = require('./utils/buildNavbar'); + +// -- Global Config --------------------------------------------------------------------- +const { SRC_DIR, DIST_DIR } = require('./config'); +const EMPTY_STRING = ''; +const TITLE = 'BestJS'; + +// -- Helpers --------------------------------------------------------------------------- +function buildHomePage(template) { + return buildPageHtml( + template, + { + title: TITLE, + navBar: buildNavBar(), + pageClasses: 'home', + sideBar: EMPTY_STRING, + body: readHtml('home', SRC_DIR), + headerStyles: buildPageStyles(), + headerScripts: EMPTY_STRING, + }, + { prod: __PROD__ }, + ); +} + +// -- API ------------------------------------------------------------------------------- +module.exports = function writeHomePage() { + const htmlContent = buildHomePage(readHtml('template', SRC_DIR)); + fs.writeFileSync(path.resolve(DIST_DIR, 'home.html'), htmlContent, 'utf-8'); +}; diff --git a/docs/scripts/build-notfound.js b/docs/scripts/build-notfound.js new file mode 100644 index 00000000..6aa05495 --- /dev/null +++ b/docs/scripts/build-notfound.js @@ -0,0 +1,36 @@ +// -- modules --------------------------------------------------------------------------- +const path = require('path'); +const fs = require('fs'); +const { readHtml } = require('./utils/readFile'); +const { __PROD__ } = require('./config'); +const buildPageHtml = require('./utils/buildPageHtml'); +const buildPageStyles = require('./utils/buildPageStyles'); +const buildNavBar = require('./utils/buildNavbar'); + +// -- Global Config --------------------------------------------------------------------- +const { SRC_DIR, DIST_DIR } = require('./config'); +const EMPTY_STRING = ''; +const TITLE = 'Page Not Found'; + +// -- Helpers --------------------------------------------------------------------------- +function buildNotFoundPage(template) { + return buildPageHtml( + template, + { + title: TITLE, + navBar: buildNavBar(), + pageClasses: 'home notfound', + sideBar: EMPTY_STRING, + body: readHtml('notfound', SRC_DIR), + headerStyles: buildPageStyles(), + headerScripts: EMPTY_STRING, + }, + { prod: __PROD__ }, + ); +} + +// -- API ------------------------------------------------------------------------------- +module.exports = function writeNotFoundPage() { + const htmlContent = buildNotFoundPage(readHtml('template', SRC_DIR)); + fs.writeFileSync(path.resolve(DIST_DIR, 'notfound.html'), htmlContent, 'utf-8'); +}; diff --git a/docs/scripts/config.js b/docs/scripts/config.js new file mode 100644 index 00000000..9c77cc90 --- /dev/null +++ b/docs/scripts/config.js @@ -0,0 +1,70 @@ +const fs = require('fs'); +const path = require('path'); +const SITE_CONFIG = require('../config'); + +const SRC_DIR = path.resolve(__dirname, '../src/client'); +const DIST_DIR = path.resolve(__dirname, '../dist'); +const DOCS_DIR = path.resolve(__dirname, '../content/docs'); +const TUTORIAL_DIR = path.resolve(__dirname, '../content/tutorial'); +const COMMUNITY_DIR = path.resolve(__dirname, '../content/community'); +const BLOG_DIR = path.resolve(__dirname, '../content/blog'); +const PAGE_STYLESHEETS_PROD_DIR = path.join(DIST_DIR, '/assets/css/prod'); + +const PAGE_STYLESHEETS = [ + '/assets/css/normalize.css', + '/assets/css/main.css', + '/assets/css/docs.css', + '/assets/css/blog.css', + '/assets/css/prismjs/themes/prism.css', +]; + +const __ENV__ = process.env.NODE_ENV || 'development'; +const __PROD__ = __ENV__ === 'production'; + +const LWC_COMPILER_CONFIG = { + exclude: ['**/codeMirror/**'], + resolveFromPackages: false, + stylesheetConfig: { + customProperties: { + allowDefinition: true, + }, + }, +}; + +const LWC_VERSION = '100'; +const LWC_ENGINE_PATH = require.resolve('@lwc/engine/dist/umd/es2017/engine'); +const DOCS_LIST = SITE_CONFIG.docs.pages; + +function getStyleSheets() { + if (__PROD__) { + if (fs.existsSync(PAGE_STYLESHEETS_PROD_DIR)) { + return fs + .readdirSync(PAGE_STYLESHEETS_PROD_DIR) + .map(f => path.join('/assets/css/prod', f)); + } else { + return []; + } + } else { + return PAGE_STYLESHEETS; + } +} + +module.exports = { + SRC_DIR, + DIST_DIR, + DOCS_DIR, + BLOG_DIR, + TUTORIAL_DIR, + COMMUNITY_DIR, + + __ENV__, + __PROD__, + + LWC_COMPILER_CONFIG, + LWC_ENGINE_PATH, + LWC_VERSION, + DOCS_LIST, + PAGE_STYLESHEETS, + PAGE_STYLESHEETS_PROD_DIR, + getStyleSheets, +}; diff --git a/docs/scripts/generate-assets.js b/docs/scripts/generate-assets.js new file mode 100644 index 00000000..d1794bd3 --- /dev/null +++ b/docs/scripts/generate-assets.js @@ -0,0 +1,7 @@ +/* eslint-disable no-console */ +const buildAssets = require('./build-assets'); + +buildAssets().catch(err => { + console.log(err); + throw err; +}); diff --git a/docs/scripts/generate-blog.js b/docs/scripts/generate-blog.js new file mode 100644 index 00000000..1b020e33 --- /dev/null +++ b/docs/scripts/generate-blog.js @@ -0,0 +1,7 @@ +/* eslint-disable no-console */ +const buildBlog = require('./build-blog'); + +buildBlog().catch(err => { + console.log(err); + throw err; +}); diff --git a/docs/scripts/generate-documentation.js b/docs/scripts/generate-documentation.js new file mode 100644 index 00000000..e44f3a9f --- /dev/null +++ b/docs/scripts/generate-documentation.js @@ -0,0 +1,7 @@ +/* eslint-disable no-console */ +const buildDocumentation = require('./build-documentation'); + +buildDocumentation().catch(err => { + console.log(err); + throw err; +}); diff --git a/docs/scripts/generate-homepage.js b/docs/scripts/generate-homepage.js new file mode 100644 index 00000000..8eaabd97 --- /dev/null +++ b/docs/scripts/generate-homepage.js @@ -0,0 +1,2 @@ +const buildHomePage = require('./build-homepage'); +buildHomePage(); diff --git a/docs/scripts/generate-notfound.js b/docs/scripts/generate-notfound.js new file mode 100644 index 00000000..44e55675 --- /dev/null +++ b/docs/scripts/generate-notfound.js @@ -0,0 +1,2 @@ +const buildNotFound = require('./build-notfound'); +buildNotFound(); diff --git a/docs/scripts/utils/buildBlogPostHeader.js b/docs/scripts/utils/buildBlogPostHeader.js new file mode 100644 index 00000000..11961a6f --- /dev/null +++ b/docs/scripts/utils/buildBlogPostHeader.js @@ -0,0 +1,13 @@ +const dateformat = require('dateformat'); +module.exports = function buildBlogPostHeader({ title, subtitle, created_at, author, twitter }) { + const sub = subtitle ? `
${prevHTML}${nextHTML}
+/;
+
+module.exports = md => {
+ const fence = md.renderer.rules.fence;
+ md.renderer.rules.fence = (...args) => {
+ const [tokens, idx, options] = args;
+ const token = tokens[idx];
+
+ if (!token.lineNumbers) {
+ const rawInfo = token.info;
+ if (!rawInfo || !RE.test(rawInfo)) {
+ return fence(...args);
+ }
+
+ const langName = rawInfo.replace(RE, '').trim();
+ // ensure the next plugin get the correct lang.
+ token.info = langName;
+
+ token.lineNumbers = RE.exec(rawInfo)[1]
+ .split(',')
+ .map(v => v.split('-').map(v => parseInt(v, 10)));
+ }
+
+ const code = options.highlight
+ ? options.highlight(token.content, token.info)
+ : token.content;
+
+ const rawCode = code.replace(wrapperRE, '');
+ const highlightLinesCode = rawCode
+ .split('\n')
+ .map((split, index) => {
+ const lineNumber = index + 1;
+ const inRange = token.lineNumbers.some(([start, end]) => {
+ if (start && end) {
+ return lineNumber >= start && lineNumber <= end;
+ }
+ return lineNumber === start;
+ });
+ if (inRange) {
+ return ` `;
+ }
+ return '
';
+ })
+ .join('');
+
+ const highlightLinesWrapperCode = `${highlightLinesCode}`;
+
+ return highlightLinesWrapperCode + code;
+ };
+};
diff --git a/docs/scripts/utils/markdownPluginHighlights.js b/docs/scripts/utils/markdownPluginHighlights.js
new file mode 100644
index 00000000..766aa996
--- /dev/null
+++ b/docs/scripts/utils/markdownPluginHighlights.js
@@ -0,0 +1,46 @@
+const prism = require('prismjs');
+const loadLanguages = require('prismjs/components/index');
+const escapeHtml = require('escape-html');
+
+// required to make embedded highlighting work...
+loadLanguages(['markup', 'css', 'javascript']);
+
+function wrap(code, lang) {
+ if (lang === 'text') {
+ code = escapeHtml(code);
+ }
+ return `${code}
`;
+}
+
+module.exports = (str, lang) => {
+ if (!lang) {
+ return wrap(str, 'text');
+ }
+ lang = lang.toLowerCase();
+ const rawLang = lang;
+ if (lang === 'html') {
+ lang = 'markup';
+ }
+
+ if (lang === 'md') {
+ lang = 'markdown';
+ }
+
+ if (lang === 'ts') {
+ lang = 'typescript';
+ }
+
+ if (lang === 'sh') {
+ lang = 'bash';
+ }
+ if (lang === 'yml') {
+ lang = 'yaml';
+ }
+
+ if (prism.languages[lang]) {
+ const code = prism.highlight(str, prism.languages[lang], lang);
+ return wrap(code, rawLang);
+ }
+
+ return wrap(str, 'text');
+};
diff --git a/docs/scripts/utils/markdownPluginWrapper.js b/docs/scripts/utils/markdownPluginWrapper.js
new file mode 100644
index 00000000..d82257ba
--- /dev/null
+++ b/docs/scripts/utils/markdownPluginWrapper.js
@@ -0,0 +1,21 @@
+// markdown-it plugin for wrapping ...
.
+//
+// If your plugin was chained before preWrapper, you can add additional eleemnt directly.
+// If your plugin was chained after preWrapper, you can use these slots:
+// 1.
+// 2.
+// 3.
+// 4.
+
+module.exports = md => {
+ const fence = md.renderer.rules.fence;
+ md.renderer.rules.fence = (...args) => {
+ const [tokens, idx] = args;
+ const token = tokens[idx];
+ const rawCode = fence(...args);
+ return (
+ `` +
+ `${rawCode}`
+ );
+ };
+};
diff --git a/docs/scripts/utils/parseCustomElements.js b/docs/scripts/utils/parseCustomElements.js
new file mode 100644
index 00000000..001f08c6
--- /dev/null
+++ b/docs/scripts/utils/parseCustomElements.js
@@ -0,0 +1,27 @@
+const markdown = require('./markdown');
+
+// This is faster than using any plugin for iterating over the tokens
+function traverseTokens(tokens, visitor) {
+ tokens.forEach(t => {
+ if (t.type === 'html_block' || t.type === 'html_inline') {
+ const matches = t.content.match(/<(\w+-(\w+-?)+)/);
+ if (matches) {
+ visitor(matches[1]);
+ }
+ }
+
+ if (t.children) {
+ traverseTokens(t.children, visitor);
+ }
+ });
+}
+
+module.exports = function extractDocHeaders(rawDoc, options, md = markdown()) {
+ const tokens = md.parse(rawDoc, {});
+ const uniqueElementNames = new Set();
+ traverseTokens(tokens, customElementName => {
+ uniqueElementNames.add(customElementName);
+ });
+
+ return Array.from(uniqueElementNames);
+};
diff --git a/docs/scripts/utils/parseDocHeaders.js b/docs/scripts/utils/parseDocHeaders.js
new file mode 100644
index 00000000..961bb67f
--- /dev/null
+++ b/docs/scripts/utils/parseDocHeaders.js
@@ -0,0 +1,22 @@
+const markdown = require('./markdown');
+const parseHeaders = require('./parseHeaders');
+
+module.exports = function extractDocHeaders(rawDoc, headers = ['h2', 'h3'], md = markdown()) {
+ const tokens = md.parse(rawDoc, {});
+ const res = [];
+
+ tokens.forEach((t, i) => {
+ if (t.type === 'heading_open' && headers.includes(t.tag)) {
+ const title = tokens[i + 1].content;
+ const slug = t.attrs.find(([name]) => name === 'id')[1];
+
+ res.push({
+ level: parseInt(t.tag.slice(1), 10),
+ title: parseHeaders(title),
+ slug: slug || md.slugify(title),
+ });
+ }
+ });
+
+ return res;
+};
diff --git a/docs/scripts/utils/parseDocMeta.js b/docs/scripts/utils/parseDocMeta.js
new file mode 100644
index 00000000..2f25c1d0
--- /dev/null
+++ b/docs/scripts/utils/parseDocMeta.js
@@ -0,0 +1,6 @@
+const grayMatter = require('gray-matter');
+
+module.exports = function extractDocMetadata(rawDoc) {
+ const { content, data } = grayMatter(rawDoc);
+ return { content, metadata: data };
+};
diff --git a/docs/scripts/utils/parseDocument.js b/docs/scripts/utils/parseDocument.js
new file mode 100644
index 00000000..a89d6972
--- /dev/null
+++ b/docs/scripts/utils/parseDocument.js
@@ -0,0 +1,22 @@
+const { readDoc } = require('./readFile');
+const extractDocMetadata = require('./parseDocMeta');
+const extractDocHeaders = require('./parseDocHeaders');
+const extractCustomElements = require('./parseCustomElements');
+
+module.exports = function parseDocument(docName, docsDir, md, opts = {}) {
+ const rawDocument = readDoc(docName, docsDir);
+ const { content, metadata } = extractDocMetadata(rawDocument);
+ const headers = extractDocHeaders(content, ['h2', 'h3'], md);
+ const markdown = opts.beforeRender ? opts.beforeRender(content, metadata) : content;
+ const components = extractCustomElements(markdown, {}, md);
+ const html = md.render(markdown);
+
+ return {
+ docName,
+ rawDocument,
+ metadata,
+ components,
+ headers,
+ html,
+ };
+};
diff --git a/docs/scripts/utils/parseEmoijis.js b/docs/scripts/utils/parseEmoijis.js
new file mode 100644
index 00000000..99e1e5aa
--- /dev/null
+++ b/docs/scripts/utils/parseEmoijis.js
@@ -0,0 +1,5 @@
+const emojiData = require('markdown-it-emoji/lib/data/full.json');
+
+module.exports = str => {
+ return String(str).replace(/:(.+?):/g, (placeholder, key) => emojiData[key] || placeholder);
+};
diff --git a/docs/scripts/utils/parseHeaders.js b/docs/scripts/utils/parseHeaders.js
new file mode 100644
index 00000000..10b1c73e
--- /dev/null
+++ b/docs/scripts/utils/parseHeaders.js
@@ -0,0 +1,20 @@
+const compose = require('./utilCompose');
+const unescapeHtml = require('./utilUnscapeHtml');
+const parseEmojis = require('./parseEmoijis');
+
+const removeMarkdownTokens = str =>
+ String(str)
+ .replace(/\[(.*)\]\(.*\)/, '$1') // []()
+ .replace(/(`|\*{1,3}|_)(.*?[^\\])\1/g, '$2') // `{t}` | *{t}* | **{t}** | ***{t}*** | _{t}_
+ // eslint-disable-next-line no-useless-escape
+ .replace(/(\\)(\*|_|`|\!)/g, '$2'); // remove escape char '\'
+
+const trim = str => str.trim();
+
+// Unescape html, parse emojis and remove some md tokens.
+module.exports = compose(
+ unescapeHtml,
+ parseEmojis,
+ removeMarkdownTokens,
+ trim,
+);
diff --git a/docs/scripts/utils/parseSidebar.js b/docs/scripts/utils/parseSidebar.js
new file mode 100644
index 00000000..05317402
--- /dev/null
+++ b/docs/scripts/utils/parseSidebar.js
@@ -0,0 +1,11 @@
+module.exports = function parseSidebar(activePageDoc, allPageDocs, { levels = 2 } = {}) {
+ return allPageDocs.map(pageDoc => {
+ const isSelected = activePageDoc.docName === pageDoc.docName;
+ return {
+ id: pageDoc.docName,
+ title: pageDoc.metadata.title,
+ children: isSelected ? pageDoc.headers.filter(h => h.level <= levels) : null,
+ isSelected,
+ };
+ });
+};
diff --git a/docs/scripts/utils/readFile.js b/docs/scripts/utils/readFile.js
new file mode 100644
index 00000000..5ddb455f
--- /dev/null
+++ b/docs/scripts/utils/readFile.js
@@ -0,0 +1,15 @@
+const path = require('path');
+const fs = require('fs');
+
+function readDoc(fileName, root) {
+ return fs.readFileSync(path.resolve(root, `${fileName}.md`), 'utf8');
+}
+
+function readHtml(fileName, root) {
+ return fs.readFileSync(path.resolve(root, `${fileName}.html`), 'utf8');
+}
+
+module.exports = {
+ readDoc,
+ readHtml,
+};
diff --git a/docs/scripts/utils/utilCompose.js b/docs/scripts/utils/utilCompose.js
new file mode 100644
index 00000000..3ff8cb01
--- /dev/null
+++ b/docs/scripts/utils/utilCompose.js
@@ -0,0 +1,7 @@
+module.exports = function compose(...processors) {
+ if (processors.length === 0) return input => input;
+ if (processors.length === 1) return processors[0];
+ return processors.reduce((prev, next) => {
+ return (...args) => next(prev(...args));
+ });
+};
diff --git a/docs/scripts/utils/utilKebabToCamelCase.js b/docs/scripts/utils/utilKebabToCamelCase.js
new file mode 100644
index 00000000..05a268f1
--- /dev/null
+++ b/docs/scripts/utils/utilKebabToCamelCase.js
@@ -0,0 +1,19 @@
+module.exports = function kebabcaseToCamelcase(name) {
+ const newName = [];
+ let nsFound = false;
+ let upper = false;
+ for (let i = 0; i < name.length; i++) {
+ if (name[i] === '-') {
+ if (!nsFound) {
+ nsFound = true;
+ newName.push('/');
+ } else {
+ upper = true;
+ }
+ } else {
+ newName.push(upper ? name[i].toUpperCase() : name[i]);
+ upper = false;
+ }
+ }
+ return newName.join('');
+};
diff --git a/docs/scripts/utils/utilUnscapeHtml.js b/docs/scripts/utils/utilUnscapeHtml.js
new file mode 100644
index 00000000..3483ce46
--- /dev/null
+++ b/docs/scripts/utils/utilUnscapeHtml.js
@@ -0,0 +1,7 @@
+module.exports = html =>
+ String(html)
+ .replace(/"/g, '"')
+ .replace(/'/g, "'")
+ .replace(/:/g, ':')
+ .replace(/</g, '<')
+ .replace(/>/g, '>');
diff --git a/docs/scripts/verify-doc-links.js b/docs/scripts/verify-doc-links.js
new file mode 100644
index 00000000..701d7ce6
--- /dev/null
+++ b/docs/scripts/verify-doc-links.js
@@ -0,0 +1,75 @@
+const path = require('path');
+const fs = require('fs');
+const http = require('http');
+const markdownLinkCheck = require('markdown-link-check');
+const { PORT } = require('../src/server/config');
+const { DOCS_LIST, DOCS_DIR } = require('./config');
+const BASE_URL = `http://localhost:${PORT}/`;
+
+function verifyDocLinks(doc) {
+ const docPath = path.join(DOCS_DIR, `${doc}.md`);
+ const docSrc = fs.readFileSync(docPath, 'utf-8');
+ return new Promise((resolve, reject) => {
+ markdownLinkCheck(
+ docSrc,
+ {
+ baseUrl: BASE_URL,
+ // showProgressBar: true,
+ replacementPatterns: [
+ {
+ // Transform relative doc links into guide links
+ pattern: '^(?!/|http|https)(.+)',
+ replacement: '/guide/$1',
+ },
+ ],
+ },
+ (err, results) => {
+ if (err) {
+ reject(err);
+ } else {
+ results.forEach(({ status, statusCode, link, err }) => {
+ if (statusCode !== 200 || status !== 'alive') {
+ reject(`Broken link on "${doc}" doc: ${link}(${statusCode})`);
+ }
+ });
+ resolve();
+ }
+ },
+ );
+ });
+}
+
+async function verifyAllDocLinks() {
+ for (const doc of DOCS_LIST) {
+ process.stdout.write(`Proccesing links on document: "${doc}"\n`);
+ await verifyDocLinks(doc);
+ }
+}
+
+function createServer() {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const app = await require('../src/server/server').createApp();
+ const server = http.createServer(app);
+ server.listen(PORT, function() {
+ resolve();
+ });
+ } catch (e) {
+ reject(e);
+ }
+ });
+}
+
+async function run() {
+ await createServer();
+ await verifyAllDocLinks();
+}
+
+run()
+ .catch(err => {
+ console.log(err);
+ process.exit(1);
+ })
+ .then(() => {
+ process.exit(0);
+ });
diff --git a/docs/src/client/assets/css/blog.css b/docs/src/client/assets/css/blog.css
new file mode 100644
index 00000000..d456f529
--- /dev/null
+++ b/docs/src/client/assets/css/blog.css
@@ -0,0 +1,48 @@
+.blog ul.nav__list::before {
+ content: 'Recent Posts';
+ margin: 0;
+ display: block;
+ font-size: 1.4rem;
+ line-height: 0.8rem;
+ padding: 2rem;
+ color: #666;
+ font-weight: bold;
+}
+
+.blog nav.nav ul.nav__list {
+ background-color: white;
+ border-left: 1px solid #eee;
+}
+
+.blog .icon-angle {
+ display: none;
+}
+
+.blog nav {
+ margin-top: 4rem;
+}
+
+.container.blog {
+ flex-direction: row-reverse;
+}
+
+.blog-header {
+ margin-bottom: 3rem;
+}
+
+.blog-header h1 {
+ margin-bottom: 0;
+}
+
+.blog-header h2 {
+ margin-top: 0;
+ font-size: 2rem;
+}
+
+.blog-header h3 {
+ font-size: 1.2rem;
+}
+
+.blog-header time:before {
+ content: ' | ';
+}
diff --git a/docs/src/client/assets/css/docs.css b/docs/src/client/assets/css/docs.css
new file mode 100644
index 00000000..d2d677b6
--- /dev/null
+++ b/docs/src/client/assets/css/docs.css
@@ -0,0 +1,287 @@
+/* ======================================================== */
+/* DOCS */
+/* ======================================================== */
+
+dl,
+ol,
+ul {
+ list-style: none;
+ margin-top: 0;
+ padding-left: 0;
+}
+
+dl dl,
+dl ol,
+dl ul,
+ol dl,
+ol ol,
+ol ul,
+ul dl,
+ul ol,
+ul ul {
+ font-size: 90%;
+ margin: 1.5rem 0 1.5rem 3rem;
+}
+
+ol {
+ list-style: decimal inside;
+}
+
+ul {
+ list-style: circle inside;
+}
+
+dd,
+dt,
+li {
+ margin-bottom: 1rem;
+}
+
+fieldset,
+input,
+select,
+textarea {
+ margin-bottom: 1.5rem;
+}
+
+dl,
+figure,
+form,
+ol,
+p,
+pre,
+table,
+ul {
+ margin-bottom: 2.5rem;
+}
+
+table {
+ border-spacing: 0;
+ width: 100%;
+}
+
+td,
+th {
+ border-bottom: 0.1rem solid #e1e1e1;
+ padding: 1.2rem 1.5rem;
+ text-align: left;
+}
+
+td:first-child,
+th:first-child {
+ padding-left: 0;
+}
+
+td:last-child,
+th:last-child {
+ padding-right: 0;
+}
+
+@media screen and (max-width: 40rem) {
+ table {
+ border-spacing: 0;
+ display: flex;
+ width: 100%;
+ }
+
+ table thead {
+ border-right: solid 0.1rem #e1e1e1;
+ }
+
+ table thead td,
+ table thead th {
+ padding-left: 0;
+ }
+
+ table thead td:first-child,
+ table thead th:first-child {
+ padding-left: 0;
+ }
+
+ table thead td:last-child,
+ table thead th:last-child {
+ padding-right: 1.2rem;
+ }
+
+ table tbody {
+ display: flex;
+ overflow-x: auto;
+ white-space: nowrap;
+ }
+
+ table tbody tr {
+ border-right: solid 0.1rem #e1e1e1;
+ }
+
+ table tbody tr:last-child {
+ border-right: none;
+ }
+
+ table td,
+ table th {
+ display: block;
+ }
+
+ table td:first-child,
+ table th:first-child {
+ padding-left: 1.2rem;
+ }
+
+ table td:last-child,
+ table th:last-child {
+ padding-right: 1.2rem;
+ }
+}
+
+hr {
+ border: 0;
+ border-top: 0.1rem solid #ccc;
+ margin: 3rem 0;
+}
+
+blockquote {
+ border-left: 0.3rem solid #d1d1d1;
+ margin-left: 0;
+ margin-right: 0;
+ padding: 1rem 1.5rem;
+}
+
+blockquote *:last-child {
+ margin-bottom: 0;
+}
+
+.custom-block.important,
+.custom-block.note,
+.custom-block.tip,
+.custom-block.example {
+ padding: 1rem 1.5rem;
+ margin-bottom: 2.5rem;
+ border: 2px solid;
+ border-radius: 5px;
+}
+
+div.custom-block p.custom-block-title {
+ font-weight: 600;
+ font-variant: unset;
+ font-size: 1.4rem;
+}
+
+div.custom-block p {
+ margin: 0 0 1rem;
+}
+
+.custom-block .custom-block-title {
+ font-weight: 600;
+ margin-bottom: 0.4rem;
+ font-variant: small-caps;
+}
+
+.custom-block.important {
+ background-color: var(--important-background);
+ border-color: var(--important-border);
+}
+
+p code {
+ font-family: monospace, monospace;
+ font-size: 0.9em;
+ background-color: rgba(206, 206, 206, 0.3);
+ padding: 0.3rem;
+ color: #333;
+ border-radius: 2px;
+}
+
+.custom-block.important p a {
+ color: var(--important-border);
+}
+
+.custom-block.important p a:hover {
+ background-color: rgba(224, 0, 46, 0.1);
+}
+
+.custom-block.note {
+ background-color: var(--note-background);
+ border-color: var(--note-border);
+}
+
+.custom-block.note p a {
+ color: var(--note-border);
+}
+
+.custom-block.note p a:hover {
+ background-color: rgba(2, 160, 224, 0.1);
+}
+
+.custom-block.tip {
+ background-color: var(--tip-background);
+ border-color: var(--tip-border);
+}
+
+.custom-block.tip p a {
+ color: #008649;
+}
+
+.custom-block.tip p a:hover {
+ background-color: rgba(0, 134, 73, 0.1);
+}
+
+.custom-block.warning {
+ background-color: var(--warning-background);
+ border-color: var(--warning-border);
+}
+
+.custom-block.example {
+ background-color: whitesmoke;
+ border-color: purple;
+}
+
+/* ======================================================== */
+
+/* CODE */
+
+/* ======================================================== */
+
+div[class*='language-'] {
+ position: relative;
+}
+
+div[class*='language-'] .highlight-lines {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ padding-top: 1rem;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ line-height: 1.4;
+}
+
+div[class*='language-'] .highlight-lines .highlighted {
+ background-color: rgba(255, 237, 21, 0.28);
+}
+
+div[class~='language-js']:before {
+ content: 'js';
+}
+
+div[class~='language-html']:before {
+ content: 'html';
+}
+
+div[class~='language-css']:before {
+ content: 'css';
+}
+
+div[class*='language-']:before {
+ position: absolute;
+ z-index: 3;
+ top: 0.2em;
+ right: 0.65em;
+ font-size: 0.8rem;
+ color: hsla(0, 0%, 0%, 0.69);
+}
+
+pre[class*='language-'] {
+ border-radius: 6px;
+}
diff --git a/docs/src/client/assets/css/main.css b/docs/src/client/assets/css/main.css
new file mode 100644
index 00000000..d7250e12
--- /dev/null
+++ b/docs/src/client/assets/css/main.css
@@ -0,0 +1,1019 @@
+/* ======================================================= */
+/* Custom Properies */
+/* ======================================================= */
+:root {
+ --color-bg-hero: #e4f2f8;
+ --color-bg-hero-dark: #d5e8f0;
+ --color-bg-section: #ffffff;
+ --color-bg-section-shade: #f4f5f6;
+ --color-bg-footer: #f7f7f7;
+ --color-bg-card: #e4f2f8;
+ --color-bg-search: #f4f5f6;
+ --color-text-link-footer: #707070;
+ --primary-color-blue: #02a0e0;
+ --primary-color-darkblue: #16325c;
+ --primary-color-blue-highlight: #def1fa;
+ --spotlight-bg: #ffffff;
+ --sidebar-width: 250px;
+ --sidebar-width-full: 300px;
+ --border-gray: #eee solid 2px;
+ --card-box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 3px 0 rgba(0, 0, 0, 0.12);
+ --trigger-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4);
+ --nav-box-shadow: 2px 0 10px rgba(0, 0, 0, 0.2);
+
+ /* button colors */
+ --button-color: #ffffff;
+ --button-color-bg: #02a0e0;
+ --button-color-bg-active: #007aac;
+ --button-brand-color-bg: #ff6000;
+ --button-brand-color-bg-active: #df5400;
+
+ /* alert colors */
+ --important-border: #e0002e;
+ --important-background: #ffe6e5;
+ --note-border: #02a0e0;
+ --note-background: #e2f4fc;
+ --tip-border: #00b462;
+ --tip-background: #e1f6ed;
+ --warning-border: #f1a019;
+ --warning-background: #f8f2e7;
+}
+
+/* ======================================================== */
+/* Common Elements */
+/* ======================================================== */
+*,
+:after,
+:before {
+ box-sizing: border-box;
+}
+
+html,
+body {
+ width: 100%;
+ height: 100%;
+}
+
+html {
+ font-family: 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial,
+ 'Lucida Grande', sans-serif;
+ font-weight: 300;
+ font-size: 16px;
+ line-height: 1.6;
+ box-sizing: border-box;
+}
+
+body {
+ background: white;
+ color: var(--primary-color-darkblue);
+ margin: 0;
+ min-height: 100%;
+ flex-direction: column;
+ align-items: stretch;
+}
+
+main {
+ flex-grow: 1;
+}
+
+header,
+main,
+footer {
+ flex-shrink: 0;
+}
+
+a {
+ color: var(--primary-color-blue);
+ text-decoration: none;
+ border: none;
+}
+
+a:hover {
+ background-color: var(--primary-color-blue-highlight);
+}
+
+dl,
+ol,
+ul {
+ list-style: none;
+ margin-top: 0;
+ padding-left: 0;
+}
+
+h1,
+h2,
+h3,
+h4 {
+ color: var(--primary-color-darkblue);
+ line-height: 1.25;
+}
+
+h1 {
+ font-size: 1.4rem;
+ font-weight: 300;
+}
+
+h2 {
+ font-size: 1.9rem;
+}
+
+h3 {
+ font-size: 1.2rem;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a {
+ border: none;
+}
+
+h1 a:hover,
+h2 a:hover,
+h3 a:hover,
+h4 a:hover {
+ background-color: unset;
+ border: none;
+}
+
+button {
+ background-color: var(--button-color-bg);
+ border: none;
+ display: inline-block;
+ border-radius: 0.4rem;
+ padding: 0.5rem 3rem;
+ color: var(--button-color);
+ font-size: 1.4rem;
+}
+
+button + button {
+ margin-left: 10px;
+}
+
+button:hover,
+button:focus,
+button:active,
+button:visited {
+ text-decoration: none;
+}
+
+button:active,
+button:hover,
+button:focus {
+ background-color: var(--button-color-bg-active);
+}
+
+button.brand {
+ background-color: var(--button-brand-color-bg);
+}
+
+button.brand:active,
+button.brand:hover,
+button.brand:focus {
+ background-color: var(--button-brand-color-bg-active);
+}
+
+.card {
+ padding: 1rem;
+ margin: 1rem;
+ flex: 1;
+}
+
+.card-shade {
+ background-color: var(--color-bg-card);
+ border-radius: 5px;
+ padding: 1rem 2rem;
+}
+
+.flex-wrapper {
+ display: block;
+}
+
+article {
+ flex: 1;
+ padding: 2rem;
+ overflow: auto;
+ padding-top: 1rem;
+ font-size: 1.1rem;
+}
+
+article ul li {
+ color: var(--primary-color-darkblue);
+}
+
+article h1 {
+ font-size: 2rem;
+ font-weight: bold;
+ line-height: 1.2;
+ text-indent: -1.7rem;
+ padding-left: 1.7rem;
+}
+
+article h2 {
+ text-indent: -1.6rem;
+ padding-left: 1.5rem;
+}
+article a {
+ border-bottom: dotted 1px;
+}
+
+article h1 a,
+article h2 a,
+article h3 a {
+ border: none;
+}
+
+.blog article {
+ max-width: unset;
+}
+
+@media screen and (min-width: 48em) {
+ article {
+ padding-left: 4rem;
+ padding-right: 2.3rem;
+ }
+
+ .blog article {
+ padding-left: 3rem;
+ }
+}
+
+@media screen and (min-width: 48em) {
+ body {
+ display: flex;
+ }
+
+ .content-wrapper {
+ max-width: 1200px;
+ margin: 0 auto;
+ width: 100%;
+ }
+
+ .flex-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ }
+}
+
+@media only screen and (min-width: 55em) {
+ article h1 {
+ font-size: 3rem;
+ }
+}
+
+/* ======================================================== */
+/* HEADER */
+/* ======================================================== */
+.header {
+ background-color: #fff;
+ box-shadow: 1px 1px 4px 0 rgba(0, 0, 0, 0.1);
+}
+
+.header a:hover,
+.header a:active {
+ background-color: transparent;
+}
+
+.header ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ overflow: hidden;
+ background-color: #fff;
+}
+
+.header li {
+ margin-bottom: 0;
+}
+
+.header li a {
+ display: block;
+ padding: 20px 20px;
+ text-decoration: none;
+ font-weight: bold;
+ font-size: 1.1rem;
+ color: var(--text-color);
+}
+
+.header li a:hover,
+.header .menu-btn:hover {
+ background-color: #f4f4f4;
+}
+
+.header .logo {
+ display: block;
+ float: left;
+ text-decoration: none;
+ padding: 15px 10px 0;
+}
+
+.header .icon-logo {
+ display: inline-block;
+ width: 40px;
+ height: 36px;
+ vertical-align: middle;
+}
+
+.header .title {
+ display: none;
+ vertical-align: middle;
+}
+
+.header .menu {
+ clear: both;
+ max-height: 0;
+ transition: max-height 0.2s ease-out;
+}
+
+.header .menu-icon {
+ cursor: pointer;
+ float: right;
+ padding: 32px 20px;
+ position: relative;
+ user-select: none;
+}
+
+.header .menu-icon .navicon {
+ background: #333;
+ display: block;
+ height: 2px;
+ position: relative;
+ transition: background 0.2s ease-out;
+ width: 18px;
+}
+
+.header .menu-icon .navicon:before,
+.header .menu-icon .navicon:after {
+ background: #333;
+ content: '';
+ display: block;
+ height: 100%;
+ position: absolute;
+ transition: all 0.2s ease-out;
+ width: 100%;
+}
+
+.header .menu-icon .navicon:before {
+ top: 5px;
+}
+
+.header .menu-icon .navicon:after {
+ top: -5px;
+}
+
+/* menu btn */
+
+.header .menu-btn {
+ display: none;
+}
+
+.header .menu-btn:checked ~ .menu {
+ max-height: 260px;
+}
+
+.header .menu-btn:checked ~ .menu-icon .navicon {
+ background: transparent;
+}
+
+.header .menu-btn:checked ~ .menu-icon .navicon:before {
+ transform: rotate(-45deg);
+}
+
+.header .menu-btn:checked ~ .menu-icon .navicon:after {
+ transform: rotate(45deg);
+}
+
+.header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:before,
+.header .menu-btn:checked ~ .menu-icon:not(.steps) .navicon:after {
+ top: 0;
+}
+
+.github-corner {
+ display: none;
+}
+
+.github-corner:hover .octo-arm {
+ animation: octocat-wave 560ms ease-in-out;
+}
+
+@keyframes octocat-wave {
+ 0%,
+ 100% {
+ transform: rotate(0);
+ }
+
+ 20%,
+ 60% {
+ transform: rotate(-25deg);
+ }
+
+ 40%,
+ 80% {
+ transform: rotate(10deg);
+ }
+}
+
+@media screen and (min-width: 48em) {
+ .header .logo {
+ padding: 5px;
+ }
+
+ .header .title {
+ display: inline-block;
+ }
+
+ .header li {
+ float: left;
+ }
+
+ .header li a {
+ padding: 20px 30px;
+ font-weight: 300;
+ }
+
+ .header .menu {
+ clear: none;
+ float: right;
+ max-height: none;
+ }
+
+ .header .menu-icon {
+ display: none;
+ }
+
+ .header .menu li.active {
+ box-shadow: inset 0 -4px 0 var(--primary-color-blue);
+ }
+
+ .github-corner {
+ display: block;
+ }
+}
+
+@media screen and (min-width: 55em) {
+ .header .logo {
+ padding: 5px 0;
+ }
+}
+
+/* search stuff */
+.search-box {
+ margin: 18px 0 0;
+ float: right;
+}
+
+.search-input {
+ width: 0;
+ appearance: none;
+ background: transparent;
+ border: none;
+ color: var(--primary-color-darkblue);
+ font-size: 1.1rem;
+ font-weight: 300;
+ font-family: inherit;
+ position: relative;
+ padding: 4px 4px 4px 34px;
+ margin: 0;
+ background-image: url(/assets/images/search.svg);
+ background-size: 20px 20px;
+ background-repeat: no-repeat;
+ background-position-y: center;
+ background-position-x: 4px;
+ transition: width 0.2s ease, padding 0.2s ease;
+ cursor: pointer;
+}
+
+.search-input:focus {
+ width: 170px;
+ background-color: var(--color-bg-search);
+ outline: none;
+}
+
+.ds-dropdown-menu {
+ position: relative !important;
+ width: 100% !important;
+ min-width: 0 !important;
+}
+
+@media screen and (min-width: 48em) {
+ .search-box {
+ margin-right: 50px;
+ }
+
+ .ds-dropdown-menu {
+ position: absolute !important;
+ width: auto !important;
+ min-width: 500px !important;
+ }
+}
+
+@media (min-width: 65em) {
+ .search-box {
+ margin: 18px 48px 0 10px;
+ }
+}
+
+/* ======================================================== */
+/* FOOTER */
+/* ======================================================== */
+.footer {
+ background-color: var(--color-bg-footer);
+ padding: 2rem;
+}
+
+.footer .flex-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.footer .copyright {
+ margin-bottom: 20px;
+}
+
+.footer .links {
+ font-size: 1.15rem;
+ line-height: 2.2rem;
+}
+
+.footer .sf-links {
+ flex: 1 1 70%;
+}
+
+.footer .social-links {
+ flex: 1 1 30%;
+}
+
+.footer .footer-sfdc-logo {
+ width: 100px;
+}
+
+.footer h4 {
+ margin-top: 0;
+ text-transform: uppercase;
+}
+
+.footer li {
+ list-style: none;
+ margin: 0;
+}
+
+.footer li a {
+ color: var(--color-text-link-footer);
+}
+
+.footer li a:hover {
+ color: var(--primary-color-blue);
+}
+
+@media screen and (min-width: 48em) {
+ .footer .copyright {
+ flex: 1 1 50%;
+ }
+
+ .footer .sf-links {
+ flex: 1 1 30%;
+ }
+
+ .footer .social-links {
+ flex: 1 1 20%;
+ }
+
+ .footer {
+ padding-bottom: 5rem;
+ }
+}
+
+/* ======================================================== */
+/* Hero */
+/* ======================================================== */
+section.hero {
+ background-color: var(--color-bg-hero);
+}
+
+.hero .flex-wrapper {
+ flex-wrap: nowrap;
+}
+
+.hero .title {
+ font-weight: 100;
+ padding: 0;
+ margin-top: 0;
+ text-indent: 0;
+}
+
+.hero .subtitle {
+ font-size: 1.1rem;
+ line-height: 1.8rem;
+}
+
+.center-content {
+ display: none;
+}
+
+.hero .left-content,
+.hero .right-content {
+ padding: 20px 30px;
+}
+
+.hero .left-content {
+ text-align: center;
+}
+
+.hero .right-content {
+ background-color: var(--color-bg-hero-dark);
+}
+
+.hero .description {
+ padding: 0.25rem 1rem;
+ margin-top: 2rem;
+ text-align: left;
+}
+
+.hero .left-content .description {
+ border-left: 5px solid #fff;
+ font-size: 1rem;
+}
+
+.hero .right-content .description {
+ text-align: center;
+}
+
+.hero .thunder {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ display: none;
+}
+
+.hero code {
+ margin: 0 0.2rem;
+ padding: 0.2rem 0.5rem;
+ white-space: nowrap;
+}
+
+.hero pre {
+ overflow: auto;
+ margin-bottom: 0;
+}
+
+.hero pre > code {
+ display: block;
+ white-space: pre;
+ text-align: left;
+}
+
+@media (min-width: 65em) {
+ .home section.hero {
+ padding: 4rem;
+ }
+
+ .hero .title {
+ font-size: 2.5rem;
+ }
+
+ .hero .subtitle {
+ font-size: 1.2rem;
+ }
+
+ .hero .left-content {
+ background-color: transparent;
+ flex: 1 1 30%;
+ padding: 80px 30px;
+ }
+ .hero .left-content .description {
+ font-size: 1.1rem;
+ }
+ .hero .center-content {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ align-items: center;
+ flex: 1 1 30%;
+ }
+
+ .hero .right-content {
+ background-color: transparent;
+ margin: auto 0;
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ align-items: center;
+ flex: 1 1 30%;
+ }
+
+ .hero pre > code {
+ font-size: 1.3rem;
+ }
+}
+
+/* ======================================================== */
+/* Other homepage content */
+/* ======================================================== */
+.home article {
+ padding: 0;
+}
+
+.home .learn {
+ margin: 0 auto;
+}
+
+.home section {
+ padding: 1rem;
+}
+
+.home section.hero {
+ padding: 0;
+}
+
+.home section.shade {
+ padding: 2rem;
+ background: var(--color-bg-section-shade);
+ text-align: center;
+}
+
+.home section h3 {
+ font-size: 1.7rem;
+}
+
+.home section h4 {
+ font-size: 1.4rem;
+ margin: 1rem 0;
+}
+
+h3.benefitsHeading {
+ text-align: center;
+}
+
+.spotlight {
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ align-items: center;
+ margin: auto;
+ border-radius: 50%;
+ background: var(--spotlight-bg);
+ width: 190px;
+ height: 190px;
+ margin: 10px auto;
+}
+
+.secondCard {
+ border-top: var(--border-gray);
+ border-bottom: var(--border-gray);
+ border-left: none;
+ border-right: none;
+}
+
+@media screen and (min-width: 48em) {
+ .home .learn {
+ max-width: 600px;
+ }
+
+ h2.title {
+ font-size: 2.5rem;
+ margin-top: unset;
+ }
+
+ .secondCard {
+ border-top: none;
+ border-bottom: none;
+ border-left: var(--border-gray);
+ border-right: var(--border-gray);
+ }
+}
+
+/* ======================================================== */
+/* NOT FOUND */
+/* ======================================================== */
+
+.notfound .content-wrapper {
+ padding: 50px;
+ text-align: center;
+}
+
+/* ======================================================== */
+/* NAV */
+/* ======================================================== */
+
+.nav {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ overflow-y: auto;
+ overflow-x: hidden;
+ margin-left: calc(-1 * (var(--sidebar-width) + 10px));
+ width: var(--sidebar-width);
+ transition: margin 0.2s ease;
+ box-shadow: var(--nav-box-shadow);
+ background-color: #f6f4f4;
+ z-index: 10;
+}
+.nav.open {
+ margin-left: 0;
+}
+.home .nav-trigger {
+ display: none;
+}
+.nav-trigger {
+ position: fixed;
+ display: flex;
+ justify-content: center;
+ align-content: center;
+ align-items: center;
+ bottom: 20px;
+ right: 20px;
+ background-color: var(--primary-color-blue-highlight) !important;
+ width: 55px;
+ height: 55px;
+ border-radius: 50%;
+ box-shadow: var(--trigger-box-shadow);
+ z-index: 9;
+}
+.nav-trigger.open > svg {
+ display: none;
+}
+.nav-trigger.open:after {
+ content: 'X';
+ font-weight: bold;
+ color: var(--primary-color-darkblue);
+ font-size: 1.7rem;
+}
+@media screen and (min-width: 48em) {
+ .nav {
+ display: block;
+ overflow: initial;
+ position: relative;
+ margin: 7px 0 0;
+ box-shadow: none;
+ background-color: transparent;
+ }
+ .nav-trigger {
+ display: none;
+ }
+}
+
+@media screen and (min-width: 55em) {
+ .nav {
+ width: var(--sidebar-width-full);
+ }
+}
+
+.nav input {
+ display: none;
+}
+
+.nav ol,
+.nav ul,
+.nav li {
+ list-style: none;
+ margin: 0;
+}
+
+.nav label {
+ margin: 0;
+ cursor: pointer;
+ font-weight: 300;
+ line-height: 0.8rem;
+ color: #111;
+ display: flex;
+ flex-direction: row-reverse;
+ align-items: stretch;
+}
+
+.nav a,
+.nav label {
+ color: #333;
+}
+
+.nav label > .icon-angle,
+.nav label > a {
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+}
+
+.nav label a {
+ padding: 1.3rem;
+ flex-grow: 1;
+}
+
+nav li.active label {
+ background-color: var(--primary-color-blue);
+}
+
+nav li.active label a {
+ color: #fff;
+}
+
+nav li.active label:hover {
+ background-color: var(--primary-color-darkblue);
+}
+
+nav li.active span.icon-angle {
+ color: #fff;
+}
+
+nav li label:hover {
+ background: rgba(3, 160, 224, 0.1);
+}
+
+nav li.active ul a {
+ background: rgba(3, 160, 224, 0.2);
+}
+
+nav li.active ul a:hover {
+ background: rgba(3, 160, 224, 0.35);
+}
+
+.page-nav .prev {
+}
+
+.page-nav .next {
+ float: right;
+}
+
+nav a:focus,
+nav a:hover,
+nav label:focus,
+nav label:hover {
+ background: unset;
+}
+
+nav ul.nav__list {
+ background-color: #f6f4f4;
+ border-radius: 5px;
+}
+
+/**
+ * Styling first level lists items
+ */
+
+.group-list a,
+.group-list label {
+ padding: 0.8rem 3rem;
+ padding-right: 1rem;
+ display: block;
+}
+
+.group-list a:focus,
+.group-list a:hover,
+.group-list label:focus,
+.group-list label:hover {
+ background: rgba(220, 241, 252);
+}
+
+.group-list {
+ overflow: hidden;
+}
+
+.nav__list input[type='checkbox']:checked + label + ul {
+ /* reset the height when checkbox is checked */
+ max-height: 1000px;
+}
+
+/**
+ * Rotating chevron icon
+ */
+
+.nav__list input[type='checkbox']:checked + label > span {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+/* ======================================================== */
+/* Icons */
+/* ======================================================== */
+
+@font-face {
+ font-family: 'icomoon';
+ src: url('data:font/woff;base64,d09GRgABAAAAAAM4AAsAAAAABEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAD4AAABgDxID6mNtYXAAAAFIAAAAOAAAAFQXVtKHZ2FzcAAAAYAAAAAIAAAACAAAABBnbHlmAAABiAAAAFEAAACIR1/mS2hlYWQAAAHcAAAAKgAAADYSeHnEaGhlYQAAAggAAAAcAAAAJAUQA8ZobXR4AAACJAAAABIAAAAUB4AAMmxvY2EAAAI4AAAADAAAAAwAKABYbWF4cAAAAkQAAAAWAAAAIAAHABduYW1lAAACXAAAAM0AAAGGmUoJ+3Bvc3QAAAMsAAAADAAAACAAAwAAeAFjYGY8wDiBgZWBgWkm0xkGBoZ+CM34msGYkZMBFTAKMKABBwaGlwzMB/4fYHBgBmKQGiRZBQYGAF9ECwUAAHgBY2BgYIZiGQZGCA0kGcE0C4MFkOZi4GBgAkJGBoWXDP///v/PAARwNuP/x+IsYB1wAAByagy+AAEAAf//AA94AWNgZIABJgYGc0sQlwQxI4bjjH5MOxlEgBx2NiV9RjUTe0Z1EGFmJM8oJsLo94ZdhJ2Pnf3sWXYgJcL+hp1x/QsI8+RJiNQLdqBuAGAvDs8AAAB4AWNgZACDj7OnOsfz23xl4GYB82+yzWZHphn9mHYCKQ4GJhAPAAaeCCoAAHgBY2BkYGA+8P8AAwMLAwgw+gFFUAErAFHlAt14AWNhQAAmIGZsYDACAAIqALoAAAAAAAAACgAUAB4ARHgBY2BkYGBgZRAF0iDAxIAGAAMMAB8AAHgBbcw1UkRBEIDhf903wqO5AC4ZIe6arvb6vql6gp+AcxBzRrqKDp/NfK1Ak18yAHqWwJxVt8059YE5r07MBWosmouavzBXWeObHJl8RTNNSuasemjOqQ/NefWXucASzlzU/L25yh4/456fex8wpodnjscTPEsYjX3gtje2eEYIiRijBRzbbLCVOpWavJdhMuuE3CMMSZjRIUztPPZB7IYSSNiJpe+67+6s56+0bYNjtE6MY4iohJAOMUIfR5d3HGfoLq7+d7HxB9yDPbcAAAB4AWNgZsALAAB9AAQ=')
+ format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
+
+[class^='icon-'],
+[class*=' icon-'] {
+ /* use !important to prevent issues with browser extensions that change fonts */
+ font-family: 'icomoon' !important;
+ speak: none;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-angle {
+ margin: 10px;
+}
+
+.icon-angle:before {
+ content: '\e900';
+}
diff --git a/docs/src/client/assets/css/normalize.css b/docs/src/client/assets/css/normalize.css
new file mode 100644
index 00000000..af9eb6a6
--- /dev/null
+++ b/docs/src/client/assets/css/normalize.css
@@ -0,0 +1,441 @@
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS and IE text size adjust after device orientation change,
+ * without disabling user zoom.
+ */
+
+html {
+ font-family: sans-serif;
+ /* 1 */
+ -ms-text-size-adjust: 100%;
+ /* 2 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ /* 1 */
+ vertical-align: baseline;
+ /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability of focused elements when they are also in an
+ * active/hover state.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+ margin: 0;
+ /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"],
+/* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ /* 2 */
+ cursor: pointer;
+ /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type='checkbox'],
+input[type='radio'] {
+ box-sizing: border-box;
+ /* 1 */
+ padding: 0;
+ /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type='number']::-webkit-inner-spin-button,
+input[type='number']::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
+ */
+
+input[type='search'] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ box-sizing: content-box;
+ /* 2 */
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type='search']::-webkit-search-cancel-button,
+input[type='search']::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0;
+ /* 1 */
+ padding: 0;
+ /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/docs/src/client/assets/css/prismjs/themes/prism-tomorrow.css b/docs/src/client/assets/css/prismjs/themes/prism-tomorrow.css
new file mode 100644
index 00000000..ef03dc90
--- /dev/null
+++ b/docs/src/client/assets/css/prismjs/themes/prism-tomorrow.css
@@ -0,0 +1,121 @@
+/**
+ * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
+ * Based on https://github.com/chriskempson/tomorrow-theme
+ * @author Rose Pritchard
+ */
+
+code[class*='language-'],
+pre[class*='language-'] {
+ color: #ccc;
+ background: none;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+/* Code blocks */
+pre[class*='language-'] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*='language-'],
+pre[class*='language-'] {
+ background: #2d2d2d;
+}
+
+/* Inline code */
+:not(pre) > code[class*='language-'] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.block-comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #999;
+}
+
+.token.punctuation {
+ color: #ccc;
+}
+
+.token.tag,
+.token.attr-name,
+.token.namespace,
+.token.deleted {
+ color: #e2777a;
+}
+
+.token.function-name {
+ color: #6196cc;
+}
+
+.token.boolean,
+.token.number,
+.token.function {
+ color: #f08d49;
+}
+
+.token.property,
+.token.class-name,
+.token.constant,
+.token.symbol {
+ color: #f8c555;
+}
+
+.token.selector,
+.token.important,
+.token.atrule,
+.token.keyword,
+.token.builtin {
+ color: #cc99cd;
+}
+
+.token.string,
+.token.char,
+.token.attr-value,
+.token.regex,
+.token.variable {
+ color: #7ec699;
+}
+
+.token.operator,
+.token.entity,
+.token.url {
+ color: #67cdcc;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
+
+.token.inserted {
+ color: green;
+}
diff --git a/docs/src/client/assets/css/prismjs/themes/prism.css b/docs/src/client/assets/css/prismjs/themes/prism.css
new file mode 100644
index 00000000..8f1c5577
--- /dev/null
+++ b/docs/src/client/assets/css/prismjs/themes/prism.css
@@ -0,0 +1,145 @@
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+
+code[class*='language-'],
+pre[class*='language-'] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*='language-']::-moz-selection,
+pre[class*='language-'] ::-moz-selection,
+code[class*='language-']::-moz-selection,
+code[class*='language-'] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*='language-']::selection,
+pre[class*='language-'] ::selection,
+code[class*='language-']::selection,
+code[class*='language-'] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+ code[class*='language-'],
+ pre[class*='language-'] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*='language-'] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+
+:not(pre) > code[class*='language-'],
+pre[class*='language-'] {
+ background: #fff;
+ border: 1px solid #e0e1e1;
+ margin-bottom: 2.5rem;
+}
+
+/* Inline code */
+:not(pre) > code[class*='language-'] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: 0.7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, 0.5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #dd4a68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/docs/src/client/assets/fonts/SalesforceSans-Bold.woff2 b/docs/src/client/assets/fonts/SalesforceSans-Bold.woff2
new file mode 100644
index 00000000..8425952a
Binary files /dev/null and b/docs/src/client/assets/fonts/SalesforceSans-Bold.woff2 differ
diff --git a/docs/src/client/assets/fonts/SalesforceSans-Italic.woff2 b/docs/src/client/assets/fonts/SalesforceSans-Italic.woff2
new file mode 100644
index 00000000..f729b677
Binary files /dev/null and b/docs/src/client/assets/fonts/SalesforceSans-Italic.woff2 differ
diff --git a/docs/src/client/assets/fonts/SalesforceSans-Regular.woff2 b/docs/src/client/assets/fonts/SalesforceSans-Regular.woff2
new file mode 100644
index 00000000..37c76713
Binary files /dev/null and b/docs/src/client/assets/fonts/SalesforceSans-Regular.woff2 differ
diff --git a/docs/src/client/assets/fonts/icomoon.eot b/docs/src/client/assets/fonts/icomoon.eot
new file mode 100644
index 00000000..b10dfcf8
Binary files /dev/null and b/docs/src/client/assets/fonts/icomoon.eot differ
diff --git a/docs/src/client/assets/fonts/icomoon.svg b/docs/src/client/assets/fonts/icomoon.svg
new file mode 100644
index 00000000..9640952f
--- /dev/null
+++ b/docs/src/client/assets/fonts/icomoon.svg
@@ -0,0 +1,11 @@
+
+
+
\ No newline at end of file
diff --git a/docs/src/client/assets/fonts/icomoon.ttf b/docs/src/client/assets/fonts/icomoon.ttf
new file mode 100644
index 00000000..92a6e9cf
Binary files /dev/null and b/docs/src/client/assets/fonts/icomoon.ttf differ
diff --git a/docs/src/client/assets/fonts/icomoon.woff b/docs/src/client/assets/fonts/icomoon.woff
new file mode 100644
index 00000000..c0d0e0f0
Binary files /dev/null and b/docs/src/client/assets/fonts/icomoon.woff differ
diff --git a/docs/src/client/assets/images/accessibility_handle_focus_component.png b/docs/src/client/assets/images/accessibility_handle_focus_component.png
new file mode 100644
index 00000000..13a3f51c
Binary files /dev/null and b/docs/src/client/assets/images/accessibility_handle_focus_component.png differ
diff --git a/docs/src/client/assets/images/accessibility_handle_focus_input.png b/docs/src/client/assets/images/accessibility_handle_focus_input.png
new file mode 100644
index 00000000..8744a3c4
Binary files /dev/null and b/docs/src/client/assets/images/accessibility_handle_focus_input.png differ
diff --git a/docs/src/client/assets/images/android-chrome-192x192.png b/docs/src/client/assets/images/android-chrome-192x192.png
new file mode 100644
index 00000000..5c36d6ac
Binary files /dev/null and b/docs/src/client/assets/images/android-chrome-192x192.png differ
diff --git a/docs/src/client/assets/images/android-chrome-512x512.png b/docs/src/client/assets/images/android-chrome-512x512.png
new file mode 100644
index 00000000..91e2ca53
Binary files /dev/null and b/docs/src/client/assets/images/android-chrome-512x512.png differ
diff --git a/docs/src/client/assets/images/apple-touch-icon.png b/docs/src/client/assets/images/apple-touch-icon.png
new file mode 100644
index 00000000..6ec227c5
Binary files /dev/null and b/docs/src/client/assets/images/apple-touch-icon.png differ
diff --git a/docs/src/client/assets/images/favicon-16x16.png b/docs/src/client/assets/images/favicon-16x16.png
new file mode 100644
index 00000000..80bb0ce3
Binary files /dev/null and b/docs/src/client/assets/images/favicon-16x16.png differ
diff --git a/docs/src/client/assets/images/favicon-32x32.png b/docs/src/client/assets/images/favicon-32x32.png
new file mode 100644
index 00000000..e1406162
Binary files /dev/null and b/docs/src/client/assets/images/favicon-32x32.png differ
diff --git a/docs/src/client/assets/images/favicon.ico b/docs/src/client/assets/images/favicon.ico
new file mode 100644
index 00000000..f6c82d12
Binary files /dev/null and b/docs/src/client/assets/images/favicon.ico differ
diff --git a/docs/src/client/assets/images/lifecycle_render.svg b/docs/src/client/assets/images/lifecycle_render.svg
new file mode 100644
index 00000000..64250315
--- /dev/null
+++ b/docs/src/client/assets/images/lifecycle_render.svg
@@ -0,0 +1 @@
+
diff --git a/docs/src/client/assets/images/logo.png b/docs/src/client/assets/images/logo.png
new file mode 100644
index 00000000..31a0a113
Binary files /dev/null and b/docs/src/client/assets/images/logo.png differ
diff --git a/docs/src/client/assets/images/logo.svg b/docs/src/client/assets/images/logo.svg
new file mode 100644
index 00000000..1a844526
--- /dev/null
+++ b/docs/src/client/assets/images/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/src/client/assets/images/safari-pinned-tab.svg b/docs/src/client/assets/images/safari-pinned-tab.svg
new file mode 100644
index 00000000..c17baa47
--- /dev/null
+++ b/docs/src/client/assets/images/safari-pinned-tab.svg
@@ -0,0 +1,30 @@
+
+
+
diff --git a/docs/src/client/assets/images/salesforce.svg b/docs/src/client/assets/images/salesforce.svg
new file mode 100644
index 00000000..b5710ee9
--- /dev/null
+++ b/docs/src/client/assets/images/salesforce.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/src/client/assets/images/search.svg b/docs/src/client/assets/images/search.svg
new file mode 100644
index 00000000..ce337c99
--- /dev/null
+++ b/docs/src/client/assets/images/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/src/client/assets/images/third_party_lib.png b/docs/src/client/assets/images/third_party_lib.png
new file mode 100644
index 00000000..27174499
Binary files /dev/null and b/docs/src/client/assets/images/third_party_lib.png differ
diff --git a/docs/src/client/assets/js/lwc/compiler_worker_v100.js b/docs/src/client/assets/js/lwc/compiler_worker_v100.js
new file mode 100644
index 00000000..425e4d5b
--- /dev/null
+++ b/docs/src/client/assets/js/lwc/compiler_worker_v100.js
@@ -0,0 +1,119 @@
+/* eslint-disable no-undef */
+// -- globalThis polyfill -----------------------------------------------------
+(function() {
+ if (typeof globalThis === 'object') return;
+ // eslint-disable-next-line no-extend-native
+ Object.defineProperty(Object.prototype, '__magic__', {
+ get: function() {
+ return this;
+ },
+ configurable: true,
+ });
+ __magic__.globalThis = __magic__;
+ delete Object.prototype.__magic__;
+})();
+
+// -- https://github.com/nolanlawson/promise-worker/blob/master/register.js
+function isPromise(obj) {
+ // via https://unpkg.com/is-promise@2.1.0/index.js
+ return (
+ !!obj &&
+ (typeof obj === 'object' || typeof obj === 'function') &&
+ typeof obj.then === 'function'
+ );
+}
+
+function registerPromiseWorker(callback) {
+ function postOutgoingMessage(e, messageId, error, result) {
+ function postMessage(msg) {
+ /* istanbul ignore if */
+ if (typeof self.postMessage !== 'function') {
+ // service worker
+ e.ports[0].postMessage(msg);
+ } else {
+ // web worker
+ self.postMessage(msg);
+ }
+ }
+ if (error) {
+ /* istanbul ignore else */
+ if (typeof console !== 'undefined' && 'error' in console) {
+ // This is to make errors easier to debug. I think it's important
+ // enough to just leave here without giving the user an option
+ // to silence it.
+ // eslint-disable-next-line no-console
+ console.error('Worker caught an error:', error);
+ }
+ postMessage([
+ messageId,
+ {
+ message: error.message,
+ },
+ ]);
+ } else {
+ postMessage([messageId, null, result]);
+ }
+ }
+
+ function tryCatchFunc(callback, message) {
+ try {
+ return { res: callback(message) };
+ } catch (e) {
+ return { err: e };
+ }
+ }
+
+ function handleIncomingMessage(e, callback, messageId, message) {
+ var result = tryCatchFunc(callback, message);
+
+ if (result.err) {
+ postOutgoingMessage(e, messageId, result.err);
+ } else if (!isPromise(result.res)) {
+ postOutgoingMessage(e, messageId, null, result.res);
+ } else {
+ result.res.then(
+ function(finalResult) {
+ postOutgoingMessage(e, messageId, null, finalResult);
+ },
+ function(finalError) {
+ postOutgoingMessage(e, messageId, finalError);
+ },
+ );
+ }
+ }
+
+ function onIncomingMessage(e) {
+ var payload = e.data;
+ if (!Array.isArray(payload) || payload.length !== 2) {
+ // message doens't match communication format; ignore
+ return;
+ }
+ var messageId = payload[0];
+ var message = payload[1];
+
+ if (typeof callback !== 'function') {
+ postOutgoingMessage(e, messageId, new Error('Please pass a function into register().'));
+ } else {
+ handleIncomingMessage(e, callback, messageId, message);
+ }
+ }
+
+ self.addEventListener('message', onIncomingMessage);
+}
+
+// -- main worker code -----------------------------------------------------
+
+importScripts('/assets/js/lwc/compiler_v100.js');
+const compile = globalThis.compile;
+
+registerPromiseWorker(async function({ operation, options }) {
+ if (operation === 'ping') {
+ return 'ready';
+ }
+
+ if (operation === 'compile') {
+ const { input, virtualFileSystem } = options;
+ const result = await compile(input, virtualFileSystem);
+ return result.output[0].code;
+ }
+});
diff --git a/docs/src/client/assets/site.webmanifest b/docs/src/client/assets/site.webmanifest
new file mode 100644
index 00000000..fd26c811
--- /dev/null
+++ b/docs/src/client/assets/site.webmanifest
@@ -0,0 +1,13 @@
+{
+ "background_color": "#fff",
+ "display": "standalone",
+ "icons": [{
+ "src": "images/logo.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }],
+ "name": "Lightning Web Components",
+ "short_name": "LWC",
+ "start_url": "/",
+ "theme_color": "#fff"
+}
diff --git a/docs/src/client/home.html b/docs/src/client/home.html
new file mode 100644
index 00000000..9c488d9d
--- /dev/null
+++ b/docs/src/client/home.html
@@ -0,0 +1,72 @@
+
+
+
+ Best
+ Delightful Benchmarking & Performance Testing
+
+ To install Lightning Web Components and create your first app, use the open source
+ lwc-create-app
tool.
+
+
+$ npx lwc-create-app my-app
+$ cd my-app
+$ npm run watch
+
+
+ The npx tool installs with npm 5.2+. See Installation.
+
+
+
+
+
+
+
+
+
+
+
+
+ Lightning Fast
+ Lean, 7kb runtime optimized for performance, with minimal boilerplate code.
+
+
+
+ Standards-Based
+ Lightning Web Components uses standard HTML, modern JavaScript (ES6+), and the best of native Web Components.
+
+
+
+ Easy to Learn
+ Leave abstractions behind and build custom elements with HTML, JavaScript, and CSS.
+
+
+
+
+
+
+
+ Build Lightning Web Components Anywhere
+
+
+ Learn Once, Build Anywhere
+ Create fast, versatile web components and apps using the stack and tools your team prefers.
+
+
+ Drive the Roadmap, Define the Future
+ Shape the framework through your pull requests and help push native Web Components forward.
+
+
+ Web Standards Based, Enterprise Inspired
+ Use the latest web standards to build robust components that run in modern browsers and IE 11.
+
+
+
diff --git a/docs/src/client/modules/example/helloWorld/__tests__/helloWorld.spec.js b/docs/src/client/modules/example/helloWorld/__tests__/helloWorld.spec.js
new file mode 100644
index 00000000..de568c1d
--- /dev/null
+++ b/docs/src/client/modules/example/helloWorld/__tests__/helloWorld.spec.js
@@ -0,0 +1,8 @@
+import { createElement } from 'lwc';
+import HelloWorld from 'example/helloWorld';
+
+describe('example-hello-world', () => {
+ it('default dom', () => {
+ expect('foo').toBe('foo');
+ });
+});
diff --git a/docs/src/client/modules/example/helloWorld/helloWorld.html b/docs/src/client/modules/example/helloWorld/helloWorld.html
new file mode 100644
index 00000000..a5e6860c
--- /dev/null
+++ b/docs/src/client/modules/example/helloWorld/helloWorld.html
@@ -0,0 +1,3 @@
+
+ Hello, {name}
+
\ No newline at end of file
diff --git a/docs/src/client/modules/example/helloWorld/helloWorld.js b/docs/src/client/modules/example/helloWorld/helloWorld.js
new file mode 100644
index 00000000..bb5957e0
--- /dev/null
+++ b/docs/src/client/modules/example/helloWorld/helloWorld.js
@@ -0,0 +1,5 @@
+import { LightningElement, api } from 'lwc';
+
+export default class Example extends LightningElement {
+ @api name = 'World!';
+}
diff --git a/docs/src/client/notfound.html b/docs/src/client/notfound.html
new file mode 100644
index 00000000..95b5e3a2
--- /dev/null
+++ b/docs/src/client/notfound.html
@@ -0,0 +1,7 @@
+
+
+
diff --git a/docs/src/client/template.html b/docs/src/client/template.html
new file mode 100644
index 00000000..7aef3280
--- /dev/null
+++ b/docs/src/client/template.html
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{TITLE}}
+
+ {{HEADER_STYLES}}
+ {{HEADER_SCRIPTS}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Best
+
+
+
+
+
+
+
+
+
+
+
+ {{SIDEBAR}}
+
+
+
+
+
+ {{BODY}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/src/server/config.js b/docs/src/server/config.js
new file mode 100644
index 00000000..68cc6311
--- /dev/null
+++ b/docs/src/server/config.js
@@ -0,0 +1,27 @@
+const fs = require('fs');
+const path = require('path');
+
+const SITE_CONFIG = require('../../config');
+
+const PORT = process.env.PORT || 3001;
+const __ENV__ = process.env.NODE_ENV || 'development';
+const __PROD__ = __ENV__ === 'production';
+const __WATCH__ = process.env.WATCH || false;
+
+const DIST_DIR = path.resolve(__dirname, '../../dist');
+const CONTENT_DIR = path.resolve(__dirname, '../../content');
+const BLOG_DIR = path.join(CONTENT_DIR, 'blog');
+
+const BLOG_LIST = fs.readdirSync(BLOG_DIR).map(file => path.basename(file, '.md'));
+
+// Augment the pages of the config
+SITE_CONFIG.blog.pages = BLOG_LIST;
+
+module.exports = {
+ PORT,
+ __ENV__,
+ __PROD__,
+ __WATCH__,
+ DIST_DIR,
+ SITE_CONFIG,
+};
diff --git a/docs/src/server/index.js b/docs/src/server/index.js
new file mode 100644
index 00000000..72dd3ee0
--- /dev/null
+++ b/docs/src/server/index.js
@@ -0,0 +1,19 @@
+/* eslint-disable no-console */
+const os = require('os');
+const { createApp } = require('./server');
+const http = require('http');
+const { logger } = require('./utils/logger');
+const { PORT } = require('./config');
+
+(async function() {
+ const app = await createApp();
+ const server = http.createServer(app);
+ server.listen(PORT, function() {
+ logger.info(`Application available at: http://${os.hostname}:${PORT}`);
+ });
+})();
+
+process.on('unhandledRejection', (err, promise) => {
+ console.log(err);
+ process.exit(1);
+});
diff --git a/docs/src/server/server.js b/docs/src/server/server.js
new file mode 100644
index 00000000..2b25fcb9
--- /dev/null
+++ b/docs/src/server/server.js
@@ -0,0 +1,92 @@
+const fs = require('fs');
+const path = require('path');
+const express = require('express');
+const compression = require('compression');
+const serveStatic = require('serve-static');
+const { loggerMiddleware, errorLoggerMiddleware } = require('./utils/logger');
+const watchMiddleware = require('./utils/watchMiddleware');
+const cachePage = require('./utils/page-caching');
+
+const { __PROD__, __WATCH__, SITE_CONFIG, DIST_DIR } = require('./config');
+const { docs, blog, tutorial } = SITE_CONFIG;
+
+module.exports.createApp = async function createApp() {
+ const app = express();
+ app.use(loggerMiddleware);
+
+ // GZip all the responses.
+ app.use(compression());
+
+ if (__WATCH__) {
+ await require('./utils/watch')(app);
+ }
+
+ // Match all the request to serve static assets
+ const assetsConfig = { immutable: true, maxAge: 31536000 * 1000 };
+ app.use('/assets/js', serveStatic(path.join(DIST_DIR, 'assets/js'), assetsConfig));
+ app.use('/assets/css/prod', serveStatic(path.join(DIST_DIR, 'assets/css/prod'), assetsConfig));
+ app.use(express.static(DIST_DIR));
+
+ function sendFile(name, res) {
+ // TODO: We should use streaming, but will be more work for the watcher
+ res.send(fs.readFileSync(path.resolve(DIST_DIR, `${name}.html`), 'utf8'));
+ }
+
+ // -- Router ------------------------------------------------------------------
+ const prod = __PROD__;
+ const blog_prefix = 'blog_';
+ const tutorial_prefix = 'tutorial_';
+
+ // Home
+ app.get(
+ ['/', '/home'],
+ [
+ cachePage(['home'], DIST_DIR, { prod, alias: { '/': 'home' } }),
+ watchMiddleware(__WATCH__),
+ (req, res) => sendFile('home', res),
+ ],
+ );
+
+ // Guide
+ app.get('/guide/:page', [
+ cachePage(docs.pages, DIST_DIR, { prod }),
+ watchMiddleware(__WATCH__),
+ (req, res) => sendFile(req.params.page, res),
+ ]);
+
+ // Blog (redirect to latests)
+ app.get('/blog', (req, res) => res.redirect(`/blog/${blog.latest}`));
+
+ // Blog Pages
+ app.get('/blog/:page', [
+ cachePage(blog.pages, DIST_DIR, { prod, prefix: blog_prefix }),
+ watchMiddleware(__WATCH__),
+ (req, res) => sendFile(`${blog_prefix}${req.params.page}`, res),
+ ]);
+
+ // 404 error handling
+ app.use([
+ cachePage(['notfound'], DIST_DIR, { prod }),
+ watchMiddleware(__WATCH__),
+ (req, res) => {
+ res.status(404);
+ sendFile('notfound', res);
+ },
+ ]);
+
+ // 500 error handling
+ app.use([
+ cachePage(['notfound'], DIST_DIR, { prod }),
+ watchMiddleware(__WATCH__),
+ (error, req, res, next) => {
+ res.status(500);
+ sendFile('notfound', res);
+ next();
+ },
+ ]);
+
+ // Error middleware
+ app.use(errorLoggerMiddleware);
+
+ return app;
+};
diff --git a/docs/src/server/utils/http-error.js b/docs/src/server/utils/http-error.js
new file mode 100644
index 00000000..df5758c3
--- /dev/null
+++ b/docs/src/server/utils/http-error.js
@@ -0,0 +1,40 @@
+class HTTPError extends Error {
+ constructor(message, code) {
+ super(message);
+ this.code = code;
+ }
+
+ toJSON() {
+ return {
+ code: this.code,
+ message: this.message,
+ };
+ }
+}
+
+class BadRequest extends HTTPError {
+ constructor(message) {
+ super(message, 400);
+ }
+}
+
+class NotFound extends HTTPError {
+ constructor() {
+ super('Not Found', 404);
+ }
+}
+
+class ServiceUnavailable extends HTTPError {
+ constructor() {
+ super('Service Unavailable', 503);
+ }
+}
+
+module.exports = {
+ HTTPError,
+
+ BadRequest,
+ NotFound,
+
+ ServiceUnavailable,
+};
diff --git a/docs/src/server/utils/logger.js b/docs/src/server/utils/logger.js
new file mode 100644
index 00000000..662b450e
--- /dev/null
+++ b/docs/src/server/utils/logger.js
@@ -0,0 +1,29 @@
+const { createLogger, format, transports } = require('winston');
+const expressWinston = require('express-winston');
+
+const { __ENV__ } = require('../config');
+
+const DEV_LOGGER_CONFIG = {
+ format: format.combine(format.colorize(), format.simple()),
+ meta: false,
+};
+
+const PROD_LOGGER_CONFIG = {
+ format: format.json(),
+ meta: true,
+};
+
+const LOGGER_CONFIG = {
+ ...(__ENV__ === 'production' ? PROD_LOGGER_CONFIG : DEV_LOGGER_CONFIG),
+ transports: [new transports.Console()],
+};
+
+const logger = createLogger(LOGGER_CONFIG);
+const loggerMiddleware = expressWinston.logger(LOGGER_CONFIG);
+const errorLoggerMiddleware = expressWinston.errorLogger(LOGGER_CONFIG);
+
+module.exports = {
+ logger,
+ loggerMiddleware,
+ errorLoggerMiddleware,
+};
diff --git a/docs/src/server/utils/page-caching.js b/docs/src/server/utils/page-caching.js
new file mode 100644
index 00000000..3a561753
--- /dev/null
+++ b/docs/src/server/utils/page-caching.js
@@ -0,0 +1,35 @@
+const fs = require('fs');
+const path = require('path');
+const { NotFound } = require('./http-error');
+
+/*
+ * Caches in memory all of the doc pages and send them as a buffer when requested
+ */
+module.exports = function(pages, dist, { prod, prefix = '', alias = {} } = {}) {
+ if (prod) {
+ const PAGES = new Map();
+ // eslint-disable-next-line no-console
+ console.log(`[page-caching] - Storing ${pages.length} elements`);
+ pages.forEach(doc => {
+ const pageSource = fs.readFileSync(path.join(dist, `${prefix}${doc}.html`));
+ PAGES.set(prefix + doc, pageSource);
+ });
+
+ return function cache(req, res, next) {
+ const page = prefix + (req.params.page || req.path);
+ const pageSource = PAGES.get(page) || PAGES.get(alias[page]);
+
+ if (pageSource) {
+ res.type('html');
+ res.set('Cache-Control', 'public, max-age=600'); // cache for 10 minutes
+ res.send(Buffer.from(pageSource));
+ } else {
+ next(new NotFound());
+ }
+ };
+ } else {
+ return function noop_cache(req, res, next) {
+ next();
+ };
+ }
+};
diff --git a/docs/src/server/utils/request.js b/docs/src/server/utils/request.js
new file mode 100644
index 00000000..1840415b
--- /dev/null
+++ b/docs/src/server/utils/request.js
@@ -0,0 +1,37 @@
+const request = require('request');
+
+const { __ENV__ } = require('../config');
+const { logger } = require('./logger');
+
+function logRequest(uri, response) {
+ if (__ENV__ === 'test') {
+ return;
+ }
+
+ logger.info('request', {
+ uri,
+ timings: response.timings,
+ });
+}
+
+module.exports = function(uri) {
+ return new Promise((resolve, reject) => {
+ request(
+ {
+ uri,
+
+ // Enable timing for logging purposes
+ time: true,
+ },
+ (error, response) => {
+ logRequest(uri, response);
+
+ if (error) {
+ return reject(error);
+ }
+
+ return resolve(response);
+ },
+ );
+ });
+};
diff --git a/docs/src/server/utils/watch.js b/docs/src/server/utils/watch.js
new file mode 100644
index 00000000..a8f72190
--- /dev/null
+++ b/docs/src/server/utils/watch.js
@@ -0,0 +1,72 @@
+/* eslint-disable no-console */
+const reloadLib = require('reload');
+const watch = require('watch');
+const buildDocumentation = require('../../../scripts/build-documentation');
+const buildAssets = require('../../../scripts/build-assets');
+const buildBlog = require('../../../scripts/build-blog');
+const buildHome = require('../../../scripts/build-homepage');
+
+async function watchDirectory(dir, opts = { interval: 1 }, onChange) {
+ watch.watchTree(dir, opts, async (f, prev, curr) => {
+ if (typeof f == 'object' && prev === null && curr === null) {
+ console.log(`Watching for changes on ${dir}...`);
+ } else if (prev === null) {
+ // TODO: f is a new file
+ } else if (curr.nlink === 0) {
+ // TODO: f was removed
+ } else {
+ console.log(`[WATCHER] ${f} changed. Recompiling documentation...`);
+ try {
+ onChange(f);
+ } catch (err) {
+ console.log(`[WATCHER] ${f} changed. An error occurred compiling...`);
+ console.log(err);
+ }
+ }
+ });
+}
+
+module.exports = function watchDocChanges(app) {
+ const opts = { interval: 1 };
+ return reloadLib(app)
+ .then(function({ reload }) {
+ const update = {
+ assets: async () => {
+ await buildAssets();
+ reload();
+ },
+ home: async () => {
+ await buildHome();
+ reload();
+ },
+ docs: async () => {
+ await buildDocumentation();
+ reload();
+ },
+ blog: async () => {
+ await buildBlog();
+ reload();
+ }
+ };
+
+ // Watch Asssets
+ watchDirectory('src/client/assets', opts, update.assets);
+
+ // Watch home
+ watchDirectory('src/client', opts, update.home);
+
+ // Watch Docs
+ watchDirectory('content/docs', opts, update.docs);
+ watchDirectory(
+ 'src/client/modules',
+ { ...opts, filter: f => !f.endsWith('tutorial') },
+ update.docs,
+ );
+
+ // Watch blog
+ watchDirectory('content/blog', opts, update.blog);
+ })
+ .catch(function(err) {
+ console.error('Reload could not start, could not start server/sample app', err);
+ });
+};
diff --git a/docs/src/server/utils/watchMiddleware.js b/docs/src/server/utils/watchMiddleware.js
new file mode 100644
index 00000000..453836de
--- /dev/null
+++ b/docs/src/server/utils/watchMiddleware.js
@@ -0,0 +1,23 @@
+module.exports = function watchMiddleware(liveReload) {
+ if (liveReload) {
+ return function(req, res, next) {
+ // Poor's man monkey-patch
+ // (It assume's we send a string - streaming don't work)
+ const send = res.send;
+ res.send = function(src) {
+ send.call(
+ this,
+ src.replace(
+ '{{BOTTOM_RUNTIME_PLACEHOLDER}}',
+ '"',
+ ),
+ );
+ };
+ next();
+ };
+ } else {
+ return function watch_noop(req, res, next) {
+ next();
+ };
+ }
+};
diff --git a/package.json b/package.json
index 05148e40..ce3c4e0a 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,8 @@
"prettier": "prettier --write '**/*.{js,md}'",
"prepare": "yarn build",
"build": "tsc -b",
+ "build:docs": "cd docs && yarn build",
+ "watch:docs": "cd docs && yarn watch",
"release": "yarn prepare && lerna publish -m 'chore(release): publish %s' --exact --force-publish=* && yarn changelog",
"changelog": "yarn changelog:generate && yarn changelog:publish",
"changelog:generate": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
@@ -53,7 +55,8 @@
"lerna": "^3.15.0",
"prettier": "^1.17.1",
"rimraf": "^2.6.3",
- "typescript": "^3.5.1"
+ "typescript": "^3.5.1",
+ "cross-env": "^5.2.0"
},
"config": {
"commitizen": {
@@ -62,6 +65,7 @@
},
"workspaces": [
"packages/@best/*",
- "packages/*"
+ "packages/*",
+ "docs"
]
}
diff --git a/yarn.lock b/yarn.lock
index 0b1a0818..6edc4862 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -535,6 +535,21 @@
"@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-transform-typescript" "^7.3.2"
+"@babel/runtime-corejs2@^7.2.0":
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.5.4.tgz#7111dbb344acce1f7dd601786cff40d516b27a96"
+ integrity sha512-sHv74OzyZ18d6tjHU0HmlVES3+l+lydkOMTiKsJSTGWcTBpIMfXLEgduahlJrQjknW9RCQAqLIEdLOHjBmq/hg==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.2"
+
+"@babel/runtime@^7.0.0":
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.4.tgz#cb7d1ad7c6d65676e66b47186577930465b5271b"
+ integrity sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4":
version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
@@ -1652,7 +1667,7 @@
"@lwc/errors" "1.0.0"
line-column "^1.0.2"
-"@lwc/compiler@1.0.0":
+"@lwc/compiler@1.0.0", "@lwc/compiler@~1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@lwc/compiler/-/compiler-1.0.0.tgz#542452258671ed1fb573697e302eb748bad668ba"
integrity sha512-y1OubxnlKngcKZJzly1dSxA7JxZfPi8BKSHWSmQ4JsStgSo4zm1c+oyyzz4bEDr2bd5QuxwyJ2EQn+suJOkB4A==
@@ -1690,7 +1705,7 @@
resolved "https://registry.yarnpkg.com/@lwc/eslint-plugin-lwc/-/eslint-plugin-lwc-0.6.0.tgz#aa283547bb78a3843db49eb595a03ff91ef083f1"
integrity sha512-2iAzQTSUNYwmojh0Ey/ma4uRVpbU2t85Wf9+nkVqXkEyQBR1IFDB9PdPREbPZ8FrjQTlDek0TxSyzwz4wsdiSQ==
-"@lwc/jest-preset@1.0.0":
+"@lwc/jest-preset@1.0.0", "@lwc/jest-preset@~1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@lwc/jest-preset/-/jest-preset-1.0.0.tgz#087ccc828af3cbc3ab0ad4795c5c303639be1ed2"
integrity sha512-9pLcGMrXbBRBs48QfiySHzAMwgmggTe7CseaOIyU6AAX1Lh8eQ1gKOffpgM4+GxNzCk7hkuN8TdvK6m1I7rT7w==
@@ -1750,7 +1765,7 @@
postcss-selector-parser "6.0.2"
postcss-value-parser "3.3.1"
-"@lwc/synthetic-shadow@1.0.0":
+"@lwc/synthetic-shadow@1.0.0", "@lwc/synthetic-shadow@~1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@lwc/synthetic-shadow/-/synthetic-shadow-1.0.0.tgz#a9264b9e9fa42ae0a605482d2cecbe539f5148af"
integrity sha512-iHyIsR1eghX2QfT5/lNJXU5VqgpOcvBSS/Z2fbShIJHlNQrSj380xqPu6D8QDARAly6QMDZGwH5bjFeb1dbbjw==
@@ -1775,7 +1790,7 @@
resolved "https://registry.yarnpkg.com/@lwc/test-utils/-/test-utils-1.0.0.tgz#913068ccaaab8791c938e26a9a0c796946b21828"
integrity sha512-Wd3cAk0U1tBs6vvLex+oE6vEUe5cPcwSSklxi4xn5zDIUMxfxvjzbE7HJED+jm8lKP4Nb5wpm8qRY+R+NbmKvA==
-"@lwc/wire-service@1.0.0":
+"@lwc/wire-service@1.0.0", "@lwc/wire-service@~1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@lwc/wire-service/-/wire-service-1.0.0.tgz#879c58e2bf7599eee414f7a62991f42a31aa91db"
integrity sha512-CTWC0s50Y4F3WxGbjIeARJamJDUKMnNtc/0jjd0OlCzhhBLw2BYEteYlHfUs7JQnvQHIfya3FudhwfDImWMkGw==
@@ -1999,6 +2014,13 @@
eslint-plugin-import "^2.14.0"
eslint-plugin-jest "^22.0.0"
+"@samverschueren/stream-to-observable@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+ integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+ dependencies:
+ any-observable "^0.3.0"
+
"@types/apicache@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@types/apicache/-/apicache-1.2.0.tgz#5f6e9225e66d22da97042a39ad626b3c158d650d"
@@ -2691,7 +2713,7 @@ ansi-html@0.0.7:
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
-ansi-regex@^2.0.0:
+ansi-regex@^2.0.0, ansi-regex@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
@@ -2723,6 +2745,11 @@ ansicolors@~0.3.2:
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=
+any-observable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+ integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
anymatch@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@@ -2925,6 +2952,13 @@ async@^1.5.2:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+async@^2.6.0, async@^2.6.1:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -3669,7 +3703,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^1.1.3:
+chalk@^1.0.0, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -3773,7 +3807,19 @@ cli-boxes@^1.0.0:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
-cli-cursor@^2.1.0:
+cli-color@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
+ integrity sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==
+ dependencies:
+ ansi-regex "^2.1.1"
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ memoizee "^0.4.14"
+ timers-ext "^0.1.5"
+
+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"
integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
@@ -3787,6 +3833,14 @@ cli-table@~0.3.1:
dependencies:
colors "1.0.3"
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
cli-ux@^4.9.0:
version "4.9.3"
resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-4.9.3.tgz#4c3e070c1ea23eef010bbdb041192e0661be84ce"
@@ -3819,6 +3873,15 @@ cli-width@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+clipboard@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d"
+ integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==
+ dependencies:
+ good-listener "^1.2.2"
+ select "^1.1.2"
+ tiny-emitter "^2.0.0"
+
cliui@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -3875,7 +3938,7 @@ collection-visit@^1.0.0:
map-visit "^1.0.0"
object-visit "^1.0.0"
-color-convert@^1.3.0, color-convert@^1.9.0:
+color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
@@ -3899,6 +3962,22 @@ color-string@^0.3.0:
dependencies:
color-name "^1.0.0"
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
+ integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
color@^0.11.0:
version "0.11.4"
resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
@@ -3917,7 +3996,12 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
-colors@*:
+colornames@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96"
+ integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=
+
+colors@*, colors@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
@@ -3932,6 +4016,14 @@ colors@~1.1.2:
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
+colorspace@1.1.x:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5"
+ integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==
+ dependencies:
+ color "3.0.x"
+ text-hex "1.0.x"
+
columnify@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
@@ -3952,7 +4044,7 @@ commander@2.17.x:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-commander@^2.19.0, commander@~2.20.0:
+commander@^2.14.1, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0, commander@~2.20.0:
version "2.20.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
@@ -4023,7 +4115,7 @@ compressible@~2.0.16:
dependencies:
mime-db ">= 1.40.0 < 2"
-compression@^1.7.4:
+compression@^1.7.4, compression@~1.7.3:
version "1.7.4"
resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
@@ -4397,7 +4489,7 @@ copy-webpack-plugin@^5.0.2:
serialize-javascript "^1.7.0"
webpack-log "^2.0.0"
-core-js@^2.4.0, core-js@^2.5.0:
+core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5:
version "2.6.9"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
@@ -4417,6 +4509,27 @@ cosmiconfig@^5.1.0, cosmiconfig@^5.2.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
+cp-file@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d"
+ integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ make-dir "^2.0.0"
+ nested-error-stacks "^2.0.0"
+ pify "^4.0.1"
+ safe-buffer "^5.0.1"
+
+cpy@~7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/cpy/-/cpy-7.0.1.tgz#d817e4d81bd7f0f25ff812796c5f1392dc0fb485"
+ integrity sha512-Zo52tXKLJcgy/baacn6KaNoRAakkl2wb+R4u6qJ4wlD0uchncwRQcIk66PlGlkzuToCJO6A6PWX27Tdwc8LU2g==
+ dependencies:
+ arrify "^1.0.1"
+ cp-file "^6.0.0"
+ globby "^8.0.1"
+ nested-error-stacks "^2.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"
@@ -4455,6 +4568,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
+cross-env@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
+ integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==
+ dependencies:
+ cross-spawn "^6.0.5"
+ is-windows "^1.0.0"
+
cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -4608,6 +4729,14 @@ cz-conventional-changelog@2.1.0:
right-pad "^1.0.1"
word-wrap "^1.0.3"
+d@1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
dargs@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
@@ -4636,7 +4765,7 @@ data-urls@^1.0.0, data-urls@^1.1.0:
whatwg-mimetype "^2.2.0"
whatwg-url "^7.0.0"
-date-fns@^1.23.0:
+date-fns@^1.23.0, date-fns@^1.27.2:
version "1.30.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
@@ -4646,7 +4775,7 @@ date-now@^0.1.4:
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-dateformat@^3.0.0:
+dateformat@^3.0.0, dateformat@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
@@ -4697,6 +4826,13 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+decamelize@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851"
+ integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==
+ dependencies:
+ xregexp "^4.2.4"
+
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"
@@ -4727,6 +4863,11 @@ deepmerge@3.2.1, deepmerge@^3.2.0, deepmerge@~3.2.0:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.1.tgz#76a1f47854bcfcd66ee9a948d110540a8e12b261"
integrity sha512-+hbDSzTqEW0fWgnlKksg7XAOtT+ddZS5lHZJ6f6MdixRs9wQy+50fm1uUCVb1IkvjLUYX/SfFO021ZNwriURTw==
+deepmerge@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
+ integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
+
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
@@ -4776,6 +4917,18 @@ defined@^1.0.0:
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
del@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
@@ -4794,6 +4947,11 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+delegate@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+ integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -4868,6 +5026,15 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
+diagnostics@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a"
+ integrity sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==
+ dependencies:
+ colorspace "1.1.x"
+ enabled "1.0.x"
+ kuler "1.0.x"
+
diff-sequences@^24.3.0:
version "24.3.0"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975"
@@ -5061,6 +5228,11 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.103:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.161.tgz#48cb3de7a53d07c1ce654e8bc6e3f6b602f1ee3c"
integrity sha512-i8cuS1zf7TW2t/NrfiaF8amTggCH4yLRe7Pirdf6gVDESP146jXO9NXttM8bJk1aupwA1NVMoaikBSbnTHgZGA==
+elegant-spinner@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+ integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
elliptic@^6.0.0:
version "6.4.1"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
@@ -5084,6 +5256,13 @@ emojis-list@^2.0.0:
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+enabled@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
+ integrity sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=
+ dependencies:
+ env-variable "0.0.x"
+
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -5152,11 +5331,16 @@ enhanced-resolve@^4.1.0:
memory-fs "^0.4.0"
tapable "^1.0.0"
-entities@^1.1.1:
+entities@^1.1.1, entities@~1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+env-variable@0.0.x:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.5.tgz#913dd830bef11e96a039c038d4130604eba37f88"
+ integrity sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==
+
err-code@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
@@ -5207,6 +5391,24 @@ es-to-primitive@^1.2.0:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
+ version "0.10.50"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778"
+ integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.1"
+ next-tick "^1.0.0"
+
+es6-iterator@^2.0.3, es6-iterator@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
es6-promise@^4.0.3:
version "4.2.8"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
@@ -5219,12 +5421,30 @@ es6-promisify@^5.0.0:
dependencies:
es6-promise "^4.0.3"
-escape-html@~1.0.3:
+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"
+ integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.1"
+
+escape-html@1.0.3, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, 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"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
@@ -5415,6 +5635,14 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+event-emitter@^0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
eventemitter3@^3.0.0, eventemitter3@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
@@ -5445,6 +5673,13 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
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"
+ integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
+ dependencies:
+ merge "^1.2.0"
+
exec-sh@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
@@ -5518,6 +5753,14 @@ expect@^24.8.0:
jest-message-util "^24.8.0"
jest-regex-util "^24.3.0"
+express-winston@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/express-winston/-/express-winston-3.0.1.tgz#ea152584cee70a97640b24113aa149cd7afe3608"
+ integrity sha512-2nSHyJwlcgcjktzAFDayGy2lgTj4d9zVrBdnQnyTtMNrEVSPBc72ws3s/IQK0cgbgzG7TsyY9DIkWsiVAaBN8g==
+ dependencies:
+ chalk "^2.4.1"
+ lodash "^4.17.10"
+
express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
@@ -5554,7 +5797,7 @@ express@^4.17.1:
utils-merge "1.0.1"
vary "~1.1.2"
-express@~4.16.2:
+express@~4.16.2, express@~4.16.4:
version "4.16.4"
resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
@@ -5702,6 +5945,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fast-safe-stringify@^2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2"
+ integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==
+
fastq@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2"
@@ -5742,6 +5990,11 @@ feature-policy@0.3.0:
resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.3.0.tgz#7430e8e54a40da01156ca30aaec1a381ce536069"
integrity sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==
+fecha@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd"
+ integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==
+
fetch-mock@^7.3.3:
version "7.3.3"
resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-7.3.3.tgz#d1abdf309cdef8adb4b0fc0596d3f97fcfbd4528"
@@ -5757,6 +6010,14 @@ figgy-pudding@^3.4.1, figgy-pudding@^3.5.1:
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
figures@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
@@ -5806,7 +6067,7 @@ finalhandler@1.1.1:
statuses "~1.4.0"
unpipe "~1.0.0"
-finalhandler@~1.1.2:
+finalhandler@~1.1.1, finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
@@ -5836,6 +6097,11 @@ find-node-modules@2.0.0:
findup-sync "^3.0.0"
merge "^1.2.1"
+find-parent-dir@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
+ integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=
+
find-root@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
@@ -5907,6 +6173,11 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
+fn-name@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+ integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
@@ -6032,6 +6303,15 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+g-status@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+ integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+ dependencies:
+ arrify "^1.0.1"
+ matcher "^1.0.0"
+ simple-git "^1.85.0"
+
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -6061,6 +6341,11 @@ get-caller-file@^2.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
+ integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==
+
get-pkg-repo@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
@@ -6318,6 +6603,13 @@ globby@~9.2.0:
pify "^4.0.1"
slash "^2.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"
+ integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
+ 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"
@@ -6345,6 +6637,16 @@ grapheme-splitter@^1.0.2:
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
+gray-matter@~4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454"
+ integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==
+ dependencies:
+ js-yaml "^3.11.0"
+ kind-of "^6.0.2"
+ section-matter "^1.0.0"
+ strip-bom-string "^1.0.0"
+
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
@@ -6477,6 +6779,11 @@ hash-base@^3.0.0:
inherits "^2.0.1"
safe-buffer "^5.0.1"
+hash-sum@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
+ integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
+
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.7"
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
@@ -7035,6 +7342,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+is-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
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"
@@ -7198,16 +7510,35 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-obj@^1.0.0:
+is-obj@^1.0.0, is-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+is-observable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+ integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+ dependencies:
+ symbol-observable "^1.1.0"
+
+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"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
is-path-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.1.0.tgz#2e0c7e463ff5b7a0eb60852d851a6809347a124c"
integrity sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==
+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"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+ dependencies:
+ is-path-inside "^1.0.0"
+
is-path-in-cwd@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
@@ -7248,7 +7579,7 @@ is-plain-object@^3.0.0:
dependencies:
isobject "^4.0.0"
-is-promise@^2.1.0:
+is-promise@^2.1, is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
@@ -7272,6 +7603,18 @@ is-regex@^1.0.4:
dependencies:
has "^1.0.1"
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-relative-url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef"
+ integrity sha1-cpAtf+BLPUeS59sV+duEtyBMnO8=
+ dependencies:
+ is-absolute-url "^2.0.0"
+
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"
@@ -7332,7 +7675,7 @@ is-utf8@^0.2.0, is-utf8@^0.2.1:
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-is-windows@^1.0.1, is-windows@^1.0.2:
+is-windows@^1.0.0, 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"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
@@ -7352,6 +7695,13 @@ isarray@2.0.1:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
+isemail@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c"
+ integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==
+ dependencies:
+ punycode "2.x.x"
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -7424,6 +7774,11 @@ istanbul-reports@^2.1.1:
dependencies:
handlebars "^4.1.2"
+javascript-stringify@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
+ integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=
+
jest-changed-files@^24.8.0:
version "24.8.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.8.0.tgz#7e7eb21cf687587a85e50f3d249d1327e15b157b"
@@ -7808,7 +8163,7 @@ js-tokens@^3.0.2:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-js-yaml@^3.13.0, js-yaml@^3.13.1:
+js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1:
version "3.13.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@@ -8069,6 +8424,13 @@ kleur@^3.0.2:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+kuler@1.0.x:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6"
+ integrity sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==
+ dependencies:
+ colornames "^1.1.1"
+
latest-version@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
@@ -8139,6 +8501,98 @@ line-column@^1.0.2:
isarray "^1.0.0"
isobject "^2.0.0"
+link-check@^4.4.5:
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/link-check/-/link-check-4.4.5.tgz#d2cc536ce37939613fd1ac388281040c8726a8e7"
+ integrity sha512-csF0k7MAQjyDLkrZfsAJNkTav/vvATMYkm9dAstzmu60vzNGlgvWd3SgBTFH9KLWOO1hUuVxgSEPuWv+fdyuaQ==
+ dependencies:
+ is-relative-url "^2.0.0"
+ isemail "^3.2.0"
+ ms "^2.1.1"
+ request "^2.88.0"
+
+linkify-it@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
+ integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
+ dependencies:
+ uc.micro "^1.0.1"
+
+lint-staged@~8.1.0:
+ version "8.1.7"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.7.tgz#a8988bc83bdffa97d04adb09dbc0b1f3a58fa6fc"
+ integrity sha512-egT0goFhIFoOGk6rasPngTFh2qDqxZddM0PwI58oi66RxCDcn5uDwxmiasWIF0qGnchHSYVJ8HPRD5LrFo7TKA==
+ dependencies:
+ chalk "^2.3.1"
+ commander "^2.14.1"
+ cosmiconfig "^5.2.0"
+ debug "^3.1.0"
+ dedent "^0.7.0"
+ del "^3.0.0"
+ execa "^1.0.0"
+ find-parent-dir "^0.3.0"
+ g-status "^2.0.2"
+ is-glob "^4.0.0"
+ is-windows "^1.0.2"
+ listr "^0.14.2"
+ listr-update-renderer "^0.5.0"
+ lodash "^4.17.11"
+ log-symbols "^2.2.0"
+ micromatch "^3.1.8"
+ npm-which "^3.0.1"
+ p-map "^1.1.1"
+ path-is-inside "^1.0.2"
+ pify "^3.0.0"
+ please-upgrade-node "^3.0.2"
+ staged-git-files "1.1.2"
+ string-argv "^0.0.2"
+ stringify-object "^3.2.2"
+ yup "^0.27.0"
+
+listr-silent-renderer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+ integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+ integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+ dependencies:
+ chalk "^1.1.3"
+ cli-truncate "^0.2.1"
+ elegant-spinner "^1.0.1"
+ figures "^1.7.0"
+ indent-string "^3.0.0"
+ log-symbols "^1.0.2"
+ log-update "^2.3.0"
+ strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+ integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+ dependencies:
+ chalk "^2.4.1"
+ cli-cursor "^2.1.0"
+ date-fns "^1.27.2"
+ figures "^2.0.0"
+
+listr@^0.14.2:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+ integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+ dependencies:
+ "@samverschueren/stream-to-observable" "^0.3.0"
+ is-observable "^1.1.0"
+ is-promise "^2.1.0"
+ is-stream "^1.1.0"
+ listr-silent-renderer "^1.1.1"
+ listr-update-renderer "^0.5.0"
+ listr-verbose-renderer "^0.5.0"
+ p-map "^2.0.0"
+ rxjs "^6.3.3"
+
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"
@@ -8342,6 +8796,45 @@ lodash@4.17.11, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.5
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+lodash@^4.17.14:
+ version "4.17.14"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
+ integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
+
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+ dependencies:
+ chalk "^1.0.0"
+
+log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ 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"
+ integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ cli-cursor "^2.0.0"
+ wrap-ansi "^3.0.1"
+
+logform@^1.9.1:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/logform/-/logform-1.10.0.tgz#c9d5598714c92b546e23f4e78147c40f1e02012e"
+ integrity sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==
+ dependencies:
+ colors "^1.2.1"
+ fast-safe-stringify "^2.0.4"
+ fecha "^2.3.3"
+ ms "^2.1.1"
+ triple-beam "^1.2.0"
+
loglevel-plugin-prefix@^0.8.4:
version "0.8.4"
resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644"
@@ -8397,6 +8890,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
+lru-queue@0.1:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
+ integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=
+ dependencies:
+ es5-ext "~0.10.2"
+
lwc-services@^1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/lwc-services/-/lwc-services-1.2.2.tgz#9cb3ace8160398f8687e158e9bd27dfbef180d17"
@@ -8529,6 +9029,72 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
+markdown-it-anchor@~5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#cdd917a05b7bf92fb736a6dae3385c6d0d0fa552"
+ integrity sha512-AFM/woBI8QDJMS/9+MmsBMT5/AR+ImfOsunQZTZhzcTmna3rIzAzbOh5E0l6mlFM/i9666BpUtkqQ9bS7WApCg==
+
+markdown-it-chain@~1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-chain/-/markdown-it-chain-1.3.0.tgz#ccf6fe86c10266bafb4e547380dfd7f277cc17bc"
+ integrity sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==
+ dependencies:
+ webpack-chain "^4.9.0"
+
+markdown-it-container@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695"
+ integrity sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU=
+
+markdown-it-emoji@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc"
+ integrity sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=
+
+markdown-it@~8.4.1:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
+ integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
+ dependencies:
+ argparse "^1.0.7"
+ entities "~1.1.1"
+ linkify-it "^2.0.0"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+markdown-link-check@^3.7.3:
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/markdown-link-check/-/markdown-link-check-3.7.3.tgz#86b222b6d0ddb6d4261f05c0132e14f1ba664315"
+ integrity sha512-X/HWomzeox5HtkKLupin4affBXHq22r7RNqiSKsxlgZQMSU9n+zpGY0sbzJr1IycB6FXpKUZet1VH3Rs1/8WQg==
+ dependencies:
+ async "^2.6.1"
+ chalk "^2.4.2"
+ commander "^2.20.0"
+ link-check "^4.4.5"
+ lodash "^4.17.11"
+ markdown-link-extractor "^1.2.1"
+ progress "^2.0.3"
+ request "^2.88.0"
+
+markdown-link-extractor@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/markdown-link-extractor/-/markdown-link-extractor-1.2.1.tgz#02356797b313653a2603daeb0e19054c2b47ac16"
+ integrity sha512-eo4hXLZC6/NrVimHqEu0X029ymIreg0VQjlWudGtOg1FiiZYPwU+Sh1CP3CQqP16woyCsDplVfqPD2Oi8JRpdw==
+ dependencies:
+ marked "^0.6.2"
+
+marked@^0.6.2:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.3.tgz#79babad78af638ba4d522a9e715cdfdd2429e946"
+ integrity sha512-Fqa7eq+UaxfMriqzYLayfqAE40WN03jf+zHjT18/uXNuzjq3TY0XTbrAoPeqSJrAmPz11VuUA+kBPYOhHt9oOQ==
+
+matcher@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+ integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+ dependencies:
+ escape-string-regexp "^1.0.4"
+
math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
@@ -8543,6 +9109,11 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -8564,6 +9135,20 @@ mem@^4.0.0:
mimic-fn "^2.0.0"
p-is-promise "^2.0.0"
+memoizee@^0.4.14:
+ version "0.4.14"
+ resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57"
+ integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.45"
+ es6-weak-map "^2.0.2"
+ event-emitter "^0.3.5"
+ is-promise "^2.1"
+ lru-queue "0.1"
+ next-tick "1"
+ timers-ext "^0.1.5"
+
memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
@@ -8635,7 +9220,7 @@ merge2@^1.2.3:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
-merge@^1.2.1:
+merge@^1.2.0, merge@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
@@ -8747,7 +9332,7 @@ minimist@0.0.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
@@ -8924,6 +9509,16 @@ neo-async@^2.5.0, neo-async@^2.6.0:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+nested-error-stacks@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61"
+ integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==
+
+next-tick@1, next-tick@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -9206,6 +9801,13 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.1:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
+npm-path@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+ integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+ dependencies:
+ which "^1.2.10"
+
npm-pick-manifest@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40"
@@ -9222,6 +9824,15 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
+npm-which@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+ integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+ dependencies:
+ commander "^2.9.0"
+ npm-path "^2.0.2"
+ which "^1.2.10"
+
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -9339,6 +9950,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
+one-time@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
+ integrity sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=
+
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
@@ -9346,6 +9962,13 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
+open@^6.1.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+ integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+ dependencies:
+ is-wsl "^1.1.0"
+
opn@5.4.0:
version "5.4.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
@@ -9500,7 +10123,7 @@ p-map-series@^1.0.0:
dependencies:
p-reduce "^1.0.0"
-p-map@^1.2.0:
+p-map@^1.1.1, p-map@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
@@ -9912,7 +10535,7 @@ platform@1.3.5:
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
-please-upgrade-node@^3.1.1:
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
@@ -10250,6 +10873,13 @@ pretty-format@^24.8.0, pretty-format@~24.8.0:
ansi-styles "^3.2.0"
react-is "^16.8.4"
+prismjs@~1.16.0:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.16.0.tgz#406eb2c8aacb0f5f0f1167930cb83835d10a4308"
+ integrity sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==
+ optionalDependencies:
+ clipboard "^2.0.0"
+
private@^0.1.6:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@@ -10265,7 +10895,7 @@ process@^0.11.10:
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-progress@^2.0.0, progress@^2.0.1:
+progress@^2.0.0, progress@^2.0.1, progress@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
@@ -10298,6 +10928,11 @@ promzard@^0.3.0:
dependencies:
read "1"
+property-expr@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+ integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
@@ -10390,16 +11025,16 @@ punycode@1.3.2:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-punycode@^2.1.0, punycode@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
puppeteer@~1.17.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.17.0.tgz#371957d227a2f450fa74b78e78a2dadb2be7f14f"
@@ -10820,6 +11455,11 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+regenerator-runtime@^0.13.2:
+ version "0.13.2"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
+ integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
+
regenerator-transform@^0.13.3:
version "0.13.4"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb"
@@ -10884,6 +11524,21 @@ relateurl@0.2.x:
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
+reload@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/reload/-/reload-3.0.1.tgz#6da51f5fb1ae69bb97bba67280258facbc6e5c7c"
+ integrity sha512-NFM2dFo/86O9m5U48kRlFOaksX/Y6Ua10OiLt7rQbMAHRKZmGzB3wXExelr86VbV+4JMsuQjXiFkuNYVmvhvMw==
+ dependencies:
+ cli-color "~1.4.0"
+ commander "~2.20.0"
+ finalhandler "~1.1.1"
+ minimist "~1.2.0"
+ open "^6.1.0"
+ serve-static "~1.13.2"
+ supervisor "~0.12.0"
+ url-parse "~1.4.4"
+ ws "~6.2.1"
+
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"
@@ -11078,7 +11733,7 @@ right-pad@^1.0.1:
resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0"
integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=
-rimraf@2, rimraf@2.6.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2:
+rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
@@ -11252,11 +11907,24 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
+section-matter@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167"
+ integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+ dependencies:
+ extend-shallow "^2.0.1"
+ kind-of "^6.0.0"
+
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
+select@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+ integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
+
selfsigned@^1.10.4:
version "1.10.4"
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
@@ -11369,7 +12037,7 @@ serve-index@^1.9.1:
mime-types "~2.1.17"
parseurl "~1.3.2"
-serve-static@1.13.2:
+serve-static@1.13.2, serve-static@~1.13.2:
version "1.13.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
@@ -11379,7 +12047,7 @@ serve-static@1.13.2:
parseurl "~1.3.2"
send "0.16.2"
-serve-static@1.14.1:
+serve-static@1.14.1, serve-static@~1.14.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
@@ -11478,6 +12146,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+simple-git@^1.85.0:
+ version "1.121.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.121.0.tgz#4bdf0828cd1b0bb3cb7ed9bead2771982ef5876a"
+ integrity sha512-LyYri/nuAX8+cx9nZw38mWO6oHNi//CmiPlkBL7aVjZIsdldve7eeDwXu9L4wP/74MpNHucXkXc/BOuIQShhPg==
+ dependencies:
+ debug "^4.0.1"
+
simple-git@~1.113.0:
version "1.113.0"
resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.113.0.tgz#668989728a1e9cf4ec6c72b69ea2eecc93489bea"
@@ -11490,6 +12165,13 @@ simple-statistics@^6.0.1:
resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad"
integrity sha512-zGwn0DDRa9Zel4H4n2pjTFIyGoAGpnpjrGIctreCxj5XWrcx9v7Xy7270FkC967WMmcvuc8ZU7m0ZG+hGN7gAA==
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
sisteransi@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c"
@@ -11510,6 +12192,11 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
slice-ansi@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
@@ -11843,11 +12530,21 @@ ssri@^6.0.0, ssri@^6.0.1:
dependencies:
figgy-pudding "^3.5.1"
+stack-trace@0.0.x:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+ integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
+
stack-utils@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+staged-git-files@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+ integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -11913,6 +12610,11 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+string-argv@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+ integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
string-length@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
@@ -11961,6 +12663,15 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
+stringify-object@^3.2.2:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
strip-ansi@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f"
@@ -11989,6 +12700,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+ integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=
+
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"
@@ -12032,6 +12748,11 @@ strong-log-transformer@^2.0.0:
minimist "^1.2.0"
through "^2.3.4"
+supervisor@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/supervisor/-/supervisor-0.12.0.tgz#de7e6337015b291851c10f3538c4a7f04917ecc1"
+ integrity sha1-3n5jNwFbKRhRwQ81OMSn8EkX7ME=
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -12086,7 +12807,7 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
-symbol-observable@^1.2.0:
+symbol-observable@^1.1.0, symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
@@ -12096,6 +12817,11 @@ symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+synchronous-promise@^2.0.6:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a"
+ integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==
+
systeminformation@~4.9.2:
version "4.9.2"
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-4.9.2.tgz#df6e534d660ee438f61dc9cc08f6f826fb599406"
@@ -12215,6 +12941,11 @@ text-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6"
integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==
+text-hex@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
+ integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
+
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"
@@ -12262,6 +12993,19 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
+timers-ext@^0.1.5:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6"
+ integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==
+ dependencies:
+ es5-ext "~0.10.46"
+ next-tick "1"
+
+tiny-emitter@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+ integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -12331,6 +13075,11 @@ toposort@^1.0.0:
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
touch@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
@@ -12400,6 +13149,11 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+triple-beam@^1.2.0, triple-beam@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
+ integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==
+
ts-node@^8.2.0:
version "8.3.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57"
@@ -12465,6 +13219,11 @@ type-is@~1.6.16, type-is@~1.6.17, type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+type@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.0.1.tgz#084c9a17fcc9151a2cdb1459905c2e45e4bb7d61"
+ integrity sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==
+
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
@@ -12475,6 +13234,11 @@ typescript@^3.5.1:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.2.tgz#a09e1dc69bc9551cadf17dba10ee42cf55e5d56c"
integrity sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
uglify-js@3.4.x:
version "3.4.10"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
@@ -12647,7 +13411,7 @@ url-parse-lax@^1.0.0:
dependencies:
prepend-http "^1.0.1"
-url-parse@^1.4.3:
+url-parse@^1.4.3, url-parse@~1.4.4:
version "1.4.7"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
@@ -12790,6 +13554,14 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
+watch@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-1.0.2.tgz#340a717bde765726fa0aa07d721e0147a551df0c"
+ integrity sha1-NApxe952Vyb6CqB9ch4BR6VR3ww=
+ 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"
@@ -12848,6 +13620,14 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+webpack-chain@^4.9.0:
+ version "4.12.1"
+ resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6"
+ integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==
+ dependencies:
+ deepmerge "^1.5.2"
+ javascript-stringify "^1.6.0"
+
webpack-dev-middleware@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff"
@@ -13002,7 +13782,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-which@1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
+which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -13030,6 +13810,29 @@ windows-release@^3.1.0:
dependencies:
execa "^1.0.0"
+winston-transport@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.3.0.tgz#df68c0c202482c448d9b47313c07304c2d7c2c66"
+ integrity sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==
+ dependencies:
+ readable-stream "^2.3.6"
+ triple-beam "^1.2.0"
+
+winston@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-3.1.0.tgz#80724376aef164e024f316100d5b178d78ac5331"
+ integrity sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==
+ dependencies:
+ async "^2.6.0"
+ diagnostics "^1.1.1"
+ is-stream "^1.1.0"
+ logform "^1.9.1"
+ one-time "0.0.4"
+ readable-stream "^2.3.6"
+ stack-trace "0.0.x"
+ triple-beam "^1.3.0"
+ winston-transport "^4.2.0"
+
word-wrap@^1.0.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -13060,6 +13863,14 @@ wrap-ansi@^2.0.0:
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"
+ integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+
wrap-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131"
@@ -13135,7 +13946,7 @@ ws@^5.2.0:
dependencies:
async-limiter "~1.0.0"
-ws@^6.1.0:
+ws@^6.1.0, ws@~6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
@@ -13194,6 +14005,13 @@ xmlhttprequest-ssl@~1.5.4:
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
+xregexp@^4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.2.4.tgz#02a4aea056d65a42632c02f0233eab8e4d7e57ed"
+ integrity sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA==
+ dependencies:
+ "@babel/runtime-corejs2" "^7.2.0"
+
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -13318,3 +14136,15 @@ yn@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.0.tgz#fcbe2db63610361afcc5eb9e0ac91e976d046114"
integrity sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==
+
+yup@^0.27.0:
+ version "0.27.0"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7"
+ integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ fn-name "~2.0.1"
+ lodash "^4.17.11"
+ property-expr "^1.5.0"
+ synchronous-promise "^2.0.6"
+ toposort "^2.0.2"