diff --git a/.gitignore b/.gitignore index 758e78869..661a144b2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ public .DS_Store examples/*/yarn.lock examples/*/package-lock.json +packages/*/types diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..4e8dc87ca --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "eslint.validate": ["javascript", "javascriptreact", "typescript"], + "eslint.enable": true, + "eslint.workingDirectories": [ + { + "directory": "packages/saber", + "changeProcessCWD": true + } + ] +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d624370af..135cf20dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,13 +11,12 @@ cd saber # Install dependencies yarn -# Link the `saber` binary +# Link the `saber` binary if you want to run it globally cd packages/saber yarn link # If you wanna run the website locally cd website -yarn yarn dev # which uses the global `saber` command ``` diff --git a/lerna.json b/lerna.json index c37511472..13d8616f1 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,5 @@ { "packages": ["packages/*", "other-packages/*"], - "version": "independent" + "version": "independent", + "npmClient": "yarn" } diff --git a/other-packages/eslint-config-saber/index.js b/other-packages/eslint-config-saber/index.js new file mode 100644 index 000000000..8191e3b73 --- /dev/null +++ b/other-packages/eslint-config-saber/index.js @@ -0,0 +1,42 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + warnOnUnsupportedTypeScriptVersion: false, + sourceType: 'module', + jsx: false, + project: 'tsconfig.json' + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'plugin:prettier/recommended' + ], + env: { + node: true, + jest: true, + es2017: true + }, + rules: { + // Enable this rule when all files are migated to TS + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/camelcase': 'off', + // Enable this rule later, it explodes the terminal + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/member-delimiter-style': [ + 'error', + { + multiline: { + delimiter: 'none', + requireLast: false + }, + singleline: { + delimiter: 'semi', + requireLast: false + } + } + ], + '@typescript-eslint/prefer-includes': 'off' + } +} diff --git a/other-packages/eslint-config-saber/package.json b/other-packages/eslint-config-saber/package.json new file mode 100644 index 000000000..e75a34eb7 --- /dev/null +++ b/other-packages/eslint-config-saber/package.json @@ -0,0 +1,16 @@ +{ + "name": "eslint-config-saber", + "version": "0.0.0", + "description": "ESLint config for core Saber repos", + "man": "index.js", + "files": [ + "index.js" + ], + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^2.6.0", + "@typescript-eslint/parser": "^2.6.0", + "eslint-config-prettier": "6.3.0", + "eslint-plugin-prettier": "3.1.1" + } +} diff --git a/package.json b/package.json index 1c7941d22..841e9256e 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "name": "saber", "scripts": { "test": "npm run lint && lerna run test", - "lint": "xo", + "lint": "lerna run lint", "commit": "git-cz", "prepare": "lerna run prepublishOnly" }, @@ -18,39 +18,17 @@ "conf": "6.0.1", "cz-conventional-changelog": "3.0.2", "enquirer": "^2.3.1", - "eslint-config-prettier": "6.3.0", - "eslint-config-rem": "4.0.0", - "eslint-plugin-prettier": "3.1.1", + "eslint": "^6.6.0", "husky": "3.0.5", + "jest": "^24.9.0", "lerna": "3.16.4", "lint-staged": "8.1.6", "prettier": "1.18.2", - "xo": "0.24.0" + "typedoc": "^0.15.0", + "typescript": "^3.8.0-dev.20191031" }, - "xo": { - "extends": [ - "rem", - "plugin:prettier/recommended" - ], - "rules": { - "import/no-unassigned-import": "off", - "unicorn/filename-case": "off", - "no-await-in-loop": "off", - "unicorn/no-abusive-eslint-disable": "off", - "camelcase": "off" - }, - "ignore": [ - "**/dist/**", - "**/vendor/**", - "*.min.js", - "**/vue-renderer/app/**", - "**/example/**", - "**/examples/**", - "website/**" - ], - "envs": [ - "jest" - ] + "resolutions": { + "typedoc/typescript": "^3.8.0-dev.20191031" }, "husky": { "hooks": { @@ -59,10 +37,6 @@ }, "lint-staged": { "linters": { - "*.js": [ - "xo --fix", - "git add" - ], "*.{json,md}": [ "prettier --write", "git add" @@ -79,7 +53,8 @@ }, "workspaces": [ "packages/*", - "other-packages/*" + "other-packages/*", + "website" ], "config": { "commitizen": { diff --git a/packages/saber-log/package.json b/packages/saber-log/package.json index a50a4fb65..7111f6af0 100644 --- a/packages/saber-log/package.json +++ b/packages/saber-log/package.json @@ -1,9 +1,18 @@ { "name": "saber-log", "version": "0.3.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ - "index.js", - "colors.js" + "dist" ], - "license": "MIT" + "license": "MIT", + "scripts": { + "prepublishOnly": "yarn build", + "build": "rollup -c" + }, + "devDependencies": { + "rollup": "^1.26.0", + "rollup-plugin-typescript2": "^0.24.3" + } } diff --git a/packages/saber-log/rollup.config.js b/packages/saber-log/rollup.config.js new file mode 100644 index 000000000..17e2de0b8 --- /dev/null +++ b/packages/saber-log/rollup.config.js @@ -0,0 +1,16 @@ +export default { + input: 'src/index.ts', + output: { + file: 'dist/index.js', + format: 'cjs' + }, + plugins: [ + require('rollup-plugin-typescript2')({ + tsconfigOverride: { + compilerOptions: { + declaration: true + } + } + }) + ] +} diff --git a/packages/saber-log/colors.js b/packages/saber-log/src/colors.ts similarity index 97% rename from packages/saber-log/colors.js rename to packages/saber-log/src/colors.ts index c1c43f36f..9c7940c21 100644 --- a/packages/saber-log/colors.js +++ b/packages/saber-log/src/colors.ts @@ -1,3 +1,4 @@ +// @ts-nocheck /* eslint-disable */ let enabled = process.env.FORCE_COLOR || @@ -25,7 +26,7 @@ const init = (open, close) => { ) } -module.exports = { +export const colors = { options: Object.defineProperty({}, 'enabled', { get: () => enabled, set: value => (enabled = value) diff --git a/packages/saber-log/index.js b/packages/saber-log/src/index.ts similarity index 62% rename from packages/saber-log/index.js rename to packages/saber-log/src/index.ts index 41d3aef35..2f547737b 100644 --- a/packages/saber-log/index.js +++ b/packages/saber-log/src/index.ts @@ -1,4 +1,4 @@ -const colors = require('./colors') +import { colors } from './colors' const chars = { info: colors.cyan('info'), @@ -7,14 +7,24 @@ const chars = { error: colors.red('error') } -const defined = n => typeof n !== 'undefined' +interface ILogConstructorOptions { + logLevel?: number +} + + +/** + * Check if a value is `undefined` + */ +const defined = (n: any) => typeof n !== 'undefined' + +export class Log { + options: ILogConstructorOptions -class Log { constructor() { - this.setOptions() + this.options = {} } - setOptions(options) { + setOptions(options: ILogConstructorOptions) { this.options = Object.assign({}, this.options, options) } @@ -32,44 +42,64 @@ class Log { return Number(logLevel) } - log(...args) { + /** + * Log anything using `console.log` + */ + log(...args: any[]) { console.log(...args) } - verbose(...args) { + /** + * Verbose logs + */ + verbose(...args: any[]) { if (this.logLevel < 4) return const messages = args.map(arg => (typeof arg === 'function' ? arg() : arg)) this.log(colors.dim('[verbose]'), ...messages) } - info(...args) { + /** + * Info logs + */ + info(...args: any[]) { if (this.logLevel < 3) return this.log(`[${chars.info}]`, ...args) } - warn(...args) { + /** + * Warning logs + */ + warn(...args: any[]) { if (this.logLevel < 2) return this.log(`[${chars.warning}]`, ...args) } - error(...args) { + /** + * Error logs + */ + error(...args: any[]) { if (this.logLevel < 1) return this.log(`[${chars.error}]`, ...args) } - success(...args) { + /** + * Success logs + */ + success(...args: any[]) { if (this.logLevel < 3) return this.log(`[${chars.success}]`, ...args) } } -module.exports = { - log: new Log(), +const log = new Log() + +export { + log, colors, chars } diff --git a/packages/saber-log/tsconfig.json b/packages/saber-log/tsconfig.json new file mode 100644 index 000000000..3e17d8531 --- /dev/null +++ b/packages/saber-log/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src"], + "compilerOptions": { + "module": "esnext" + } +} diff --git a/packages/saber-plugin-code-copy/package.json b/packages/saber-plugin-code-copy/package.json index e1153edb9..2f13567b2 100644 --- a/packages/saber-plugin-code-copy/package.json +++ b/packages/saber-plugin-code-copy/package.json @@ -7,7 +7,6 @@ "files": [ "lib" ], - "xo": false, "peerDependencies": { "saber": ">=0.7.0" }, diff --git a/packages/saber-plugin-feed/package.json b/packages/saber-plugin-feed/package.json index ff76cdd2e..1eb22f749 100644 --- a/packages/saber-plugin-feed/package.json +++ b/packages/saber-plugin-feed/package.json @@ -10,7 +10,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "feed": "^4.0.0" }, diff --git a/packages/saber-plugin-git-modification-time/package.json b/packages/saber-plugin-git-modification-time/package.json index 62eb6d771..dcf1fd551 100644 --- a/packages/saber-plugin-git-modification-time/package.json +++ b/packages/saber-plugin-git-modification-time/package.json @@ -7,7 +7,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "execa": "^2.0.3" }, diff --git a/packages/saber-plugin-meta-redirect/package.json b/packages/saber-plugin-meta-redirect/package.json index 426a633d9..7871b3642 100644 --- a/packages/saber-plugin-meta-redirect/package.json +++ b/packages/saber-plugin-meta-redirect/package.json @@ -11,7 +11,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "url-join": "^4.0.0" }, diff --git a/packages/saber-plugin-netlify-redirect/package.json b/packages/saber-plugin-netlify-redirect/package.json index b750379e3..07092b1e5 100644 --- a/packages/saber-plugin-netlify-redirect/package.json +++ b/packages/saber-plugin-netlify-redirect/package.json @@ -11,7 +11,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "url-join": "^4.0.0" }, diff --git a/packages/saber-plugin-pwa/package.json b/packages/saber-plugin-pwa/package.json index d2486524a..acf965169 100644 --- a/packages/saber-plugin-pwa/package.json +++ b/packages/saber-plugin-pwa/package.json @@ -7,7 +7,6 @@ "files": [ "lib" ], - "xo": false, "peerDependencies": { "saber": ">=0.7.0" }, diff --git a/packages/saber-plugin-transformer-html/package.json b/packages/saber-plugin-transformer-html/package.json index ebc48c558..c59697666 100644 --- a/packages/saber-plugin-transformer-html/package.json +++ b/packages/saber-plugin-transformer-html/package.json @@ -11,7 +11,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "extract-sfc-blocks": "^0.0.2" }, diff --git a/packages/saber-plugin-transformer-pug/package.json b/packages/saber-plugin-transformer-pug/package.json index 6590aff95..1880f94df 100644 --- a/packages/saber-plugin-transformer-pug/package.json +++ b/packages/saber-plugin-transformer-pug/package.json @@ -11,7 +11,6 @@ "files": [ "lib" ], - "xo": false, "dependencies": { "extract-sfc-blocks": "^0.0.2", "pug": "^2.0.3", diff --git a/packages/saber/.eslintignore b/packages/saber/.eslintignore new file mode 100644 index 000000000..1de28745c --- /dev/null +++ b/packages/saber/.eslintignore @@ -0,0 +1,2 @@ +**/vendor/** +*.min.js diff --git a/packages/saber/.eslintrc.js b/packages/saber/.eslintrc.js new file mode 100644 index 000000000..1789a71a0 --- /dev/null +++ b/packages/saber/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + extends: 'saber', + rules: { + '@typescript-eslint/triple-slash-reference': 'off' + } +} diff --git a/packages/saber/babel.js b/packages/saber/babel.js index ad95c70e2..10fb93abb 100644 --- a/packages/saber/babel.js +++ b/packages/saber/babel.js @@ -1 +1 @@ -module.exports = require('./lib/babel/preset') +module.exports = require('./dist/babel/preset') diff --git a/packages/saber/declarations.d.ts b/packages/saber/declarations.d.ts new file mode 100644 index 000000000..468931d5c --- /dev/null +++ b/packages/saber/declarations.d.ts @@ -0,0 +1,3 @@ +declare type TODO = any + +declare type NonUndefined = A extends undefined ? never : A diff --git a/packages/saber/jest.config.js b/packages/saber/jest.config.js new file mode 100644 index 000000000..3bffd7323 --- /dev/null +++ b/packages/saber/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + testPathIgnorePatterns: ['/node_modules/', '/types/', '/dist/'], + testEnvironment: 'node' +} diff --git a/packages/saber/lib/Pages.js b/packages/saber/lib/Pages.js deleted file mode 100644 index c385aa65a..000000000 --- a/packages/saber/lib/Pages.js +++ /dev/null @@ -1,186 +0,0 @@ -const path = require('path') -const hash = require('hash-sum') -const { slash } = require('saber-utils') -const { log } = require('saber-log') -const merge = require('lodash.merge') -const getPermalink = require('./utils/getPermalink') -const getPageType = require('./utils/getPageType') -const { prefixAssets } = require('./utils/assetsAttribute') - -module.exports = class Pages extends Map { - constructor(api) { - super() - this.api = api - this.redirectRoutes = new Map() - } - - normalizePage(page, file) { - const { api } = this - - page = merge( - { - internal: {}, - contentType: 'default' - }, - page - ) - - let parsedFileName - if (file) { - const relativePath = slash(file.relative) - const absolutePath = slash(file.absolute) - // A regex parsing RFC3339 date followed by {_,-}, and ended by some characters - const fileNameRegex = /^(((\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(T([01]\d|2[0-3]):([0-5]\d):([0-5]\d|60)(\.\d+)?(Z|(\+|-)([01]\d|2[0-3]):([0-5]\d)))?)(_|-))?(.+$)/ - parsedFileName = fileNameRegex.exec( - relativePath - // Remove leading _posts/ - .replace(/^_posts\//, '') - // Remove extension - .replace(/\.[a-z]+$/i, '') - ) - const slug = parsedFileName[16] - page = merge({}, page, { - slug, - internal: { - id: hash(file.absolute), - absolute: absolutePath, - relative: relativePath, - isFile: true - }, - contentType: api.transformers.getContentTypeByExtension( - path.extname(relativePath).slice(1) - ), - content: file.content - }) - } - - let transformer = api.transformers.get(page.contentType) - - if (!transformer) { - log.warn(`No transformer was found for content type: ${page.contentType}`) - transformer = api.transformers.get('default') - } - - // Get page attributes from the page content - if (transformer.parse) { - transformer.parse(page) - } - - // Transform page content - if (page.content && transformer.transform) { - transformer.transform(page) - } - - // These fields are computed from other fields - // And transformers can update the `page` - // So we set them after applying the transformer - - if (file && parsedFileName) { - // Read createdAt from page attribute - // Or fallback to `page.date` (Hexo compatibility) - // Or fallback to the date in fileName - // Or fallback to the `file.birthtime` - page.createdAt = new Date( - page.createdAt || page.date || parsedFileName[2] || file.birthtime - ) - - // Read updatedAt from page attribute - // Or fallback to `page.updated` (Hexo compatibility) - // Or fallback to `file.mtime` - page.updatedAt = new Date(page.updatedAt || page.updated || file.mtime) - - page.type = page.type || getPageType(slash(file.relative)) - } - - page.permalink = - page.permalink || - getPermalink( - Object.keys(api.config.locales || {}) - .map(p => p.slice(1)) - .filter(Boolean), - page, - typeof api.config.permalinks === 'function' - ? api.config.permalinks(page) - : api.config.permalinks - ) - - if (!page.internal || !page.internal.id) { - throw new Error(`Page must have an internal id.`) - } - - page.assets = page.assets - ? prefixAssets( - page.assets, - page.internal.absolute - ? path.dirname(page.internal.absolute) - : api.opts.cwd - ) - : {} - - // Ensure this page is not saved - // So that it will be emitted to disk later in `emitPages` hook - page.internal.saved = false - - // Backward compatible - // TODO: remove in 1.0 - page.attributes = page - - return page - } - - createPage(page, { file, normalize } = {}) { - if (normalize !== false) { - page = this.normalizePage(page, file) - } - - this.set(page.internal.id, page) - } - - removeWhere(getCondition) { - for (const page of this.values()) { - const condition = getCondition(page) - if (condition) { - this.delete(page.internal.id) - } - } - } - - getPagePublicFields(page) { - page = typeof page === 'string' ? this.get(page) : page - if (!page) { - return page - } - - const res = Object.assign({}, page, { - content: undefined, - internal: undefined - }) - // TODO: remove in 1.0 - res.attributes = res - return res - } - - createRedirect(_configs) { - if (_configs) { - const configs = [].concat(_configs) - - for (const config of configs) { - this.redirectRoutes.set(config.fromPath, config) - } - } - } - - getMatchedLocalePath(permalink) { - const localePaths = Object.keys(this.api.config.locales || {}).filter( - p => p !== '/' - ) - - for (const localePath of localePaths) { - if (localePath === permalink || permalink.startsWith(localePath)) { - return localePath - } - } - - return '/' - } -} diff --git a/packages/saber/lib/index.js b/packages/saber/lib/index.js deleted file mode 100644 index c5c7fbf05..000000000 --- a/packages/saber/lib/index.js +++ /dev/null @@ -1,398 +0,0 @@ -const path = require('path') -const http = require('http') -const { fs } = require('saber-utils') -const { log, colors } = require('saber-log') -const resolveFrom = require('resolve-from') -const merge = require('lodash.merge') -const { SyncHook, AsyncSeriesHook, SyncWaterfallHook } = require('tapable') -const getPort = require('get-port') -const Pages = require('./Pages') -const BrowserApi = require('./BrowserApi') -const Transformers = require('./Transformers') -const configLoader = require('./utils/configLoader') -const resolvePackage = require('./utils/resolvePackage') -const builtinPlugins = require('./plugins') -const Compiler = require('./Compiler') -const WebpackUtils = require('./WebpackUtils') - -class Saber { - constructor(opts = {}, config = {}) { - this.opts = opts - this.opts.cwd = path.resolve(opts.cwd || '.') - this.initialConfig = config - this.pages = new Pages(this) - this.browserApi = new BrowserApi(this) - this.webpackUtils = new WebpackUtils(this) - this.log = log - this.colors = colors - this.utils = require('saber-utils') - this.hooks = { - // Before all user plugins have been applied - beforePlugins: new AsyncSeriesHook(), - filterPlugins: new SyncWaterfallHook(['plugins']), - // After all user plugins have been applied - afterPlugins: new AsyncSeriesHook(), - // Before running the build process - beforeRun: new AsyncSeriesHook(), - onUpdateConfigFile: new AsyncSeriesHook(), - // Extend webpack config - chainWebpack: new SyncHook(['webpackChain', 'opts']), - getWebpackConfig: new SyncWaterfallHook(['config', 'opts']), - // Extend markdown-it config - chainMarkdown: new SyncHook(['config']), - chainTemplate: new SyncHook(['config']), - emitRoutes: new AsyncSeriesHook(), - // Called after running webpack - afterBuild: new AsyncSeriesHook(), - // Called after generate static HTML files - afterGenerate: new AsyncSeriesHook(), - getDocumentData: new SyncWaterfallHook(['documentData', 'ssrContext']), - getDocument: new SyncWaterfallHook(['document', 'ssrContext']), - defineVariables: new SyncWaterfallHook(['variables']), - // Called before creating pages for the first time - initPages: new AsyncSeriesHook(), - // Called when a new page is added - onCreatePage: new AsyncSeriesHook(['page']), - // Called when all pages are added to our `source` - onCreatePages: new AsyncSeriesHook(), - // Emit pages as .saberpage files when necessary - emitPages: new AsyncSeriesHook(), - // Call this hook to manipulate a page, it's usually used by file watcher - manipulatePage: new AsyncSeriesHook(['data']), - // Call when server renderer is created and updated - onCreateRenderer: new AsyncSeriesHook(['renderer', 'isFirstTime']), - // Called before exporting a page as static HTML file - beforeExportPage: new AsyncSeriesHook(['context', 'exportedPage']), - // Called after exporting a page - afterExportPage: new AsyncSeriesHook(['context', 'exportedPage']), - // Called after creating the server - onCreateServer: new SyncHook(['server']) - } - - this.transformers = new Transformers() - this.runtimePolyfills = new Set() - this.compilers = { - server: new Compiler('server', this), - client: new Compiler('client', this) - } - - for (const hook of Object.keys(this.hooks)) { - const ignoreNames = ['theme-node-api', 'user-node-api'] - this.hooks[hook].intercept({ - register(tapInfo) { - const { fn, name } = tapInfo - tapInfo.fn = (...args) => { - if (!ignoreNames.includes(name)) { - const msg = `${hook} ${colors.dim(`(${name})`)}` - log.verbose(msg) - } - - return fn(...args) - } - - return tapInfo - } - }) - } - - if (opts.verbose) { - process.env.SABER_LOG_LEVEL = 4 - } - } - - get dev() { - return Boolean(this.opts.dev) - } - - get lazy() { - return this.dev && this.config.build.lazy - } - - async prepare() { - // Load package.json data - this.pkg = configLoader.load({ - files: ['package.json'], - cwd: this.opts.cwd - }) - this.pkg.data = this.pkg.data || {} - - // Load Saber config - const { data: config, path: configPath } = configLoader.load({ - files: configLoader.CONFIG_FILES, - cwd: this.opts.cwd - }) - - await this.setConfig(config, configPath) - - if (this.configPath) { - log.info( - `Using config file: ${colors.dim( - path.relative(process.cwd(), configPath) - )}` - ) - } - - this.RendererClass = this.config.renderer - ? resolvePackage(this.config.renderer, { - cwd: this.configDir, - prefix: 'saber-renderer-' - }) - : require('../vue-renderer/lib') - this.renderer = new this.RendererClass(this) - - // Load theme - if (this.config.theme) { - this.theme = resolvePackage(this.config.theme, { - cwd: this.configDir, - prefix: 'saber-theme-' - }) - // When a theme is loaded from `node_modules` and `$theme/dist` directory exists - // We use the `dist` directory instead - if (/node_modules/.test(this.theme)) { - const distDir = path.join(this.theme, 'dist') - if (fs.existsSync(distDir)) { - this.theme = distDir - } - } - - log.info(`Using theme: ${colors.dim(this.config.theme)}`) - log.verbose(() => `Theme directory: ${colors.dim(this.theme)}`) - } else { - this.theme = this.RendererClass.defaultTheme - } - - // Load built-in plugins - for (const plugin of builtinPlugins) { - await this.applyPlugin(require(plugin.resolve), plugin.options) - } - - // Load user plugins - await this.hooks.beforePlugins.promise() - - const userPlugins = this.getUserPlugins() - if (userPlugins.length > 0) { - log.info( - `Using ${userPlugins.length} plugin${ - userPlugins.length > 1 ? 's' : '' - } from config file` - ) - } - - for (const plugin of userPlugins) { - await this.applyPlugin(plugin, plugin.options, plugin.location) - } - - await this.hooks.afterPlugins.promise() - } - - async setConfig(config, configPath = this.configPath) { - this.configPath = configPath - if (configPath) { - this.configDir = path.dirname(configPath) - } else { - this.configDir = null - } - - const initialRun = !this.config - this.config = merge({}, config, this.initialConfig) - // Validate config, apply default values, normalize some values - this.config = require('./utils/validateConfig')(this.config, { - dev: this.dev - }) - - // Make sure the port is available - const { port } = this.config.server - this.config.server._originalPort = port - if (initialRun) { - this.config.server.port = await getPort({ - port: getPort.makeRange(port, port + 1000), - host: this.config.server.host - }) - } - } - - async applyPlugin(plugin, options, pluginLocation) { - await plugin.apply(this, options) - - if (!plugin.name.startsWith('builtin:')) { - log.verbose( - () => - `Using plugin "${colors.bold(plugin.name)}" ${ - pluginLocation ? colors.dim(pluginLocation) : '' - }` - ) - } - } - - getUserPlugins() { - // Plugins that are specified in user config, a.k.a. saber-config.js etc - const plugins = - this.configDir && this.config.plugins - ? this.config.plugins.map(p => { - if (typeof p === 'string') { - p = { resolve: p } - } - - const location = resolveFrom(this.configDir, p.resolve) - - const plugin = require(location) - plugin.location = location - plugin.options = p.options - - return plugin - }) - : [] - - const applyFilterPlugins = plugins => { - const handlers = new Set() - - for (const plugin of plugins) { - const { filterPlugins, options } = plugin - if (filterPlugins) { - delete plugin.filterPlugins - handlers.add(plugins => filterPlugins(plugins, options)) - } - } - - if (handlers.size > 0) { - for (const handler of handlers) { - plugins = handler(plugins) - } - - return applyFilterPlugins(plugins) - } - - return plugins - } - - return applyFilterPlugins(this.hooks.filterPlugins.call(plugins)) - } - - resolveCache(...args) { - return this.resolveCwd('.saber', ...args) - } - - resolveCwd(...args) { - return path.resolve(this.opts.cwd, ...args) - } - - resolveOwnDir(...args) { - return path.join(__dirname, '../', ...args) - } - - resolveOutDir(...args) { - return this.resolveCwd(this.config.build.outDir, ...args) - } - - getWebpackConfig(opts) { - opts = Object.assign({ type: 'client' }, opts) - const chain = require('./webpack/webpack.config')(this, opts) - this.hooks.chainWebpack.call(chain, opts) - const config = this.hooks.getWebpackConfig.call(chain.toConfig(), opts) - - if (this.opts.inspectWebpack) { - require('./utils/inspectWebpack')(config, opts.type) - } - - return config - } - - getDocument(context) { - const initialHTML = this.RendererClass.getDocument(context) - return this.hooks.getDocument.call(initialHTML, context) - } - - async run() { - // Throw an error if both `public` and `.saber/public` exist - // Because they are replaced by `static` and `public` - // TODO: remove this error before v1.0 - const hasOldPublicFolder = await Promise.all([ - fs.pathExists(this.resolveCache('public')), - fs.pathExists(this.resolveCwd('public')), - fs.pathExists(this.resolveCwd('public/index.html')) - ]).then( - ([hasOldOutDir, hasPublicDir, hasNewPublicDir]) => - hasOldOutDir && hasPublicDir && !hasNewPublicDir - ) - if (hasOldPublicFolder) { - // Prevent from deleting public folder - throw new Error( - [ - `It seems you are using the ${colors.underline( - colors.cyan('public') - )} folder to store static files,`, - ` this behavior has changed and now we use ${colors.underline( - colors.cyan('static') - )} folder for static files`, - ` while ${colors.underline( - colors.cyan('public') - )} folder is used to output generated files,`, - ` to prevent from unexpectedly deleting your ${colors.underline( - colors.cyan('public') - )} folder, please rename it to ${colors.underline( - colors.cyan('static') - )} and delete ${colors.underline( - colors.cyan('.saber/public') - )} folder as well` - ].join('') - ) - } - - await this.hooks.beforeRun.promise() - - await this.hooks.emitRoutes.promise() - } - - // Build app in production mode - async build({ skipCompilation }) { - await this.prepare() - await this.run() - if (!skipCompilation) { - await this.renderer.build() - await this.hooks.afterBuild.promise() - } - - await this.renderer.generate() - await this.hooks.afterGenerate.promise() - } - - async serve() { - await this.prepare() - await this.run() - - const server = http.createServer(this.renderer.getRequestHandler()) - - server.listen(this.config.server.port, this.config.server.host) - } - - async serveOutDir() { - await this.prepare() - return require('./utils/serveDir')({ - dir: this.resolveOutDir(), - host: this.config.server.host, - port: this.config.server.port - }) - } - - hasDependency(name) { - return this.getDependencies().includes(name) - } - - getDependencies() { - return [ - ...Object.keys(this.pkg.data.dependencies || {}), - ...Object.keys(this.pkg.data.devDependencies || {}) - ] - } - - localResolve(name) { - return require('resolve-from').silent(this.opts.cwd, name) - } - - localRequire(name) { - const resolved = this.localResolve(name) - return resolved && require(resolved) - } -} - -module.exports = (opts, config) => new Saber(opts, config) diff --git a/packages/saber/lib/plugins/watch-config.js b/packages/saber/lib/plugins/watch-config.js deleted file mode 100644 index 4f67d2b41..000000000 --- a/packages/saber/lib/plugins/watch-config.js +++ /dev/null @@ -1,63 +0,0 @@ -const path = require('path') -const { fs } = require('saber-utils') -const { log } = require('saber-log') -const deepEqual = require('fast-deep-equal') -const { load, CONFIG_FILES } = require('../utils/configLoader') - -const ID = 'builtin:emit-config' - -exports.name = ID - -exports.apply = api => { - api.hooks.beforeRun.tapPromise(ID, async () => { - const outPath = api.resolveCache('config.json') - - const emit = config => - fs.outputFile( - outPath, - JSON.stringify({ - siteConfig: config.siteConfig || {}, - themeConfig: config.themeConfig || {}, - locales: config.locales || {} - }), - 'utf8' - ) - - const checkIfConfigChanged = (newConfig, prevConfig) => { - const dropUnnecessary = config => - Object.assign({}, config, { - siteConfig: undefined, - themeConfig: undefined, - locales: undefined - }) - if (!deepEqual(dropUnnecessary(newConfig), dropUnnecessary(prevConfig))) { - log.warn( - `Found a change in your Saber config file, restart server to see the effect.` - ) - } - } - - // Emit config.json anyways - await emit(api.config) - - if (api.dev) { - const cwd = api.configDir || api.resolveCwd() - const watcher = require('chokidar').watch(CONFIG_FILES, { - ignoreInitial: true, - cwd - }) - watcher.on('all', async (type, filename) => { - const filepath = path.join(cwd, filename) - const { data = {}, path: configPath } = await load({ - files: [filepath] - }) - - const prevConfig = api.config - await api.setConfig(data, configPath) - checkIfConfigChanged(api.config, prevConfig) - await api.hooks.onUpdateConfigFile.promise() - await emit(api.config) - }) - } - }) -} diff --git a/packages/saber/package.json b/packages/saber/package.json index 574cb7921..af6cc3bd2 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -3,19 +3,21 @@ "version": "0.10.4", "description": "A simple yet powerful static site generator", "files": [ - "bin", - "lib", - "!**/*.test.js", - "!**/__*__/**", + "/babel.js", "/types", - "/vue-renderer", - "/babel.js" + "/dist", + "/vue-app", + "/declarations.d.ts" ], "scripts": { - "test": "jest --env node" + "test": "tsc && jest", + "prepublishOnly": "yarn build", + "build": "tsc", + "lint": "eslint src --ext js,ts", + "build:typedoc": "typedoc types/index.d.ts --out ../../website/public/typedoc --readme none --exclude \"**/src/**\" --theme minimal --mode file --includeDeclarations --excludeExternals --excludePrivate --excludeProtected --entryPoint Saber" }, - "main": "lib/index.js", - "bin": "lib/cli.js", + "main": "dist/index.js", + "bin": "dist/cli.js", "types": "types/index.d.ts", "license": "MIT", "dependencies": { @@ -55,7 +57,7 @@ "saber-utils": "^0.2.3", "serve-static": "^1.13.2", "slugo": "^0.3.1", - "superstruct": "^0.6.0", + "superstruct": "^0.8.2", "tapable": "^1.1.1", "time-fix-plugin": "^2.0.5", "url-loader": "^2.0.1", @@ -74,14 +76,12 @@ }, "devDependencies": { "@types/fs-extra": "8.0.0", + "@types/hash-sum": "^1.0.0", + "@types/lodash.merge": "^4.6.6", "@types/resolve-from": "5.0.1", - "@types/superstruct": "0.5.0", "@types/webpack": "4.39.1", - "jest": "24.9.0", - "markdown-it-footnote": "3.0.2", - "typescript": "3.6.3" + "markdown-it-footnote": "3.0.2" }, - "xo": false, "engines": { "node": ">=8" } diff --git a/packages/saber/lib/BrowserApi.js b/packages/saber/src/BrowserApi.ts similarity index 75% rename from packages/saber/lib/BrowserApi.js rename to packages/saber/src/BrowserApi.ts index 8b7c3b30f..6d4db833c 100644 --- a/packages/saber/lib/BrowserApi.js +++ b/packages/saber/src/BrowserApi.ts @@ -1,12 +1,23 @@ -const path = require('path') -const { fs, slash } = require('saber-utils') +import path from 'path' +import { fs, slash } from 'saber-utils' +import { Saber } from './' -module.exports = class BrowserApi extends Set { - constructor(api) { +export class BrowserApi extends Set { + api: Saber + + constructor(api: Saber) { super() this.api = api } + /** + * Register a file that implements Saber's browser API + */ + add(filepath: string) { + super.add(filepath) + return this + } + async reload() { const files = [...this.values()].map((file, i) => { const name = `_${path.basename(file).replace(/\W/gi, '_')}_${i}` diff --git a/packages/saber/lib/Compiler.js b/packages/saber/src/Compiler.ts similarity index 72% rename from packages/saber/lib/Compiler.js rename to packages/saber/src/Compiler.ts index 3b3bdab30..0ffdf4063 100644 --- a/packages/saber/lib/Compiler.js +++ b/packages/saber/src/Compiler.ts @@ -1,19 +1,27 @@ -const { EventEmitter } = require('events') +import { EventEmitter } from 'events' +import WebpackChain from 'webpack-chain' +import { Compiler as WebpackCompiler } from 'webpack' +import { Saber } from './' -module.exports = class Compiler extends EventEmitter { - constructor(type, api) { +export class Compiler extends EventEmitter { + type: string + api: Saber + status: 'waiting' | 'success' | 'building' | 'error' + + constructor(type: string, api: Saber) { super() this.type = type this.api = api this.status = 'waiting' } - injectToWebpack(config) { + injectToWebpack(config: WebpackChain) { const ID = `compiler-${this.type}` + // eslint-disable-next-line @typescript-eslint/no-this-alias const context = this config.plugin(ID).use( class { - apply(compiler) { + apply(compiler: WebpackCompiler) { compiler.hooks.watchRun.tap(ID, () => { context.status = 'building' context.emit('status-changed', { diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts new file mode 100644 index 000000000..a1f4865ea --- /dev/null +++ b/packages/saber/src/Pages.ts @@ -0,0 +1,296 @@ +import path from 'path' +import hash from 'hash-sum' +import { slash } from 'saber-utils' +import { log } from 'saber-log' +import merge from 'lodash.merge' +import getPermalink from './utils/getPermalink' +import getPageType from './utils/getPageType' +import { prefixAssets } from './utils/assetsAttribute' +import { Saber } from './' +import { Transformer } from './Transformers' + +// A regex parsing RFC3339 date followed by {_,-}, and ended by some characters +const FILE_NAME_REGEXP = /^(((\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])(T([01]\d|2[0-3]):([0-5]\d):([0-5]\d|60)(\.\d+)?(Z|(\+|-)([01]\d|2[0-3]):([0-5]\d)))?)(_|-))?(.+$)/ + +export interface RedirecrtRouteConfig { + fromPath: string + toPath: string + /** Make it a permanent redirect; defaults to temporary */ + redirectInBrowser?: boolean + /** + * Redirects are generally for redirecting legacy URLs to their new configuration. If you + * can’t update your UI for some reason, set `redirectInBrowser` to `true` and Saber will handle + * redirecting in the client as well.` + */ + isPermanent?: boolean +} + +export interface FileInfo { + relative: string + absolute: string + birthtime: Date + mtime: Date + content: string +} + +export interface Assets { + [k: string]: string +} + +export interface CreatePageOptions { + /** Default to `true` when not specified */ + normalize?: boolean + file?: FileInfo +} + +export interface CreatePageInput { + type: 'page' | 'post' + content: string + /** + * We apply different transformers based on the `contentType` + * Built-in types are `default`, `markdown`, `vue` + * Default to `default` + */ + contentType?: string + createdAt?: Date | string + updatedAt?: Date | string + /** + * Set one of `permalink` and `slug` + * When `permalink` is set we ignore `slug` + * Otherwise we use `config.permalinks` option with `slug` to generate a permalink + */ + permalink?: string + slug?: string + assets?: Assets + /** Internal info is automatically removed from your app runtime for security reasons */ + internal: { + /** A unique ID for this page */ + id: string + /** + * Is this page a local file? + * If it is you also need to set `absolute` and `relative` + */ + isFile?: boolean + absolute?: string + relative?: string + + /** + * @private + * Used by Saber internally for file watcher + */ + saved?: boolean + } + /** You can also provide additonal data */ + [k: string]: any +} + +export interface Page { + type: 'page' | 'post' + content: string + contentType: string + createdAt?: Date + updatedAt?: Date + permalink: string + slug?: string + internal: { + id: string + isFile?: boolean + absolute?: string + relative?: string + /** @private */ + saved?: boolean + } + attributes: Page + assets: Assets + [k: string]: any +} + +export class Pages extends Map { + api: Saber + redirectRoutes: Map + + constructor(api: Saber) { + super() + this.api = api + this.redirectRoutes = new Map() + } + + normalizePage(_page: CreatePageInput, file?: FileInfo): Page { + const { api } = this + + let page = merge( + { + internal: {}, + contentType: 'default' + }, + _page + ) + + let parsedFileName: RegExpExecArray | null = null + if (file) { + const relativePath = slash(file.relative) + const absolutePath = slash(file.absolute) + parsedFileName = FILE_NAME_REGEXP.exec( + relativePath + // Remove leading _posts/ + .replace(/^_posts\//, '') + // Remove extension + .replace(/\.[a-z]+$/i, '') + ) as RegExpExecArray // It could never be `null` + const slug = parsedFileName[16] + page = merge({}, page, { + slug, + internal: { + id: hash(file.absolute), + absolute: absolutePath, + relative: relativePath, + isFile: true + }, + contentType: api.transformers.getContentTypeByExtension( + path.extname(relativePath).slice(1) + ), + content: file.content + }) + } + + let transformer = api.transformers.get(page.contentType) + + if (!transformer) { + log.warn(`No transformer was found for content type: ${page.contentType}`) + transformer = api.transformers.get('default') as Transformer + } + + // Transform page + if (transformer.transform) { + transformer.transform(page) + } + + // These fields are computed from other fields + // And transformers can update the `page` + // So we set them after applying the transformer + + if (file && parsedFileName) { + // Read createdAt from page attribute + // Or fallback to `page.date` (Hexo compatibility) + // Or fallback to the date in fileName + // Or fallback to the `file.birthtime` + page.createdAt = + page.createdAt || page.date || parsedFileName[2] || file.birthtime + + // Read updatedAt from page attribute + // Or fallback to `page.updated` (Hexo compatibility) + // Or fallback to `file.mtime` + page.updatedAt = page.updatedAt || page.updated || file.mtime + + page.type = page.type || getPageType(slash(file.relative)) + } + + // Ensure date format + if (typeof page.createdAt === 'string') { + page.createdAt = new Date(page.createdAt) + } + if (typeof page.updatedAt === 'string') { + page.updatedAt = new Date(page.updatedAt) + } + + if (!page.permalink && page.slug) { + page.permalink = getPermalink( + Object.keys(api.config.locales || {}) + .map(p => p.slice(1)) + .filter(Boolean), + { slug: page.slug, type: page.type, createdAt: page.createdAt }, + typeof api.config.permalinks === 'function' + ? api.config.permalinks(page) + : api.config.permalinks + ) + } + + if (!page.internal || !page.internal.id) { + throw new Error(`Page must have an internal id.`) + } + + page.assets = page.assets + ? prefixAssets( + page.assets, + page.internal.absolute + ? path.dirname(page.internal.absolute) + : api.opts.cwd + ) + : {} + + // Ensure this page is not saved + // So that it will be emitted to disk later in `emitPages` hook + page.internal.saved = false + + // Backward compatible + // TODO: remove in 1.0 + page.attributes = page + + return page as Page + } + + createPage(page: CreatePageInput, options: CreatePageOptions = {}) { + const { file, normalize } = options + if (normalize !== false) { + page = this.normalizePage(page, file) + } + + this.set(page.internal.id, page as Page) + } + + removePage(id: string) { + this.removeWhere(page => { + return page.internal.id === id + }) + } + + removeWhere(getCondition: (page: Page) => boolean) { + for (const page of this.values()) { + const condition = getCondition(page) + if (condition) { + this.delete(page.internal.id) + } + } + } + + getPagePublicFields(page: string | Page) { + let result = typeof page === 'string' ? this.get(page) : page + + if (!result) { + throw new Error(`The page doesn't exist`) + } + + result = Object.assign({}, result, { + content: undefined, + internal: undefined + }) + // TODO: remove in 1.0 + result.attributes = result + + return result as Omit + } + + createRedirect(_configs: RedirecrtRouteConfig | RedirecrtRouteConfig[]) { + if (_configs) { + const configs = Array.isArray(_configs) ? _configs : [_configs] + + for (const config of configs) { + this.redirectRoutes.set(config.fromPath, config) + } + } + } + + getMatchedLocalePath(permalink: string) { + const localePaths = Object.keys(this.api.config.locales || {}).filter( + p => p !== '/' + ) + + for (const localePath of localePaths) { + if (localePath === permalink || permalink.startsWith(localePath)) { + return localePath + } + } + + return '/' + } +} diff --git a/packages/saber/lib/Transformers.js b/packages/saber/src/Transformers.ts similarity index 60% rename from packages/saber/lib/Transformers.js rename to packages/saber/src/Transformers.ts index 478fd0995..64b73225b 100644 --- a/packages/saber/lib/Transformers.js +++ b/packages/saber/src/Transformers.ts @@ -1,4 +1,14 @@ -module.exports = class Transformers { +import { CreatePageInput, Page } from './Pages' + +export interface Transformer { + extensions: string[] + transform?: (page: CreatePageInput) => void + getPageComponent: (page: Page) => string +} + +export class Transformers { + transformers: Map + constructor() { this.transformers = new Map() } @@ -7,16 +17,16 @@ module.exports = class Transformers { return require('./utils/parseFrontmatter') } - add(contentType, transformer) { + add(contentType: string, transformer: Transformer) { this.transformers.set(contentType, transformer) } - get(contentType) { + get(contentType: string) { return this.transformers.get(contentType) } get supportedExtensions() { - let extensions = [] + let extensions: string[] = [] for (const transformer of this.transformers.values()) { extensions = [...extensions, ...(transformer.extensions || [])] } @@ -24,7 +34,7 @@ module.exports = class Transformers { return extensions } - getContentTypeByExtension(extension) { + getContentTypeByExtension(extension: string) { for (const [contentType, transformer] of this.transformers.entries()) { if ( transformer.extensions && diff --git a/packages/saber/lib/WebpackUtils.js b/packages/saber/src/WebpackUtils.ts similarity index 66% rename from packages/saber/lib/WebpackUtils.js rename to packages/saber/src/WebpackUtils.ts index 8eec06847..19e9479a9 100644 --- a/packages/saber/lib/WebpackUtils.js +++ b/packages/saber/src/WebpackUtils.ts @@ -1,7 +1,11 @@ -const path = require('path') +import path from 'path' +import { Rule } from 'webpack-chain' +import { Saber } from './' -module.exports = class WebpackUtils { - constructor(api) { +export class WebpackUtils { + api: Saber + + constructor(api: Saber) { this.api = api } @@ -9,7 +13,7 @@ module.exports = class WebpackUtils { return this.api.config.build.cache !== false } - getCacheOptions(loader, obj) { + getCacheOptions(loader: string, obj: object) { return this.shouldCache ? { cacheDirectory: this.api.resolveCache(path.join('cache', loader)), @@ -19,7 +23,7 @@ module.exports = class WebpackUtils { : {} } - addCacheSupport(rule, loader, obj) { + addCacheSupport(rule: Rule, loader: string, obj: object) { if (this.shouldCache) { rule .use('cache-loader') diff --git a/packages/saber/lib/babel/preset.js b/packages/saber/src/babel/preset.js similarity index 100% rename from packages/saber/lib/babel/preset.js rename to packages/saber/src/babel/preset.js diff --git a/packages/saber/lib/cli-commands/build.js b/packages/saber/src/cli-commands/build.js similarity index 85% rename from packages/saber/lib/cli-commands/build.js rename to packages/saber/src/cli-commands/build.js index f7f70164f..f84defd7f 100644 --- a/packages/saber/lib/cli-commands/build.js +++ b/packages/saber/src/cli-commands/build.js @@ -26,11 +26,12 @@ module.exports = function(cli) { delete options.skipCompilation delete options.cache - return require('..')(Object.assign({ cwd, dev: false }, options), { - build: { - cache - } - }) + return require('..') + .createSaber(Object.assign({ cwd, dev: false }, options), { + build: { + cache + } + }) .build({ skipCompilation }) .catch(handleError) }) diff --git a/packages/saber/lib/cli-commands/dev.js b/packages/saber/src/cli-commands/dev.js similarity index 76% rename from packages/saber/lib/cli-commands/dev.js rename to packages/saber/src/cli-commands/dev.js index f9cd03d0d..62e762b30 100644 --- a/packages/saber/lib/cli-commands/dev.js +++ b/packages/saber/src/cli-commands/dev.js @@ -18,16 +18,17 @@ module.exports = function(cli) { delete options.host delete options.port delete options.lazy - return require('..')(Object.assign({ cwd, dev: true }, options), { - server: { - host, - port - }, - build: { - lazy, - cache - } - }) + return require('..') + .createSaber(Object.assign({ cwd, dev: true }, options), { + server: { + host, + port + }, + build: { + lazy, + cache + } + }) .serve() .catch(handleError) }) diff --git a/packages/saber/lib/cli-commands/eject-theme.js b/packages/saber/src/cli-commands/eject-theme.js similarity index 100% rename from packages/saber/lib/cli-commands/eject-theme.js rename to packages/saber/src/cli-commands/eject-theme.js diff --git a/packages/saber/lib/cli-commands/index.js b/packages/saber/src/cli-commands/index.js similarity index 100% rename from packages/saber/lib/cli-commands/index.js rename to packages/saber/src/cli-commands/index.js diff --git a/packages/saber/lib/cli-commands/serve.js b/packages/saber/src/cli-commands/serve.js similarity index 74% rename from packages/saber/lib/cli-commands/serve.js rename to packages/saber/src/cli-commands/serve.js index e2f63c441..4c1332e8a 100644 --- a/packages/saber/lib/cli-commands/serve.js +++ b/packages/saber/src/cli-commands/serve.js @@ -11,12 +11,13 @@ module.exports = function(cli) { const { host, port } = options delete options.host delete options.port - return require('..')(Object.assign({ cwd, dev: true }, options), { - server: { - host, - port - } - }) + return require('..') + .createSaber(Object.assign({ cwd, dev: true }, options), { + server: { + host, + port + } + }) .serveOutDir() .catch(handleError) }) diff --git a/packages/saber/lib/cli-commands/utils.js b/packages/saber/src/cli-commands/utils.js similarity index 100% rename from packages/saber/lib/cli-commands/utils.js rename to packages/saber/src/cli-commands/utils.js diff --git a/packages/saber/lib/cli.js b/packages/saber/src/cli.js similarity index 100% rename from packages/saber/lib/cli.js rename to packages/saber/src/cli.js diff --git a/packages/saber/lib/config-chain/Options.js b/packages/saber/src/config-chain/Options.js similarity index 100% rename from packages/saber/lib/config-chain/Options.js rename to packages/saber/src/config-chain/Options.js diff --git a/packages/saber/lib/config-chain/Plugin.js b/packages/saber/src/config-chain/Plugin.js similarity index 100% rename from packages/saber/lib/config-chain/Plugin.js rename to packages/saber/src/config-chain/Plugin.js diff --git a/packages/saber/lib/config-chain/index.js b/packages/saber/src/config-chain/index.js similarity index 100% rename from packages/saber/lib/config-chain/index.js rename to packages/saber/src/config-chain/index.js diff --git a/packages/saber/src/hooks.ts b/packages/saber/src/hooks.ts new file mode 100644 index 000000000..b5b16497f --- /dev/null +++ b/packages/saber/src/hooks.ts @@ -0,0 +1,44 @@ +import { SyncHook, AsyncSeriesHook, SyncWaterfallHook } from 'tapable' + +export const hooks = { + // Before all user plugins have been applied + beforePlugins: new AsyncSeriesHook(), + filterPlugins: new SyncWaterfallHook(['plugins']), + // After all user plugins have been applied + afterPlugins: new AsyncSeriesHook(), + // Before running the build process + beforeRun: new AsyncSeriesHook(), + onUpdateConfigFile: new AsyncSeriesHook(), + // Extend webpack config + chainWebpack: new SyncHook(['webpackChain', 'opts']), + getWebpackConfig: new SyncWaterfallHook(['config', 'opts']), + // Extend markdown-it config + chainMarkdown: new SyncHook(['config']), + chainTemplate: new SyncHook(['config']), + emitRoutes: new AsyncSeriesHook(), + // Called after running webpack + afterBuild: new AsyncSeriesHook(), + // Called after generate static HTML files + afterGenerate: new AsyncSeriesHook(), + getDocumentData: new SyncWaterfallHook(['documentData', 'ssrContext']), + getDocument: new SyncWaterfallHook(['document', 'ssrContext']), + defineVariables: new SyncWaterfallHook(['variables']), + // Called before creating pages for the first time + initPages: new AsyncSeriesHook(), + // Called when a new page is added + onCreatePage: new AsyncSeriesHook(['page']), + // Called when all pages are added to our `source` + onCreatePages: new AsyncSeriesHook(), + // Emit pages as .saberpage files when necessary + emitPages: new AsyncSeriesHook(), + // Call this hook to manipulate a page, it's usually used by file watcher + manipulatePage: new AsyncSeriesHook(['data']), + // Call when server renderer is created and updated + onCreateRenderer: new AsyncSeriesHook(['renderer', 'isFirstTime']), + // Called before exporting a page as static HTML file + beforeExportPage: new AsyncSeriesHook(['context', 'exportedPage']), + // Called after exporting a page + afterExportPage: new AsyncSeriesHook(['context', 'exportedPage']), + // Called after creating the server + onCreateServer: new SyncHook(['server']) +} diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts new file mode 100644 index 000000000..bd08d6c4f --- /dev/null +++ b/packages/saber/src/index.ts @@ -0,0 +1,594 @@ +/// +import path from 'path' +import http from 'http' +import { fs } from 'saber-utils' +import { log, colors, Log } from 'saber-log' +import resolveFrom from 'resolve-from' +import merge from 'lodash.merge' +import getPort from 'get-port' +import { Pages, CreatePageInput } from './Pages' +import { BrowserApi } from './BrowserApi' +import { Transformers } from './Transformers' +import configLoader from './utils/configLoader' +import resolvePackage from './utils/resolvePackage' +import builtinPlugins from './plugins' +import { Compiler } from './Compiler' +import { WebpackUtils } from './WebpackUtils' +import { hooks } from './hooks' +import { VueRenderer } from './vue-renderer' +import { validateConfig, ValidatedSaberConfig } from './utils/validateConfig' + +export interface SaberConstructorOptions { + cwd?: string + verbose?: boolean + dev?: boolean + inspectWebpack?: boolean +} + +export interface SaberOptions { + cwd: string + verbose?: boolean + dev?: boolean + inspectWebpack?: boolean +} + +export interface SiteConfig { + /** Apply to tag */ + lang: string + [k: string]: any +} + +export interface ThemeConfig { + [k: string]: any +} + +export interface SaberPlugin { + name: string + apply: (api: Saber, options: any) => void | Promise + filterPlugins?: ( + plugins: ResolvedSaberPlugin[], + options?: any + ) => ResolvedSaberPlugin[] +} + +export interface SaberConfigPlugin { + resolve: string + options?: { [k: string]: any } +} + +export interface ResolvedSaberPlugin extends SaberPlugin { + location: string + options?: any +} + +export interface WebpackContext { + type: 'client' | 'server' + [k: string]: any +} + +export type PageType = 'page' | 'post' + +export interface Permalinks { + /** + * Permalink format for normal pages + * @default `/:slug.html` + */ + page?: string + /** + * Permalink format for posts + * @default `/posts/:slug.html` + */ + post?: string +} + +export interface SaberConfig { + /** The path or name of your theme */ + theme?: string + siteConfig?: SiteConfig + themeConfig?: object + locales?: { + [localePath: string]: { + siteConfig?: SiteConfig + themeConfig?: ThemeConfig + } + } + /** + * Customize permalink format based on page types (page or post) + */ + permalinks?: Permalinks | ((page: CreatePageInput) => Permalinks) + /** Build configurations */ + build?: { + /** + * The path to output generated files + * Defaul to `./public` + */ + outDir?: string + /** + * The root path where your website is localed + * Default to `/` + */ + publicUrl?: string + /** + * Extract CSS into standalone files + * Default to `false` + */ + extractCSS?: boolean + /** + * Toggle sourcemap for CSS + * Default to `false` + */ + cssSourceMap?: boolean + /** + * Options for CSS loaders + */ + loaderOptions?: { + /** sass-loader */ + sass?: any + /** less-loader */ + less?: any + /** stylus-loader */ + stylus?: any + /** css-loader */ + css?: any + /** postcss-loader */ + postcss?: any + } + /** + * Toggle cache for webpack + * Default to `true` + */ + cache?: boolean + /** + * Compile pages on demand + * @beta + */ + lazy?: boolean + } + server?: { + host?: string + port?: number + } + plugins?: Array + markdown?: { + /** The path to a module or npm package name that slugifies the markdown headers. */ + slugify?: string + /** + * Options for the internal markdown-it plugin for generating markdown headings and heading anchors. + */ + headings?: { + /** + * Inject markdown headings as `page.markdownHeadings` + * @default `true` + */ + markdownHeadings?: boolean + /** + * Generating permalinks + * @default `false` + */ + permalink?: boolean + permalinkComponent?: string + /** + * Inject permalink before heading text. + * @default `true` + */ + permalinkBefore?: string + /** + * The permalink symbol. + * @default `'#'` + */ + permalinkSymbol?: string + } + /** + * Show line numbers in code blocks + * @default `false` + */ + lineNumbers?: boolean + /** markdown-it plugins */ + plugins?: MarkdownPlugin[] + /** markdown-it options */ + options?: { + [k: string]: any + } + } + template?: { + /** + * Whether to open external links in new tab. + * @default `true` + */ + openLinkInNewTab?: boolean + /** + * A set of plugins that are used to transform Vue template. + */ + plugins?: any[] + } +} + +export interface MarkdownPlugin { + resolve: string + options?: { + [k: string]: any + } +} + +export class Saber { + opts: SaberOptions + initialConfig: SaberConfig + config: ValidatedSaberConfig + pages: Pages + browserApi: BrowserApi + webpackUtils: WebpackUtils + log: Log + colors: typeof colors + utils: typeof import('saber-utils') + hooks: typeof hooks + transformers: Transformers + runtimePolyfills: Set + compilers: { + [k: string]: Compiler + } + renderer: VueRenderer + pkg: { + path?: string + data: { + [k: string]: any + } + } + configDir?: string + configPath?: string + theme?: string + actualServerPort?: number + + constructor(opts: SaberConstructorOptions = {}, config: SaberConfig = {}) { + this.opts = { + ...opts, + cwd: path.resolve(opts.cwd || '.') + } + this.initialConfig = config + this.pages = new Pages(this) + this.browserApi = new BrowserApi(this) + this.webpackUtils = new WebpackUtils(this) + this.log = log + this.colors = colors + this.utils = require('saber-utils') + this.hooks = hooks + + this.transformers = new Transformers() + this.runtimePolyfills = new Set() + this.compilers = { + server: new Compiler('server', this), + client: new Compiler('client', this) + } + + const hookNames = Object.keys(this.hooks) as Array + for (const hook of hookNames) { + const ignoreNames = ['theme-node-api', 'user-node-api'] + this.hooks[hook].intercept({ + register(tapInfo) { + const { fn, name } = tapInfo + tapInfo.fn = (...args: any[]) => { + if (!ignoreNames.includes(name)) { + const msg = `${hook} ${colors.dim(`(${name})`)}` + log.verbose(msg) + } + + return fn(...args) + } + + return tapInfo + } + }) + } + + if (opts.verbose) { + process.env.SABER_LOG_LEVEL = '4' + } + + // Load package.json data + const loadedPkg = configLoader.load({ + files: ['package.json'], + cwd: this.opts.cwd + }) + this.pkg = { + ...loadedPkg, + data: loadedPkg.data || {} + } + + // To make TypeScript happy + // We actually initialize them in `prepare()` + // TODO: find a better way + this.configDir = '' + this.configPath = '' + + this.renderer = new VueRenderer() + + // Load Saber config + const loadedConfig = this.loadConfig() + this.config = loadedConfig.config + this.configPath = loadedConfig.configPath + this.configDir = this.configPath && path.dirname(this.configPath) + if (this.configPath) { + log.info( + `Using config file: ${colors.dim( + path.relative(process.cwd(), this.configPath) + )}` + ) + } + } + + loadConfig(configFiles = configLoader.CONFIG_FILES) { + const { data, path: configPath } = configLoader.load({ + files: configFiles, + cwd: this.opts.cwd + }) + return { + config: validateConfig(merge({}, data, this.initialConfig), { + dev: this.dev + }), + configPath + } + } + + setConfig(config: ValidatedSaberConfig, configPath?: string) { + this.config = config + this.configPath = configPath + this.configDir = configPath && path.dirname(configPath) + } + + get dev() { + return Boolean(this.opts.dev) + } + + get lazy() { + return this.dev && this.config.build.lazy + } + + async prepare() { + this.renderer.init(this) + + // Load theme + if (this.config.theme) { + this.theme = resolvePackage(this.config.theme, { + cwd: this.configDir || this.opts.cwd, + prefix: 'saber-theme-' + }) + // When a theme is loaded from `node_modules` and `$theme/dist` directory exists + // We use the `dist` directory instead + if (this.theme.includes('node_modules')) { + const distDir = path.join(this.theme, 'dist') + if (fs.existsSync(distDir)) { + this.theme = distDir + } + } + + log.info(`Using theme: ${colors.dim(this.config.theme)}`) + log.verbose(() => `Theme directory: ${colors.dim(this.theme)}`) + } else { + this.theme = this.renderer.defaultTheme + } + + // Load built-in plugins + for (const plugin of builtinPlugins) { + const resolvedPlugin = require(plugin.resolve) + await this.applyPlugin(resolvedPlugin.default || resolvedPlugin) + } + + // Load user plugins + await this.hooks.beforePlugins.promise() + + const userPlugins = this.getUserPlugins() + if (userPlugins.length > 0) { + log.info( + `Using ${userPlugins.length} plugin${ + userPlugins.length > 1 ? 's' : '' + } from config file` + ) + } + + for (const plugin of userPlugins) { + await this.applyPlugin(plugin, plugin.options, plugin.location) + } + + await this.hooks.afterPlugins.promise() + } + + async applyPlugin( + plugin: SaberPlugin, + options?: any, + pluginLocation?: string + ) { + await plugin.apply(this, options) + + if (!plugin.name.startsWith('builtin:')) { + log.verbose( + () => + `Using plugin "${colors.bold(plugin.name)}" ${ + pluginLocation ? colors.dim(pluginLocation) : '' + }` + ) + } + } + + getUserPlugins() { + // Plugins that are specified in user config, a.k.a. saber-config.js etc + const plugins: ResolvedSaberPlugin[] = + this.configDir && this.config.plugins + ? this.config.plugins.map(p => { + if (typeof p === 'string') { + p = { resolve: p } + } + + const location = resolveFrom(this.configDir as string, p.resolve) + + const resolvedPlugin = { + ...require(location), + location, + options: p.options + } + + return resolvedPlugin + }) + : [] + + const applyFilterPlugins = ( + plugins: ResolvedSaberPlugin[] + ): ResolvedSaberPlugin[] => { + type Handler = (plugins: ResolvedSaberPlugin[]) => ResolvedSaberPlugin[] + const handlers = new Set() + + for (const plugin of plugins) { + const { filterPlugins, options } = plugin + if (filterPlugins) { + delete plugin.filterPlugins + handlers.add(plugins => filterPlugins(plugins, options)) + } + } + + if (handlers.size > 0) { + for (const handler of handlers) { + plugins = handler(plugins) + } + + return applyFilterPlugins(plugins) + } + + return plugins + } + + return applyFilterPlugins(this.hooks.filterPlugins.call(plugins)) + } + + resolveCache(...args: string[]) { + return this.resolveCwd('.saber', ...args) + } + + resolveCwd(...args: string[]) { + return path.resolve(this.opts.cwd, ...args) + } + + resolveOwnDir(...args: string[]) { + return path.join(__dirname, '../', ...args) + } + + resolveOutDir(...args: string[]) { + return this.resolveCwd(this.config.build.outDir, ...args) + } + + getWebpackConfig(opts: WebpackContext) { + opts = Object.assign({ type: 'client' }, opts) + const chain = require('./webpack/webpack.config')(this, opts) + this.hooks.chainWebpack.call(chain, opts) + const config = this.hooks.getWebpackConfig.call(chain.toConfig(), opts) + + if (this.opts.inspectWebpack) { + require('./utils/inspectWebpack')(config, opts.type) + } + + return config + } + + async run() { + // Throw an error if both `public` and `.saber/public` exist + // Because they are replaced by `static` and `public` + // TODO: remove this error before v1.0 + const hasOldPublicFolder = await Promise.all([ + fs.pathExists(this.resolveCache('public')), + fs.pathExists(this.resolveCwd('public')), + fs.pathExists(this.resolveCwd('public/index.html')) + ]).then( + ([hasOldOutDir, hasPublicDir, hasNewPublicDir]) => + hasOldOutDir && hasPublicDir && !hasNewPublicDir + ) + if (hasOldPublicFolder) { + // Prevent from deleting public folder + throw new Error( + [ + `It seems you are using the ${colors.underline( + colors.cyan('public') + )} folder to store static files,`, + ` this behavior has changed and now we use ${colors.underline( + colors.cyan('static') + )} folder for static files`, + ` while ${colors.underline( + colors.cyan('public') + )} folder is used to output generated files,`, + ` to prevent from unexpectedly deleting your ${colors.underline( + colors.cyan('public') + )} folder, please rename it to ${colors.underline( + colors.cyan('static') + )} and delete ${colors.underline( + colors.cyan('.saber/public') + )} folder as well` + ].join('') + ) + } + + await this.hooks.beforeRun.promise() + + await this.hooks.emitRoutes.promise() + } + + // Build app in production mode + async build(options: { skipCompilation?: boolean } = {}) { + const { skipCompilation } = options + await this.prepare() + await this.run() + + if (!skipCompilation) { + await this.renderer.build() + await this.hooks.afterBuild.promise() + } + + await this.renderer.generate() + await this.hooks.afterGenerate.promise() + } + + async serve() { + await this.prepare() + await this.run() + + const server = http.createServer(this.renderer.getRequestHandler()) + + // Make sure the port is available + const { host, port = 3000 } = this.config.server + this.actualServerPort = await getPort({ + port: getPort.makeRange(port, port + 1000), + host + }) + + server.listen(this.actualServerPort, host) + } + + async serveOutDir() { + await this.prepare() + return require('./utils/serveDir')({ + dir: this.resolveOutDir(), + host: this.config.server.host, + port: this.config.server.port + }) + } + + hasDependency(name: string) { + return this.getDependencies().includes(name) + } + + getDependencies() { + return [ + ...Object.keys(this.pkg.data.dependencies || {}), + ...Object.keys(this.pkg.data.devDependencies || {}) + ] + } + + localResolve(name: string): string { + return require('resolve-from').silent(this.opts.cwd, name) + } + + localRequire(name: string): any { + const resolved = this.localResolve(name) + return resolved && require(resolved) + } +} + +export const createSaber = ( + opts: SaberConstructorOptions, + config: SaberConfig +) => new Saber(opts, config) diff --git a/packages/saber/lib/markdown/__test__/__snapshots__/highlight-plugin.test.js.snap b/packages/saber/src/markdown/__test__/__snapshots__/highlight-plugin.test.js.snap similarity index 100% rename from packages/saber/lib/markdown/__test__/__snapshots__/highlight-plugin.test.js.snap rename to packages/saber/src/markdown/__test__/__snapshots__/highlight-plugin.test.js.snap diff --git a/packages/saber/lib/markdown/__test__/create-env.js b/packages/saber/src/markdown/__test__/create-env.js similarity index 100% rename from packages/saber/lib/markdown/__test__/create-env.js rename to packages/saber/src/markdown/__test__/create-env.js diff --git a/packages/saber/lib/markdown/__test__/excerpt-plugin.test.js b/packages/saber/src/markdown/__test__/excerpt-plugin.test.js similarity index 100% rename from packages/saber/lib/markdown/__test__/excerpt-plugin.test.js rename to packages/saber/src/markdown/__test__/excerpt-plugin.test.js diff --git a/packages/saber/lib/markdown/__test__/headings-plugin.test.js b/packages/saber/src/markdown/__test__/headings-plugin.test.js similarity index 100% rename from packages/saber/lib/markdown/__test__/headings-plugin.test.js rename to packages/saber/src/markdown/__test__/headings-plugin.test.js diff --git a/packages/saber/lib/markdown/__test__/highlight-plugin.test.js b/packages/saber/src/markdown/__test__/highlight-plugin.test.js similarity index 100% rename from packages/saber/lib/markdown/__test__/highlight-plugin.test.js rename to packages/saber/src/markdown/__test__/highlight-plugin.test.js diff --git a/packages/saber/lib/markdown/escape-interpolations-plugin.js b/packages/saber/src/markdown/escape-interpolations-plugin.js similarity index 100% rename from packages/saber/lib/markdown/escape-interpolations-plugin.js rename to packages/saber/src/markdown/escape-interpolations-plugin.js diff --git a/packages/saber/lib/markdown/excerpt-plugin.js b/packages/saber/src/markdown/excerpt-plugin.js similarity index 100% rename from packages/saber/lib/markdown/excerpt-plugin.js rename to packages/saber/src/markdown/excerpt-plugin.js diff --git a/packages/saber/lib/markdown/headings-plugin.js b/packages/saber/src/markdown/headings-plugin.js similarity index 100% rename from packages/saber/lib/markdown/headings-plugin.js rename to packages/saber/src/markdown/headings-plugin.js diff --git a/packages/saber/lib/markdown/highlight-plugin.js b/packages/saber/src/markdown/highlight-plugin.js similarity index 100% rename from packages/saber/lib/markdown/highlight-plugin.js rename to packages/saber/src/markdown/highlight-plugin.js diff --git a/packages/saber/lib/markdown/hoist-tags-plugin.js b/packages/saber/src/markdown/hoist-tags-plugin.js similarity index 100% rename from packages/saber/lib/markdown/hoist-tags-plugin.js rename to packages/saber/src/markdown/hoist-tags-plugin.js diff --git a/packages/saber/lib/markdown/task-list-plugin.js b/packages/saber/src/markdown/task-list-plugin.js similarity index 99% rename from packages/saber/lib/markdown/task-list-plugin.js rename to packages/saber/src/markdown/task-list-plugin.js index 5d0403aa3..fdc9ba4c0 100644 --- a/packages/saber/lib/markdown/task-list-plugin.js +++ b/packages/saber/src/markdown/task-list-plugin.js @@ -1,3 +1,5 @@ +/* eslint-disable */ + module.exports = function(md, options) { options = Object.assign( { diff --git a/packages/saber/lib/plugins/config-css.js b/packages/saber/src/plugins/config-css.js similarity index 98% rename from packages/saber/lib/plugins/config-css.js rename to packages/saber/src/plugins/config-css.js index 2d934785b..3d0e8f8be 100644 --- a/packages/saber/lib/plugins/config-css.js +++ b/packages/saber/src/plugins/config-css.js @@ -150,7 +150,7 @@ exports.apply = api => { name: 'styles', // necessary to ensure async chunks are also extracted test: m => { - return /css\/mini-extract/.test(m.type) + return m.type && m.type.includes('css/mini-extract') }, chunks: 'all', enforce: true diff --git a/packages/saber/lib/plugins/config-font.js b/packages/saber/src/plugins/config-font.js similarity index 100% rename from packages/saber/lib/plugins/config-font.js rename to packages/saber/src/plugins/config-font.js diff --git a/packages/saber/lib/plugins/config-image.js b/packages/saber/src/plugins/config-image.js similarity index 100% rename from packages/saber/lib/plugins/config-image.js rename to packages/saber/src/plugins/config-image.js diff --git a/packages/saber/lib/plugins/config-other-loaders.js b/packages/saber/src/plugins/config-other-loaders.js similarity index 100% rename from packages/saber/lib/plugins/config-other-loaders.js rename to packages/saber/src/plugins/config-other-loaders.js diff --git a/packages/saber/lib/plugins/emit-runtime-polyfills.js b/packages/saber/src/plugins/emit-runtime-polyfills.js similarity index 91% rename from packages/saber/lib/plugins/emit-runtime-polyfills.js rename to packages/saber/src/plugins/emit-runtime-polyfills.js index a5289ef85..7a8d76dd8 100644 --- a/packages/saber/lib/plugins/emit-runtime-polyfills.js +++ b/packages/saber/src/plugins/emit-runtime-polyfills.js @@ -18,6 +18,7 @@ exports.apply = api => { polyfills, 'utf8' ) + // eslint-disable-next-line require-atomic-updates previousPolyfills = polyfills } }) diff --git a/packages/saber/lib/plugins/emit-saber-variables.js b/packages/saber/src/plugins/emit-saber-variables.js similarity index 100% rename from packages/saber/lib/plugins/emit-saber-variables.js rename to packages/saber/src/plugins/emit-saber-variables.js diff --git a/packages/saber/lib/plugins/extend-browser-api.js b/packages/saber/src/plugins/extend-browser-api.js similarity index 63% rename from packages/saber/lib/plugins/extend-browser-api.js rename to packages/saber/src/plugins/extend-browser-api.js index 43ad66135..e608fd9d9 100644 --- a/packages/saber/lib/plugins/extend-browser-api.js +++ b/packages/saber/src/plugins/extend-browser-api.js @@ -24,14 +24,20 @@ exports.apply = api => { cwd: api.resolveCwd(), ignoreInitial: true }) + const onAdd = async filename => { + api.browserApi.add(api.resolveCwd(filename)) + await api.browserApi.reload() + } + const onRemove = async filename => { + api.browserApi.delete(api.resolveCwd(filename)) + await api.browserApi.reload() + } watcher - .on('add', async filename => { - api.browserApi.add(api.resolveCwd(filename)) - await api.browserApi.reload() + .on('add', filename => { + onAdd(filename) }) - .on('unlink', async filename => { - api.browserApi.delete(api.resolveCwd(filename)) - await api.browserApi.reload() + .on('unlink', filename => { + onRemove(filename) }) } }) diff --git a/packages/saber/lib/plugins/extend-node-api.js b/packages/saber/src/plugins/extend-node-api.js similarity index 65% rename from packages/saber/lib/plugins/extend-node-api.js rename to packages/saber/src/plugins/extend-node-api.js index cdd087045..38e16e20c 100644 --- a/packages/saber/lib/plugins/extend-node-api.js +++ b/packages/saber/src/plugins/extend-node-api.js @@ -4,6 +4,10 @@ const { log, colors } = require('saber-log') const ID = 'builtin:extend-node-api' +function __noopHandler__(arg) { + return arg +} + exports.name = ID exports.apply = api => { @@ -58,35 +62,38 @@ exports.apply = api => { } }) - if (api.dev && !/node_modules/.test(nodeApiFile)) { + if (api.dev && !nodeApiFile.includes('node_modules')) { + const onChange = async action => { + updateNodeApi() + // Remove all child pages + api.pages.removeWhere(page => page.internal.parent) + await Promise.all( + [...api.pages.values()].map(async page => { + // Recreate the page + api.pages.createPage(page) + // A page has been created + await api.hooks.onCreatePage.promise(page) + }) + ) + // All pages are created + await api.hooks.onCreatePages.promise() + // Emit pages + await api.hooks.emitPages.promise() + // Emit route file + await api.hooks.emitRoutes.promise() + log.warn( + `${action[0].toUpperCase()}${action.substring(1)} ${nodeApiFile}` + ) + // Because you might also update webpack config in saber-node.js + // Which we can't (?) automatically reload + log.warn(`You probably need to restart the server.`) + } require('chokidar') .watch(nodeApiFile, { ignoreInitial: true }) - .on('all', async action => { - await updateNodeApi() - // Remove all child pages - api.pages.removeWhere(page => page.internal.parent) - await Promise.all( - [...api.pages.values()].map(async page => { - // Recreate the page - api.pages.createPage(page) - // A page has been created - await api.hooks.onCreatePage.promise(page) - }) - ) - // All pages are created - await api.hooks.onCreatePages.promise() - // Emit pages - await api.hooks.emitPages.promise() - // Emit route file - await api.hooks.emitRoutes.promise() - log.warn( - `${action[0].toUpperCase()}${action.substring(1)} ${nodeApiFile}` - ) - // Because you might also update webpack config in saber-node.js - // Which we can't (?) automatically reload - log.warn(`You probably need to restart the server.`) + .on('all', action => { + onChange(action) }) } } @@ -94,7 +101,3 @@ exports.apply = api => { handleNodeApiFile(path.join(api.theme, 'saber-node.js'), 'theme-node-api') handleNodeApiFile(api.resolveCwd('saber-node.js'), 'user-node-api') } - -function __noopHandler__(arg) { - return arg -} diff --git a/packages/saber/lib/plugins/index.js b/packages/saber/src/plugins/index.js similarity index 100% rename from packages/saber/lib/plugins/index.js rename to packages/saber/src/plugins/index.js diff --git a/packages/saber/lib/plugins/layouts.js b/packages/saber/src/plugins/layouts.js similarity index 75% rename from packages/saber/lib/plugins/layouts.js rename to packages/saber/src/plugins/layouts.js index c617a7bbe..0853f3b65 100644 --- a/packages/saber/lib/plugins/layouts.js +++ b/packages/saber/src/plugins/layouts.js @@ -58,6 +58,25 @@ exports.apply = api => { const watchLayouts = (dir, layouts) => { const chokidar = require('chokidar') + const onRemoveDir = async dir => { + if (!dir) { + Object.keys(layouts).forEach(name => { + delete layouts[name] + }) + await writeLayouts(themeLayouts, userLayouts) + } + } + + const onAddLayout = async file => { + setLayout(layouts, path.join(dir, file)) + await writeLayouts(themeLayouts, userLayouts) + } + + const onRemoveLayout = async file => { + setLayout(layouts, path.join(dir, file), true) + await writeLayouts(themeLayouts, userLayouts) + } + // Clear the layouts object when the layouts directory is removed chokidar .watch('.', { @@ -68,30 +87,23 @@ exports.apply = api => { }, ignoreInitial: true }) - .on('unlinkDir', async dir => { - if (!dir) { - Object.keys(layouts).forEach(name => { - delete layouts[name] - }) - await writeLayouts(themeLayouts, userLayouts) - } + .on('unlinkDir', dir => { + onRemoveDir(dir) }) // Add/Remove layout components chokidar .watch('*.{vue,js}', { cwd: dir, ignoreInitial: true }) - .on('add', async file => { - setLayout(layouts, path.join(dir, file)) - await writeLayouts(themeLayouts, userLayouts) + .on('add', file => { + onAddLayout(file) }) - .on('unlink', async file => { - setLayout(layouts, path.join(dir, file), true) - await writeLayouts(themeLayouts, userLayouts) + .on('unlink', file => { + onRemoveLayout(file) }) } // No need to watch theme layouts if it's from an npm package - if (!/node_modules/.test(themeLayoutsDir)) { + if (!themeLayoutsDir.includes('node_modules')) { watchLayouts(themeLayoutsDir, themeLayouts) } diff --git a/packages/saber/lib/plugins/source-pages.js b/packages/saber/src/plugins/source-pages.js similarity index 92% rename from packages/saber/lib/plugins/source-pages.js rename to packages/saber/src/plugins/source-pages.js index af1bfeb55..844c2d249 100644 --- a/packages/saber/lib/plugins/source-pages.js +++ b/packages/saber/src/plugins/source-pages.js @@ -29,6 +29,7 @@ exports.apply = api => { .map(async file => { file.relative = file.path file.absolute = path.join(pagesDir, file.relative) + // eslint-disable-next-line require-atomic-updates file.content = await fs.readFile(file.absolute, 'utf8') log.verbose(`Found page`, colors.dim(file.absolute)) return file @@ -81,6 +82,7 @@ exports.apply = api => { log.verbose(`Emitting page ${outPath}`) await fs.outputFile(outPath, newContentHash, 'utf8') + // eslint-disable-next-line require-atomic-updates page.internal.saved = true }) ) @@ -126,9 +128,15 @@ exports.apply = api => { await api.hooks.emitRoutes.promise() } - watcher.on('add', handler('add')) - watcher.on('unlink', handler('remove')) - watcher.on('change', handler('change')) + watcher.on('add', () => { + handler('add') + }) + watcher.on('unlink', () => { + handler('remove') + }) + watcher.on('change', () => { + handler('change') + }) } }) } diff --git a/packages/saber/lib/plugins/transformer-components.js b/packages/saber/src/plugins/transformer-components.js similarity index 98% rename from packages/saber/lib/plugins/transformer-components.js rename to packages/saber/src/plugins/transformer-components.js index a6b3278b8..30bb02068 100644 --- a/packages/saber/lib/plugins/transformer-components.js +++ b/packages/saber/src/plugins/transformer-components.js @@ -24,7 +24,7 @@ const getPageComponent = page => { exports.apply = api => { api.transformers.add('vue', { extensions: ['vue'], - parse(page) { + transform(page) { const sfc = require('vue-template-compiler').parseComponent(page.content) if (sfc.script) { const { data } = require('../utils/parseAttributes')( diff --git a/packages/saber/lib/plugins/transformer-default.js b/packages/saber/src/plugins/transformer-default.js similarity index 100% rename from packages/saber/lib/plugins/transformer-default.js rename to packages/saber/src/plugins/transformer-default.js diff --git a/packages/saber/lib/plugins/transformer-markdown.js b/packages/saber/src/plugins/transformer-markdown.js similarity index 94% rename from packages/saber/lib/plugins/transformer-markdown.js rename to packages/saber/src/plugins/transformer-markdown.js index 96cfb192d..4499898a2 100644 --- a/packages/saber/lib/plugins/transformer-markdown.js +++ b/packages/saber/src/plugins/transformer-markdown.js @@ -1,35 +1,7 @@ const ConfigChain = require('../config-chain') const resolvePackage = require('../utils/resolvePackage') -exports.name = 'builtin:transformer-markdown' - -exports.apply = api => { - api.transformers.add('markdown', { - extensions: ['md'], - parse(page) { - const { frontmatter, body } = require('../utils/parseFrontmatter')( - page.content, - page.internal.absolute - ) - Object.assign(page, frontmatter) - page.content = body - }, - transform(page) { - transformMarkdown(api, page) - }, - getPageComponent(page) { - return ` - - ` - } - }) -} - -function transformMarkdown(api, page) { +function renderMarkdown(api, page) { const { configDir } = api const { markdown = {} } = api.config const env = { @@ -113,5 +85,31 @@ function transformMarkdown(api, page) { md.use(plugin.plugin, ...plugin.args) } - page.content = md.render(page.content, env) + return md.render(page.content, env) +} + +exports.name = 'builtin:transformer-markdown' + +exports.apply = api => { + api.transformers.add('markdown', { + extensions: ['md'], + transform(page) { + const { frontmatter, body } = require('../utils/parseFrontmatter')( + page.content, + page.internal.absolute + ) + Object.assign(page, frontmatter) + page.content = body + page.content = renderMarkdown(api, page) + }, + getPageComponent(page) { + return ` + + ` + } + }) } diff --git a/packages/saber/src/plugins/watch-config.ts b/packages/saber/src/plugins/watch-config.ts new file mode 100644 index 000000000..7efa60ea2 --- /dev/null +++ b/packages/saber/src/plugins/watch-config.ts @@ -0,0 +1,74 @@ +import { fs } from 'saber-utils' +import { log } from 'saber-log' +import deepEqual from 'fast-deep-equal' +import { CONFIG_FILES } from '../utils/configLoader' +import { SaberPlugin, SaberConfig } from '../' + +const ID = 'builtin:emit-config' + +const WatchConfigPlugin: SaberPlugin = { + name: ID, + + apply(api) { + api.hooks.beforeRun.tapPromise(ID, async () => { + const outPath = api.resolveCache('config.json') + + const emit = (config: SaberConfig) => + fs.outputFile( + outPath, + JSON.stringify({ + siteConfig: config.siteConfig || {}, + themeConfig: config.themeConfig || {}, + locales: config.locales || {} + }), + 'utf8' + ) + + const checkIfConfigChanged = ( + newConfig: SaberConfig, + prevConfig: SaberConfig + ) => { + const dropUnnecessary = (config: SaberConfig) => + Object.assign({}, config, { + siteConfig: undefined, + themeConfig: undefined, + locales: undefined + }) + if ( + !deepEqual(dropUnnecessary(newConfig), dropUnnecessary(prevConfig)) + ) { + log.warn( + `Found a change in your Saber config file, restart server to see the effect.` + ) + } + } + + // Emit config.json anyways + await emit(api.config) + + if (api.dev) { + const cwd = api.configDir || api.resolveCwd() + const watcher = require('chokidar').watch(CONFIG_FILES, { + ignoreInitial: true, + cwd + }) + const reloadConfig = async () => { + const { + configPath: newConfigPath, + config: newConfig + } = api.loadConfig() + const prevConfig = api.config + checkIfConfigChanged(newConfig, prevConfig) + api.setConfig(newConfig, newConfigPath) + await api.hooks.onUpdateConfigFile.promise() + await emit(newConfig) + } + watcher.on('all', () => { + reloadConfig() + }) + } + }) + } +} + +export default WatchConfigPlugin diff --git a/packages/saber/lib/utils/__test__/getPermalink.test.js b/packages/saber/src/utils/__test__/getPermalink.test.js similarity index 100% rename from packages/saber/lib/utils/__test__/getPermalink.test.js rename to packages/saber/src/utils/__test__/getPermalink.test.js diff --git a/packages/saber/lib/utils/__test__/resolvePackage.test.js b/packages/saber/src/utils/__test__/resolvePackage.test.js similarity index 100% rename from packages/saber/lib/utils/__test__/resolvePackage.test.js rename to packages/saber/src/utils/__test__/resolvePackage.test.js diff --git a/packages/saber/lib/utils/assetsAttribute.js b/packages/saber/src/utils/assetsAttribute.ts similarity index 64% rename from packages/saber/lib/utils/assetsAttribute.js rename to packages/saber/src/utils/assetsAttribute.ts index 30a071b0b..0652a6950 100644 --- a/packages/saber/lib/utils/assetsAttribute.js +++ b/packages/saber/src/utils/assetsAttribute.ts @@ -1,15 +1,12 @@ -// @ts-check - -const { join } = require('path') -const { slash, isAbsoluteUrl } = require('saber-utils') +import { join } from 'path' +import { slash, isAbsoluteUrl } from 'saber-utils' /** * It's considered external resource * When it's an absolute url or starting with `/` * `/path` is used to reference files in static folder - * @param {string} str */ -const isExternal = str => isAbsoluteUrl(str) || /^\//.test(str) +const isExternal = (str: string) => isAbsoluteUrl(str) || str.startsWith('/') const MARK = '@@!!SABER_ASSET_MARK_e5968b9a!!@@' @@ -17,12 +14,9 @@ const MARK_GLOBAL_RE = new RegExp(`"${MARK}([^"]+)"`, 'g') /** * Prefix MARK to asset path - * @param {{[key: string]: string}} assets - * @param {string} cwd */ -const prefixAssets = (assets, cwd) => { - /** @type {{[key: string]: string}} */ - const result = {} +const prefixAssets = (assets: { [key: string]: string }, cwd: string) => { + const result: { [key: string]: string } = {} for (const key of Object.keys(assets)) { const value = assets[key] if (!isExternal(value) && !value.startsWith(MARK)) { @@ -42,14 +36,10 @@ const prefixAssets = (assets, cwd) => { /** * Replace strings starting with the MARK to `require` call - * @param {string} str */ -const requireAssets = str => +const requireAssets = (str: string) => str.replace(MARK_GLOBAL_RE, (_, p1) => { return `require("${p1}")` }) -module.exports = { - prefixAssets, - requireAssets -} +export { prefixAssets, requireAssets } diff --git a/packages/saber/lib/utils/configLoader.js b/packages/saber/src/utils/configLoader.js similarity index 100% rename from packages/saber/lib/utils/configLoader.js rename to packages/saber/src/utils/configLoader.js diff --git a/packages/saber/lib/utils/getFileNames.js b/packages/saber/src/utils/getFileNames.js similarity index 100% rename from packages/saber/lib/utils/getFileNames.js rename to packages/saber/src/utils/getFileNames.js diff --git a/packages/saber/lib/utils/getPageType.js b/packages/saber/src/utils/getPageType.js similarity index 100% rename from packages/saber/lib/utils/getPageType.js rename to packages/saber/src/utils/getPageType.js diff --git a/packages/saber/lib/utils/getPermalink.js b/packages/saber/src/utils/getPermalink.js similarity index 65% rename from packages/saber/lib/utils/getPermalink.js rename to packages/saber/src/utils/getPermalink.js index 43ff1b5bf..4725df4a3 100644 --- a/packages/saber/lib/utils/getPermalink.js +++ b/packages/saber/src/utils/getPermalink.js @@ -1,5 +1,13 @@ // @ts-check +/** + * Left-pad '0' to number that is smaller than 10 + * @param {number} input + */ +function padZero(input) { + return input < 10 ? `0${input}` : input +} + // Default: // about.md => /about.html // about/index.md => /about @@ -11,8 +19,8 @@ * @param {object} page - Page object * @param {string} page.slug - The page slug * @param {string} page.type - The page type - * @param {Date} page.createdAt - The creation time - * @param {import('saber').Permalinks} permalinks - The `permalinks` config option + * @param {Date=} page.createdAt - The creation time + * @param {any} permalinks - The `permalinks` config option */ module.exports = (localeNames, page, permalinks) => { if (page.slug === 'index') return '/' @@ -26,7 +34,7 @@ module.exports = (localeNames, page, permalinks) => { ) const permalinkTemplate = permalinks[page.type] || permalinks.page - const date = new Date(page.createdAt) + const date = page.createdAt && new Date(page.createdAt) let prefix = '' let { slug } = page @@ -38,21 +46,19 @@ module.exports = (localeNames, page, permalinks) => { } } - return `${prefix}${permalinkTemplate}` + let result = `${prefix}${permalinkTemplate}` + + if (date) { + result = result + .replace(/:year/, () => `${date.getFullYear()}`) + .replace(/:month/, () => `${padZero(date.getMonth() + 1)}`) + .replace(/:i_month/, () => `${date.getMonth() + 1}`) + .replace(/:day/, () => `${padZero(date.getDate())}`) + .replace(/:i_day/, () => `${date.getDate()}`) + } + + return result .replace(/:slug/, slug) - .replace(/:year/, () => `${date.getFullYear()}`) - .replace(/:month/, () => `${padZero(date.getMonth() + 1)}`) - .replace(/:i_month/, () => `${date.getMonth() + 1}`) - .replace(/:day/, () => `${padZero(date.getDate())}`) - .replace(/:i_day/, () => `${date.getDate()}`) .replace(/^\/index(\.html)?$/, '/') .replace(/\/index(\.html)?$/, '') } - -/** - * Left-pad '0' to number that is smaller than 10 - * @param {number} input - */ -function padZero(input) { - return input < 10 ? `0${input}` : input -} diff --git a/packages/saber/lib/utils/inspectWebpack.js b/packages/saber/src/utils/inspectWebpack.js similarity index 56% rename from packages/saber/lib/utils/inspectWebpack.js rename to packages/saber/src/utils/inspectWebpack.js index efb0c7210..c66d2882d 100644 --- a/packages/saber/lib/utils/inspectWebpack.js +++ b/packages/saber/src/utils/inspectWebpack.js @@ -1,15 +1,20 @@ +// @ts-check const path = require('path') const os = require('os') const { fs } = require('saber-utils') -const Chain = require('webpack-chain') const ID = Math.round(Math.random() * 1000) +/** + * Inspect webpack config in your default editor + * @param {import('webpack-chain')} config Webpack-chain instance + * @param {string} type + */ module.exports = async (config, type) => { const tempFile = path.join( os.tmpdir(), `saber-webpack-config-${type}-${ID}.js` ) - await fs.writeFile(tempFile, `var config = ${Chain.toString(config)}`, 'utf8') + await fs.writeFile(tempFile, `var config = ${config.toString()}`, 'utf8') await require('open')(tempFile) } diff --git a/packages/saber/lib/utils/parseAttributes.js b/packages/saber/src/utils/parseAttributes.js similarity index 87% rename from packages/saber/lib/utils/parseAttributes.js rename to packages/saber/src/utils/parseAttributes.js index 4ec4f9bdb..6d9273166 100644 --- a/packages/saber/lib/utils/parseAttributes.js +++ b/packages/saber/src/utils/parseAttributes.js @@ -1,3 +1,4 @@ +// @ts-check const path = require('path') const resolveFrom = require('resolve-from') @@ -6,6 +7,11 @@ const parser = require(resolveFrom(babelDir, '@babel/parser')) const traverse = require(resolveFrom(babelDir, '@babel/traverse')) const generator = require(resolveFrom(babelDir, '@babel/generator')) +/** + * Extract the `export const data` part from a page + * @param {string} content The content of a page + * @param {string} filepath The absolute path to the path + */ module.exports = (content, filepath) => { const ast = parser.parse(content, { sourceFilename: filepath, @@ -16,6 +22,9 @@ module.exports = (content, filepath) => { let data = {} traverse.default(ast, { + /** + * @param {any} path + */ ObjectExpression(path) { const name = path.parent && diff --git a/packages/saber/lib/utils/parseFrontmatter.js b/packages/saber/src/utils/parseFrontmatter.js similarity index 66% rename from packages/saber/lib/utils/parseFrontmatter.js rename to packages/saber/src/utils/parseFrontmatter.js index 6fb386b8d..4310f9461 100644 --- a/packages/saber/lib/utils/parseFrontmatter.js +++ b/packages/saber/src/utils/parseFrontmatter.js @@ -1,13 +1,28 @@ +// @ts-check const { log } = require('saber-log') const RE_STARTING = /^(?:\r?\n)*---([a-z]+)?(?:\r?\n)+/ +/** + * @typedef {(str: string) => Object} Parser + * @typedef {{[k: string]: Parser}} IParsers + */ + +/** + * @type {IParsers} + */ const parsers = { yaml: str => require('./yaml.min').safeLoad(str), yml: str => require('./yaml.min').safeLoad(str), toml: str => require('./toml.min').parse(str) } +/** + * Extract front matter from a page + * @param {string} content + * @param {string} filepath + * @returns {{frontmatter: {[k:string]: any}, body: string}} + */ module.exports = (content, filepath) => { const getEmpty = () => ({ frontmatter: {}, @@ -23,7 +38,12 @@ module.exports = (content, filepath) => { return getEmpty() } - const parse = parsers[starting[1] || 'yaml'] + const parseType = starting[1] || 'yaml' + const parse = parsers[parseType] + if (!parse) { + throw new Error(`Unsupported front matter type: ${parseType}`) + } + const rest = content.replace(RE_STARTING, '') const index = rest.indexOf('\n---') const head = rest.slice(0, index) diff --git a/packages/saber/lib/utils/prettyBytes.js b/packages/saber/src/utils/prettyBytes.js similarity index 100% rename from packages/saber/lib/utils/prettyBytes.js rename to packages/saber/src/utils/prettyBytes.js diff --git a/packages/saber/lib/utils/resolvePackage.js b/packages/saber/src/utils/resolvePackage.js similarity index 100% rename from packages/saber/lib/utils/resolvePackage.js rename to packages/saber/src/utils/resolvePackage.js diff --git a/packages/saber/lib/utils/serveDir.js b/packages/saber/src/utils/serveDir.js similarity index 93% rename from packages/saber/lib/utils/serveDir.js rename to packages/saber/src/utils/serveDir.js index f6e9bcde7..60761cf42 100644 --- a/packages/saber/lib/utils/serveDir.js +++ b/packages/saber/src/utils/serveDir.js @@ -7,7 +7,7 @@ const serveStatic = require('serve-static') module.exports = function({ dir, host, port } = {}) { const server = polka() server.use(serveStatic(dir)) - server.use(async (req, res, next) => { + server.use((req, res, next) => { if (req.method !== 'GET') return next() createReadStream(path.join(dir, '404.html')).pipe(res) }) diff --git a/packages/saber/lib/utils/toml.min.js b/packages/saber/src/utils/toml.min.js similarity index 100% rename from packages/saber/lib/utils/toml.min.js rename to packages/saber/src/utils/toml.min.js diff --git a/packages/saber/lib/utils/validateConfig.js b/packages/saber/src/utils/validateConfig.ts similarity index 61% rename from packages/saber/lib/utils/validateConfig.js rename to packages/saber/src/utils/validateConfig.ts index 03383be88..434df2075 100644 --- a/packages/saber/lib/utils/validateConfig.js +++ b/packages/saber/src/utils/validateConfig.ts @@ -1,13 +1,40 @@ -// @ts-check -const { struct } = require('superstruct') +import { struct } from 'superstruct' +import { SaberConfig, SaberConfigPlugin, MarkdownPlugin } from '../' + +export interface ValidatedSaberConfig { + siteConfig: SaberConfig['siteConfig'] & { + title: string + description: string + } + + plugins: Array + + markdown: SaberConfig['markdown'] & { + plugins: MarkdownPlugin[] + } + + themeConfig: NonUndefined + + permalinks: NonUndefined + + server: Required> + + build: Required> + + locales: NonNullable + + theme: SaberConfig['theme'] + + template: Required> +} /** * Validate saber config - * @param {any} config - * @param {object} options - * @param {boolean} options.dev */ -module.exports = (config, { dev }) => { +export function validateConfig( + config: SaberConfig, + { dev }: { dev: boolean } +): ValidatedSaberConfig { const siteConfig = struct.interface( { title: 'string?', @@ -81,18 +108,32 @@ module.exports = (config, { dev }) => { } ) - const locales = struct('object?') + const locales = struct('object', {}) + + const theme = struct('string?') + + const template = struct( + { + openLinkInNewTab: 'boolean', + plugins: ['any'] + }, + { + openLinkInNewTab: true, + plugins: [] + } + ) const schema = struct({ build, siteConfig, themeConfig, locales, - theme: 'string?', + theme, plugins, markdown, permalinks, - server + server, + template }) const [err, result] = schema.validate(config) diff --git a/packages/saber/lib/utils/yaml.min.js b/packages/saber/src/utils/yaml.min.js similarity index 100% rename from packages/saber/lib/utils/yaml.min.js rename to packages/saber/src/utils/yaml.min.js diff --git a/packages/saber/vue-renderer/lib/get-initial-document-data.js b/packages/saber/src/vue-renderer/get-initial-document-data.js similarity index 100% rename from packages/saber/vue-renderer/lib/get-initial-document-data.js rename to packages/saber/src/vue-renderer/get-initial-document-data.js diff --git a/packages/saber/vue-renderer/lib/get-initial-document.js b/packages/saber/src/vue-renderer/get-initial-document.js similarity index 100% rename from packages/saber/vue-renderer/lib/get-initial-document.js rename to packages/saber/src/vue-renderer/get-initial-document.js diff --git a/packages/saber/vue-renderer/lib/index.js b/packages/saber/src/vue-renderer/index.js similarity index 95% rename from packages/saber/vue-renderer/lib/index.js rename to packages/saber/src/vue-renderer/index.js index 826a0e28c..f8e84a470 100644 --- a/packages/saber/vue-renderer/lib/index.js +++ b/packages/saber/src/vue-renderer/index.js @@ -5,10 +5,31 @@ const { SyncWaterfallHook } = require('tapable') const { readJSON } = require('./utils') const renderHTML = require('./render-html') +function runCompiler(compiler) { + return new Promise((resolve, reject) => { + compiler.run((err, stats) => { + if (err) return reject(err) + resolve(stats) + }) + }) +} + +function resolveVueApp(...args) { + return path.join(__dirname, '../../vue-app', ...args) +} + +function removeTrailingSlash(input) { + if (input === '/') { + return input + } + + return input.replace(/\/$/, '') +} + const ID = 'vue-renderer' -class VueRenderer { - constructor(api) { +export class VueRenderer { + init(api) { this.api = api // In dev mode pages will be built when visited this.visitedRoutes = new Set() @@ -19,7 +40,7 @@ class VueRenderer { } this.api.hooks.chainWebpack.tap(ID, (config, { type }) => { - config.entry(type).add(path.join(__dirname, `../app/entry-${type}.js`)) + config.entry(type).add(resolveVueApp(`entry-${type}.js`)) config.output.path(api.resolveCache(`dist-${type}`)) @@ -41,8 +62,8 @@ class VueRenderer { config.plugin('vue').use(require('vue-loader/lib/plugin')) - // Transform js files in ../app folder - config.module.rule('js').include.add(path.join(__dirname, '../app')) + // Transform js files in vue-app folder + config.module.rule('js').include.add(resolveVueApp()) const vueLoaderOptions = this.hooks.getVueLoaderOptions.call( Object.assign( @@ -180,6 +201,10 @@ class VueRenderer { api.hooks.emitRoutes.tapPromise('vue-renderer', () => this.writeRoutes()) } + get defaultTheme() { + return resolveVueApp('theme') + } + async writeRoutes() { if (this._writingRoutes) { return @@ -237,7 +262,7 @@ class VueRenderer { name: 404, component: function () { return import(/* webpackChunkName: "404-page" */ ${JSON.stringify( - slash(path.join(__dirname, '../app/404.vue')) + slash(resolveVueApp('404.vue')) )}) } } @@ -457,7 +482,18 @@ class VueRenderer { } }) + server.get('/_saber/pages', (req, res) => { + res.setHeader('content-type', 'text/html') + res.end(` + + `) + }) + server.get('/_saber/visit-page', async (req, res) => { + // eslint-disable-next-line let [, pathname, hash] = /^([^#]+)(#.+)?$/.exec(req.query.route) || [] pathname = removeTrailingSlash(pathname) const fullPath = pathname + (hash || '') @@ -547,24 +583,3 @@ class VueRenderer { return server.handler } } - -VueRenderer.defaultTheme = path.join(__dirname, '../app/theme') - -module.exports = VueRenderer - -function runCompiler(compiler) { - return new Promise((resolve, reject) => { - compiler.run((err, stats) => { - if (err) return reject(err) - resolve(stats) - }) - }) -} - -function removeTrailingSlash(input) { - if (input === '/') { - return input - } - - return input.replace(/\/$/, '') -} diff --git a/packages/saber/vue-renderer/lib/page-prop-loader.js b/packages/saber/src/vue-renderer/page-prop-loader.js similarity index 85% rename from packages/saber/vue-renderer/lib/page-prop-loader.js rename to packages/saber/src/vue-renderer/page-prop-loader.js index 0ae595e1e..3b56f8ed4 100644 --- a/packages/saber/vue-renderer/lib/page-prop-loader.js +++ b/packages/saber/src/vue-renderer/page-prop-loader.js @@ -1,5 +1,5 @@ const devalue = require('devalue') -const { requireAssets } = require('../../lib/utils/assetsAttribute') +const { requireAssets } = require('../utils/assetsAttribute') module.exports = function(source, map) { const pageId = source.trim() @@ -30,7 +30,10 @@ module.exports = function(source, map) { } }) - Component.options.name = 'page-wrapper-' + page.slug.replace(/[^0-9a-z\\-]/i, '-') + // page.slug is optional + if (page.slug) { + Component.options.name = 'page-wrapper-' + page.slug.replace(/[^0-9a-z\\-]/i, '-') + } if (module.hot) { var Vue = require('vue').default Component.options._Ctor = Vue.extend(Component) diff --git a/packages/saber/vue-renderer/lib/render-html.js b/packages/saber/src/vue-renderer/render-html.js similarity index 100% rename from packages/saber/vue-renderer/lib/render-html.js rename to packages/saber/src/vue-renderer/render-html.js diff --git a/packages/saber/vue-renderer/lib/saber-page-loader.js b/packages/saber/src/vue-renderer/saber-page-loader.js similarity index 100% rename from packages/saber/vue-renderer/lib/saber-page-loader.js rename to packages/saber/src/vue-renderer/saber-page-loader.js diff --git a/packages/saber/vue-renderer/lib/template-plugins/__test__/link.test.js b/packages/saber/src/vue-renderer/template-plugins/__test__/link.test.js similarity index 100% rename from packages/saber/vue-renderer/lib/template-plugins/__test__/link.test.js rename to packages/saber/src/vue-renderer/template-plugins/__test__/link.test.js diff --git a/packages/saber/vue-renderer/lib/template-plugins/index.js b/packages/saber/src/vue-renderer/template-plugins/index.js similarity index 93% rename from packages/saber/vue-renderer/lib/template-plugins/index.js rename to packages/saber/src/vue-renderer/template-plugins/index.js index 80f0aa74b..a0d09e9bc 100644 --- a/packages/saber/vue-renderer/lib/template-plugins/index.js +++ b/packages/saber/src/vue-renderer/template-plugins/index.js @@ -1,4 +1,4 @@ -const ConfigChain = require('../../../lib/config-chain') +const ConfigChain = require('../../config-chain') module.exports = api => { const chain = new ConfigChain() diff --git a/packages/saber/vue-renderer/lib/template-plugins/link.js b/packages/saber/src/vue-renderer/template-plugins/link.js similarity index 100% rename from packages/saber/vue-renderer/lib/template-plugins/link.js rename to packages/saber/src/vue-renderer/template-plugins/link.js diff --git a/packages/saber/vue-renderer/lib/transform-template-loader.js b/packages/saber/src/vue-renderer/transform-template-loader.js similarity index 100% rename from packages/saber/vue-renderer/lib/transform-template-loader.js rename to packages/saber/src/vue-renderer/transform-template-loader.js diff --git a/packages/saber/vue-renderer/lib/utils.js b/packages/saber/src/vue-renderer/utils.js similarity index 100% rename from packages/saber/vue-renderer/lib/utils.js rename to packages/saber/src/vue-renderer/utils.js diff --git a/packages/saber/lib/webpack/PrintStatusPlugin.js b/packages/saber/src/webpack/PrintStatusPlugin.js similarity index 92% rename from packages/saber/lib/webpack/PrintStatusPlugin.js rename to packages/saber/src/webpack/PrintStatusPlugin.js index fd46543e6..5d9dc5a28 100644 --- a/packages/saber/lib/webpack/PrintStatusPlugin.js +++ b/packages/saber/src/webpack/PrintStatusPlugin.js @@ -98,14 +98,14 @@ module.exports = class PrintStatusPlugin { this.api.config.server.host === '0.0.0.0' ? 'localhost' : this.api.config.server.host - const { port, _originalPort } = this.api.config.server - if (port !== _originalPort) { - log.warn(`Port ${_originalPort} is in use, switched to a new port`) + const { port } = this.api.config.server + if (port !== this.api.actualServerPort) { + log.warn(`Port ${port} is in use, switched to a new port`) } log.info( `Available at ${colors.underline( - `http://${host}:${this.api.config.server.port}` + `http://${host}:${this.api.actualServerPort}` )}` ) log.info( diff --git a/packages/saber/lib/webpack/babel-loader.js b/packages/saber/src/webpack/babel-loader.js similarity index 100% rename from packages/saber/lib/webpack/babel-loader.js rename to packages/saber/src/webpack/babel-loader.js diff --git a/packages/saber/lib/webpack/toml-loader.js b/packages/saber/src/webpack/toml-loader.js similarity index 100% rename from packages/saber/lib/webpack/toml-loader.js rename to packages/saber/src/webpack/toml-loader.js diff --git a/packages/saber/lib/webpack/webpack.config.js b/packages/saber/src/webpack/webpack.config.js similarity index 97% rename from packages/saber/lib/webpack/webpack.config.js rename to packages/saber/src/webpack/webpack.config.js index 3692227ae..47653fe64 100644 --- a/packages/saber/lib/webpack/webpack.config.js +++ b/packages/saber/src/webpack/webpack.config.js @@ -90,7 +90,7 @@ module.exports = (api, { type }) => { __DEV__: api.dev, __PUBLIC_URL__: JSON.stringify(api.config.build.publicUrl), __LAZY__: api.config.build.lazy && api.dev, - __SABER_VERSION__: JSON.stringify(require('../../package').version) + __SABER_VERSION__: JSON.stringify(require('../../package.json').version) } ]) diff --git a/packages/saber/lib/webpack/yaml-loader.js b/packages/saber/src/webpack/yaml-loader.js similarity index 100% rename from packages/saber/lib/webpack/yaml-loader.js rename to packages/saber/src/webpack/yaml-loader.js diff --git a/packages/saber/tsconfig.json b/packages/saber/tsconfig.json new file mode 100644 index 000000000..bcc114eb1 --- /dev/null +++ b/packages/saber/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src"], + "compilerOptions": { + "allowJs": true, + "outDir": "dist", + "lib": ["esnext", "dom"], + "declaration": true, + "declarationDir": "types" + } +} diff --git a/packages/saber/types/index.d.ts b/packages/saber/types/index.d.ts deleted file mode 100644 index 4af24b50b..000000000 --- a/packages/saber/types/index.d.ts +++ /dev/null @@ -1,91 +0,0 @@ -declare module 'saber' { - interface Config { - siteConfig?: { - [k: string]: any - } - - themeConfig?: { - [k: string]: any - } - - permalinks?: Permalinks | ((page: Page) => Permalinks) - - build?: { - /** - * The base URL your application will be deployed at. - * If your website is located at a sub directory, e.g. `https://example.com/blog`, you should set this option to `/blog/` (trailing slash is optional). - */ - publicUrl?: string - extractCSS?: boolean - loaderOptions?: any - cssSourceMap?: boolean - lazy?: boolean - } - - plugins?: Plugin[] - - markdown?: { - /** - * The path to a module or npm package name that slugifies the markdown headers. - * The module should have following signature: - * ```js - * type Slugify = (header: string) => string - * ``` - * You can use the package `limax` which provides CJK support. - */ - slugify?: string - /** - * The path to a file or npm package name that highlights code blocks in markdown. - * `saber-highlighter-` prefix is optional. - * Note that a highlighter will only tokenize the code, you need to add corresponding CSS yourself. - */ - highlighter?: string - /** - * Options for markdown-it - */ - options?: any - plugins?: MarkdownItPlugin[] - } - } - - interface Permalinks { - [pageType: string]: string - } - - interface Page { - type: string - layout?: string - createdAt: Date - updatedAt: Date - permalink: string - slug: string - internal: { - id: string - isFile?: boolean - relative?: string - absolute?: string - saved?: boolean - } - content?: string - contentType?: string - [k: string]: any - } - - type Plugin = - | string - | { - /** The path to your plugin or an npm package name */ - resolve: string - /** Plugin options */ - options?: object - } - - interface MarkdownItPlugin { - // A package name or relative path - // e.g. markdown-it-footnote - resolve: string - options?: any - } - - export { Config, Permalinks } -} diff --git a/packages/saber/vue-renderer/app/404.vue b/packages/saber/vue-app/404.vue similarity index 100% rename from packages/saber/vue-renderer/app/404.vue rename to packages/saber/vue-app/404.vue diff --git a/packages/saber/vue-app/components/ClientOnly.js b/packages/saber/vue-app/components/ClientOnly.js new file mode 100644 index 000000000..882450a6f --- /dev/null +++ b/packages/saber/vue-app/components/ClientOnly.js @@ -0,0 +1,13 @@ +export default { + name: 'ClientOnly', + functional: true, + render(h, { parent, children }) { + if (parent._isMounted) { + return children + } + + parent.$once('hook:mounted', () => { + parent.$forceUpdate() + }) + } +} diff --git a/packages/saber/vue-renderer/app/components/LayoutManager.vue b/packages/saber/vue-app/components/LayoutManager.vue similarity index 100% rename from packages/saber/vue-renderer/app/components/LayoutManager.vue rename to packages/saber/vue-app/components/LayoutManager.vue diff --git a/packages/saber/vue-renderer/app/components/SaberLink.js b/packages/saber/vue-app/components/SaberLink.js similarity index 70% rename from packages/saber/vue-renderer/app/components/SaberLink.js rename to packages/saber/vue-app/components/SaberLink.js index 1b6c8c55d..fd9e736c7 100644 --- a/packages/saber/vue-renderer/app/components/SaberLink.js +++ b/packages/saber/vue-app/components/SaberLink.js @@ -26,23 +26,22 @@ export default { setAttribute(attrs, 'target', '_blank') } } + attrs.href = attrs.to delete attrs.to - } else { - if (typeof attrs.to === 'string') { - const link = parent.$saber.getPageLink(attrs.to) - if (link) { - tag = 'router-link' - attrs.to = link - } else { - attrs.href = attrs.to - delete attrs.to - } - } else { + } else if (typeof attrs.to === 'string') { + const link = parent.$saber.getPageLink(attrs.to) + if (link) { tag = 'router-link' - const { route } = parent.$router.resolve(attrs.to) - attrs.to = parent.$saber.getPageLink(route.fullPath) + attrs.to = link + } else { + attrs.href = attrs.to + delete attrs.to } + } else { + tag = 'router-link' + const { route } = parent.$router.resolve(attrs.to) + attrs.to = parent.$saber.getPageLink(route.fullPath) } delete attrs.openLinkInNewTab diff --git a/packages/saber/vue-renderer/app/create-app.js b/packages/saber/vue-app/create-app.js similarity index 99% rename from packages/saber/vue-renderer/app/create-app.js rename to packages/saber/vue-app/create-app.js index 5f5dae2fa..88a79a5fc 100644 --- a/packages/saber/vue-renderer/app/create-app.js +++ b/packages/saber/vue-app/create-app.js @@ -104,6 +104,7 @@ export default context => { }) beforeEnter && beforeEnter(el) } + const children = [ h( 'transition', @@ -143,6 +144,7 @@ export default context => { if (route.path === matched[1]) { return link } + if ( route.meta && route.meta.__relative && diff --git a/packages/saber/vue-renderer/app/dev-client.js b/packages/saber/vue-app/dev-client.js similarity index 99% rename from packages/saber/vue-renderer/app/dev-client.js rename to packages/saber/vue-app/dev-client.js index 7a5ab2295..60d0086e0 100644 --- a/packages/saber/vue-renderer/app/dev-client.js +++ b/packages/saber/vue-app/dev-client.js @@ -10,6 +10,7 @@ export const init = ({ router }) => { if (obj.hasError) { console.error(`You need to refresh the page when the error is fixed!`) } + if (obj.alreadyBuilt) { router.push(obj.route) } else { @@ -19,6 +20,7 @@ export const init = ({ router }) => { router.push(obj.route) } } + module.hot.addStatusHandler(handler) } } diff --git a/packages/saber/vue-renderer/app/entry-client.js b/packages/saber/vue-app/entry-client.js similarity index 100% rename from packages/saber/vue-renderer/app/entry-client.js rename to packages/saber/vue-app/entry-client.js diff --git a/packages/saber/vue-renderer/app/entry-server.js b/packages/saber/vue-app/entry-server.js similarity index 100% rename from packages/saber/vue-renderer/app/entry-server.js rename to packages/saber/vue-app/entry-server.js diff --git a/packages/saber/vue-renderer/app/helpers/inject-config.js b/packages/saber/vue-app/helpers/inject-config.js similarity index 89% rename from packages/saber/vue-renderer/app/helpers/inject-config.js rename to packages/saber/vue-app/helpers/inject-config.js index b5b2358f2..e900cd801 100644 --- a/packages/saber/vue-renderer/app/helpers/inject-config.js +++ b/packages/saber/vue-app/helpers/inject-config.js @@ -15,11 +15,15 @@ export default ({ Vue }) => { let localePath = '/' for (const path of allLocalePaths) { if (path !== '/') { - if (this.$route.path === path || this.$route.path.indexOf(`${path}/`) === 0){ + if ( + this.$route.path === path || + this.$route.path.indexOf(`${path}/`) === 0 + ) { localePath = path } } } + return localePath }, $locales() { diff --git a/packages/saber/vue-renderer/app/helpers/path.js b/packages/saber/vue-app/helpers/path.js similarity index 75% rename from packages/saber/vue-renderer/app/helpers/path.js rename to packages/saber/vue-app/helpers/path.js index ede62f68f..7af1baab1 100644 --- a/packages/saber/vue-renderer/app/helpers/path.js +++ b/packages/saber/vue-app/helpers/path.js @@ -3,9 +3,9 @@ function normalizeArray(parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 - var up = 0 - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i] + let up = 0 + for (let i = parts.length - 1; i >= 0; i--) { + const last = parts[i] if (last === '.') { parts.splice(i, 1) } else if (last === '..') { @@ -29,32 +29,33 @@ function normalizeArray(parts, allowAboveRoot) { // Split a filename into [root, dir, basename, ext], unix version // 'root' is just a slash, or nothing. -var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ -var splitPath = function(filename) { +const splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ +const splitPath = function(filename) { return splitPathRe.exec(filename).slice(1) } // path.normalize(path) // posix version function normalize(path) { - var isPathAbsolute = isAbsolute(path), - trailingSlash = path.substr(-1) === '/' + const isPathAbsolute = isAbsolute(path) + const trailingSlash = path.substr(-1) === '/' // Normalize the path - path = normalizeArray( - path.split('/').filter(Boolean), - !isPathAbsolute - ).join('/') + path = normalizeArray(path.split('/').filter(Boolean), !isPathAbsolute).join( + '/' + ) if (!path && !isPathAbsolute) { path = '.' } + if (path && trailingSlash) { path += '/' } return (isPathAbsolute ? '/' : '') + path } + // posix version function isAbsolute(path) { return path.charAt(0) === '/' @@ -66,9 +67,9 @@ function join(...paths) { } function dirname(path) { - var result = splitPath(path), - root = result[0], - dir = result[1] + const result = splitPath(path) + const root = result[0] + let dir = result[1] if (!root && !dir) { // No dirname whatsoever diff --git a/packages/saber/vue-renderer/app/helpers/scroll-handler.js b/packages/saber/vue-app/helpers/scroll-handler.js similarity index 98% rename from packages/saber/vue-renderer/app/helpers/scroll-handler.js rename to packages/saber/vue-app/helpers/scroll-handler.js index fd2bddb4f..f564cd544 100644 --- a/packages/saber/vue-renderer/app/helpers/scroll-handler.js +++ b/packages/saber/vue-app/helpers/scroll-handler.js @@ -32,7 +32,7 @@ export default function(router, to, from) { .then(shouldScroll => { scrollToPosition(shouldScroll) }) - .catch(err => { + .catch(error => { if (process.env.NODE_ENV !== 'production') { console.error(err) } diff --git a/packages/saber/vue-renderer/app/helpers/set-transition.js b/packages/saber/vue-app/helpers/set-transition.js similarity index 99% rename from packages/saber/vue-renderer/app/helpers/set-transition.js rename to packages/saber/vue-app/helpers/set-transition.js index 51061699c..918ddb1ff 100644 --- a/packages/saber/vue-renderer/app/helpers/set-transition.js +++ b/packages/saber/vue-app/helpers/set-transition.js @@ -6,6 +6,7 @@ export default ({ router }) => { } else if (typeof transition === 'string') { transition = { name: transition } } + return transition } @@ -17,12 +18,14 @@ export default ({ router }) => { ) { return } + // The default router component let RouteComponent = route.matched[0].components.default // Resolve async component if (typeof RouteComponent === 'function') { RouteComponent = await RouteComponent() } + // ES compat RouteComponent = RouteComponent.default || RouteComponent diff --git a/packages/saber/vue-renderer/app/polyfills.js b/packages/saber/vue-app/polyfills.js similarity index 100% rename from packages/saber/vue-renderer/app/polyfills.js rename to packages/saber/vue-app/polyfills.js diff --git a/packages/saber/vue-renderer/app/router.js b/packages/saber/vue-app/router.js similarity index 95% rename from packages/saber/vue-renderer/app/router.js rename to packages/saber/vue-app/router.js index bbfb356ea..5021530dc 100644 --- a/packages/saber/vue-renderer/app/router.js +++ b/packages/saber/vue-app/router.js @@ -70,6 +70,7 @@ export default () => { position = position || { x: 0, y: 0 } } } + resolve(position) } @@ -95,7 +96,11 @@ export default () => { next(false) visitedRoutes[to.path] = true - fetch(`/_saber/visit-page?id=${window.__SABER_DEV_CLIENT_ID__}&route=${encodeURIComponent(to.fullPath)}`) + fetch( + `/_saber/visit-page?id=${ + window.__SABER_DEV_CLIENT_ID__ + }&route=${encodeURIComponent(to.fullPath)}` + ) }) router.afterEach(() => { diff --git a/packages/saber/vue-renderer/app/theme/layouts/default.vue b/packages/saber/vue-app/theme/layouts/default.vue similarity index 100% rename from packages/saber/vue-renderer/app/theme/layouts/default.vue rename to packages/saber/vue-app/theme/layouts/default.vue diff --git a/packages/saber/vue-renderer/app/utils/is-absolute-url.js b/packages/saber/vue-app/utils/is-absolute-url.js similarity index 100% rename from packages/saber/vue-renderer/app/utils/is-absolute-url.js rename to packages/saber/vue-app/utils/is-absolute-url.js diff --git a/packages/saber/vue-renderer/app/vendor/promise.js b/packages/saber/vue-app/vendor/promise.js similarity index 100% rename from packages/saber/vue-renderer/app/vendor/promise.js rename to packages/saber/vue-app/vendor/promise.js diff --git a/packages/saber/vue-renderer/app/components/ClientOnly.js b/packages/saber/vue-renderer/app/components/ClientOnly.js deleted file mode 100644 index 589a1a050..000000000 --- a/packages/saber/vue-renderer/app/components/ClientOnly.js +++ /dev/null @@ -1,13 +0,0 @@ -export default { - name: 'ClientOnly', - functional: true, - render (h, { parent, children }) { - if (parent._isMounted) { - return children - } else { - parent.$once('hook:mounted', () => { - parent.$forceUpdate() - }) - } - } -} diff --git a/tsconfig.json b/tsconfig.base.json similarity index 77% rename from tsconfig.json rename to tsconfig.base.json index 0e6bfadf0..3906e7899 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -1,11 +1,9 @@ { "compilerOptions": { "strict": true, - "allowJs": true, - "noEmit": true, "lib": ["es2017"], "module": "commonjs", - "target": "es2015", + "target": "es2017", "esModuleInterop": true, "moduleResolution": "node", "noImplicitAny": true, diff --git a/website/package.json b/website/package.json index c1bb4eae2..0d2bcf39a 100644 --- a/website/package.json +++ b/website/package.json @@ -1,9 +1,10 @@ { "private": true, - "name": "saber-website", + "version": "0.0.0", + "name": "website", "scripts": { - "dev": "node ../packages/saber/lib/cli.js", - "generate": "node ../packages/saber/lib/cli.js generate" + "dev": "saber", + "generate": "saber generate && yarn workspace saber build:typedoc" }, "dependencies": { "date-fns": "1.30.1", diff --git a/website/saber-config.js b/website/saber-config.js index 5afdb90c9..0b94d6ee4 100644 --- a/website/saber-config.js +++ b/website/saber-config.js @@ -1,4 +1,7 @@ -module.exports = { +// @ts-check + +/** @type {import('saber').SaberConfig} */ +const config = { siteConfig: { title: 'Saber', description: 'A framework for building modern static websites.', @@ -108,5 +111,10 @@ module.exports = { } } } - ] + ], + template: { + openLinkInNewTab: true + } } + +module.exports = config diff --git a/yarn.lock b/yarn.lock index f4378f952..33a50905f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -686,6 +686,24 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@bundle-analyzer/core@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@bundle-analyzer/core/-/core-0.5.1.tgz#f993cb89e26602d0d75af73e51b06a4967191b24" + integrity sha512-E75rX40U6aEW+T/LgWeM2iUGeqzPcxho918KFKvK97PzKh7uRpsHWTm+3S7chQcHAGxGOH3EKdAStPV5TCK7Gg== + dependencies: + axios "^0.19.0" + brotli-size "^1.0.0" + cosmiconfig "^5.2.1" + gzip-size "^5.1.1" + omit-deep "^0.3.0" + +"@bundle-analyzer/webpack-plugin@^0.5.0": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@bundle-analyzer/webpack-plugin/-/webpack-plugin-0.5.1.tgz#cf8c67a2b9456f4f15a3f5af903fd3226d951008" + integrity sha512-eedcDsnRmjI5ECFnKsLaamxSuPKF1B31DpMNcAkY4laUH0/okFqYIbZTx/H73CcDmt4PNOtqtLUnrnojZRXamQ== + dependencies: + "@bundle-analyzer/core" "^0.5.1" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -723,6 +741,11 @@ resolve-from "^5.0.0" resolve-global "^1.0.0" +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + "@egoist/postcss-loader@^3.0.2": version "3.0.2" resolved "https://registry.npmjs.org/@egoist/postcss-loader/-/postcss-loader-3.0.2.tgz#a7bc23b85f1ae7fa4f24492be3491462ea778269" @@ -2078,6 +2101,11 @@ dependencies: "@types/babel-types" "*" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/estree@*", "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -2104,6 +2132,11 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hash-sum@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/hash-sum/-/hash-sum-1.0.0.tgz#838f4e8627887d42b162d05f3d96ca636c2bc504" + integrity sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -2124,7 +2157,24 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/minimatch@*": +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + +"@types/lodash.merge@^4.6.6": + version "4.6.6" + resolved "https://registry.yarnpkg.com/@types/lodash.merge/-/lodash.merge-4.6.6.tgz#b84b403c1d31bc42d51772d1cd5557fa008cd3d6" + integrity sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.144" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e" + integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg== + +"@types/minimatch@*", "@types/minimatch@3.0.3": version "3.0.3" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== @@ -2168,11 +2218,6 @@ resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/superstruct@0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@types/superstruct/-/superstruct-0.5.0.tgz#2a71e613929f8049cb8504bc7d90dbf0e31da034" - integrity sha512-ieqVuj0o0G+yVzjv4r7evT6tjIoESocymOenpcAbXKjTjsQT3M2RN7+pBILCZ/ymC8nqIe7apCTIGnPjqpnjKQ== - "@types/tapable@*": version "1.0.4" resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370" @@ -2218,6 +2263,47 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.6.0.tgz#e82ed43fc4527b21bfe35c20a2d6e4ed49fc7957" + integrity sha512-iCcXREU4RciLmLniwKLRPCOFVXrkF7z27XuHq5DrykpREv/mz6ztKAyLg2fdkM0hQC7659p5ZF5uStH7uzAJ/w== + dependencies: + "@typescript-eslint/experimental-utils" "2.6.0" + eslint-utils "^1.4.2" + functional-red-black-tree "^1.0.1" + regexpp "^2.0.1" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.6.0.tgz#ed70bef72822bff54031ff0615fc888b9e2b6e8a" + integrity sha512-34BAFpNOwHXeqT+AvdalLxOvcPYnCxA5JGmBAFL64RGMdP0u65rXjii7l/nwpgk5aLEE1LaqF+SsCU0/Cb64xA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.6.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.6.0.tgz#5106295c6a7056287b4719e24aae8d6293d5af49" + integrity sha512-AvLejMmkcjRTJ2KD72v565W4slSrrzUIzkReu1JN34b8JnsEsxx7S9Xx/qXEuMQas0mkdUfETr0j3zOhq2DIqQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.6.0" + "@typescript-eslint/typescript-estree" "2.6.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.0.tgz#d3e9d8e001492e2b9124c4d4bd4e7f03c0fd7254" + integrity sha512-A3lSBVIdj2Gp0lFEL6in2eSPqJ33uAc3Ko+Y4brhjkxzjbzLnwBH22CwsW2sCo+iwogfIyvb56/AJri15H0u5Q== + dependencies: + debug "^4.1.1" + glob "^7.1.4" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + "@vue/component-compiler-utils@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.0.0.tgz#d16fa26b836c06df5baaeb45f3d80afc47e35634" @@ -2436,10 +2522,10 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-walk@^6.0.1: version "6.1.1" @@ -2461,7 +2547,7 @@ acorn@^5.5.3: resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== @@ -2478,6 +2564,11 @@ agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: dependencies: es6-promisify "^5.0.0" +agentkeepalive@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" + integrity sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8= + agentkeepalive@^3.4.1: version "3.5.2" resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" @@ -2495,7 +2586,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -2505,6 +2596,27 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +algoliasearch@^3.24.5: + version "3.35.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.35.1.tgz#297d15f534a3507cab2f5dfb996019cac7568f0c" + integrity sha512-K4yKVhaHkXfJ/xcUnil04xiSrB8B8yHZoFEhWNpXg23eiCnqvTZw1tn/SqvdsANlYHLJlKl0qi3I/Q2Sqo7LwQ== + dependencies: + agentkeepalive "^2.2.0" + debug "^2.6.9" + envify "^4.0.0" + es6-promise "^4.1.0" + events "^1.1.0" + foreach "^2.0.5" + global "^4.3.2" + inherits "^2.0.1" + isarray "^2.0.1" + load-script "^1.0.0" + object-keys "^1.0.11" + querystring-es3 "^0.2.1" + reduce "^1.0.1" + semver "^5.1.0" + tunnel-agent "^0.6.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -2519,23 +2631,23 @@ alphanum-sort@^1.0.0: resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-colors@^3.0.0, ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" + integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + dependencies: + type-fest "^0.5.2" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -2651,11 +2763,6 @@ arr-union@^3.1.0: resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= - array-differ@^2.0.3: version "2.1.0" resolved "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" @@ -2693,7 +2800,7 @@ array-unique@^0.3.2: resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= @@ -2766,6 +2873,26 @@ atob@^2.1.1: resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autocomplete.js@0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz#94fe775fe64b6cd42e622d076dc7fd26bedd837b" + integrity sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q== + dependencies: + immediate "^3.2.3" + +autoprefixer@^9.4.9: + version "9.7.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.1.tgz#9ffc44c55f5ca89253d9bb7186cefb01ef57747f" + integrity sha512-w3b5y1PXWlhYulevrTJ0lizkQ5CyqfeU6BIRDbuhsMupstHQOeb1Ur80tcB1zxSu7AwyY/qCQ7Vvqklh31ZBFw== + dependencies: + browserslist "^4.7.2" + caniuse-lite "^1.0.30001006" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.21" + postcss-value-parser "^4.0.2" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2776,6 +2903,14 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +axios@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8" + integrity sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + babel-extract-comments@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" @@ -2873,10 +3008,12 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== +backbone@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12" + integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ== + dependencies: + underscore ">=1.8.3" balanced-match@^1.0.0: version "1.0.0" @@ -2936,6 +3073,13 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +bl@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" + integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A== + dependencies: + readable-stream "^3.0.1" + bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -2961,19 +3105,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3010,6 +3141,14 @@ brorand@^1.0.1: resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +brotli-size@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-1.0.0.tgz#9dde191db7c5519cf21eb872c58794ec12811a5a" + integrity sha512-vLc7vUKuDh1GsxeWW+X0epesdhxVRG5h2uuF6YlV67xlI/r5tRWSXeiZRNX7GpuYr8p1LLKGsxt/MyQ+o0zG6Q== + dependencies: + duplexer "^0.1.1" + iltorb "^2.4.3" + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -3090,6 +3229,15 @@ browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.2: electron-to-chromium "^1.3.164" node-releases "^1.1.23" +browserslist@^4.4.2, browserslist@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" + integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== + dependencies: + caniuse-lite "^1.0.30001004" + electron-to-chromium "^1.3.295" + node-releases "^1.1.38" + bser@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -3102,11 +3250,6 @@ btoa-lite@^1.0.0: resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= -buf-compare@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" - integrity sha1-/vKNqLgROgoNtEMLC2Rntpcws0o= - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -3187,6 +3330,11 @@ builtins@^1.0.3: resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +bulma@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.6.2.tgz#f4b1d11d5acc51a79644eb0a2b0b10649d3d71f5" + integrity sha1-9LHRHVrMUaeWROsKKwsQZJ09cfU= + byline@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -3324,7 +3472,7 @@ camelcase@^2.0.0: resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -3354,6 +3502,11 @@ caniuse-lite@^1.0.0: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz#805e828dc72b06498e3683a32e61c7507fd67b88" integrity sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg== +caniuse-lite@^1.0.30000939, caniuse-lite@^1.0.30001004, caniuse-lite@^1.0.30001006: + version "1.0.30001006" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001006.tgz#5b6e8288792cfa275f007b2819a00ccad7112655" + integrity sha512-MXnUVX27aGs/QINz+QG1sWSLDr3P1A3Hq5EUWoIt0T7K24DuvMxZEnh3Y5aHlJW6Bz2aApJdSewdYLd8zQnUuw== + caniuse-lite@^1.0.30000975: version "1.0.30000977" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000977.tgz#7da2ca14cae2fddb368c05c57ab4a529afd658ff" @@ -3366,11 +3519,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - caseless@~0.12.0: version "0.12.0" resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3414,16 +3562,6 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== - character-parser@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" @@ -3431,11 +3569,6 @@ character-parser@^2.1.1: dependencies: is-regex "^1.0.3" -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== - chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3493,11 +3626,6 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3528,18 +3656,6 @@ clean-css@^4.1.11: dependencies: source-map "~0.6.0" -clean-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" - integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= - dependencies: - escape-string-regexp "^1.0.5" - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -3547,6 +3663,13 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -3596,16 +3719,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== - dependencies: - for-own "^1.0.0" - is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" - clone-response@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -3637,11 +3750,6 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -3807,18 +3915,6 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -3853,11 +3949,6 @@ constants-browserify@^1.0.0: resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - content-disposition@^0.5.2: version "0.5.3" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3990,14 +4081,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-assert@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" - integrity sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8= - dependencies: - buf-compare "^1.0.0" - is-error "^2.2.0" - core-js-compat@^3.1.1: version "3.1.4" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.4.tgz#e4d0c40fbd01e65b1d457980fe4112d4358a7408" @@ -4012,7 +4095,7 @@ core-js-pure@3.1.4: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769" integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA== -core-js@^2.0.0, core-js@^2.4.0, core-js@^2.5.7: +core-js@^2.4.0, core-js@^2.5.7: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== @@ -4050,13 +4133,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -4080,15 +4156,6 @@ 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-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4117,10 +4184,12 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" @@ -4135,6 +4204,14 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + css-loader@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/css-loader/-/css-loader-2.1.0.tgz#42952ac22bca5d076978638e9813abce49b8f0cc" @@ -4151,6 +4228,13 @@ css-loader@^2.1.0: postcss-value-parser "^3.3.0" schema-utils "^1.0.0" +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + css-select-base-adapter@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -4206,6 +4290,11 @@ css-what@^2.1.2: resolved "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== +cssdb@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -4367,7 +4456,7 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@^1.27.2: +date-fns@1.30.1, date-fns@^1.27.2: version "1.30.1" resolved "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== @@ -4387,14 +4476,14 @@ de-indent@^1.0.2: resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: +debug@3.1.0, debug@=3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -4445,6 +4534,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" @@ -4513,13 +4609,6 @@ deep-is@~0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deep-strict-equal@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4" - integrity sha1-SgeBR6irV/ag1PVUckPNIvROtOQ= - dependencies: - core-assert "^0.2.0" - deepmerge@4.0.0, deepmerge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" @@ -4631,7 +4720,7 @@ detect-indent@^5.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-libc@^1.0.2: +detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= @@ -4675,13 +4764,18 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= +docsearch.js@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.6.3.tgz#57cb4600d3b6553c677e7cbbe6a734593e38625d" + integrity sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A== dependencies: - esutils "^2.0.2" - isarray "^1.0.0" + algoliasearch "^3.24.5" + autocomplete.js "0.36.0" + hogan.js "^3.0.2" + request "^2.87.0" + stack-utils "^1.0.1" + to-factory "^1.0.0" + zepto "^1.2.0" doctrine@^3.0.0: version "3.0.0" @@ -4752,7 +4846,7 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0, dot-prop@^4.1.1, dot-prop@^4.2.0: +dot-prop@^4.1.1, dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== @@ -4831,6 +4925,11 @@ electron-to-chromium@^1.3.164: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.173.tgz#275b9ba235447b95fc3204d32ca2c5a8bf2ca599" integrity sha512-weH16m8as+4Fy4XJxrn/nFXsIqB7zkxERhvj/5YX2HE4HB8MCu98Wsef4E3mu0krIT27ic0bGsr+TvqYrUn6Qg== +electron-to-chromium@^1.3.295: + version "1.3.300" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.300.tgz#65aad6a951886261e26671bbba8b6be67006cab0" + integrity sha512-7cKPexKxQn2vuumHVmTdtTXojzmMDtksyOrUSRZkYgLTEHKjmBXAistDrFIhDiPguw8Y6ZSS/HINRx2FPIgUIA== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -4854,6 +4953,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -4878,12 +4982,12 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhance-visitors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a" - integrity sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo= +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - lodash "^4.13.1" + once "^1.4.0" enhanced-resolve@^4.1.0: version "4.1.0" @@ -4911,11 +5015,6 @@ entities@~2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== -env-editor@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/env-editor/-/env-editor-0.3.1.tgz#30d0540c2101414f258a94d4c0a524c06c13e3c6" - integrity sha1-MNBUDCEBQU8lipTUwKUkwGwT48Y= - env-paths@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" @@ -4926,6 +5025,14 @@ env-paths@^2.2.0: resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== +envify@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw== + dependencies: + esprima "^4.0.0" + through "~2.3.4" + err-code@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -4971,6 +5078,11 @@ es6-promise@^4.0.3: resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== +es6-promise@^4.1.0: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" @@ -5005,14 +5117,6 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-ast-utils@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" - integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== - dependencies: - lodash.get "^4.4.2" - lodash.zip "^4.2.0" - eslint-config-prettier@6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.3.0.tgz#e73b48e59dc49d950843f3eb96d519e2248286a3" @@ -5020,164 +5124,13 @@ eslint-config-prettier@6.3.0: dependencies: get-stdin "^6.0.0" -eslint-config-prettier@^3.3.0: - version "3.6.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217" - integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ== - dependencies: - get-stdin "^6.0.0" - -eslint-config-rem@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/eslint-config-rem/-/eslint-config-rem-4.0.0.tgz#a33022c2122d925e5cf632dc45555cd2e090e50f" - integrity sha512-tqtBkjRnSb5LTOQ+DziuDMik2yIWIzEa5k3J/YSh0W0WzCNlI0K6uKy5VeGIzHhj9mRZvoxMtELMtzIHhE0Taw== - dependencies: - eslint-plugin-markdown "^1.0.0-beta.6" - -eslint-config-xo@^0.26.0: - version "0.26.0" - resolved "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.26.0.tgz#19dcfb1e3038dd440f5c5e4b4d11bb3128801b24" - integrity sha512-l+93kmBSNr5rMrsqwC6xVWsi8LI4He3z6jSk38e9bAkMNsVsQ8XYO+qzXfJFgFX4i/+hiTswyHtl+nDut9rPaA== - -eslint-formatter-pretty@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-2.1.1.tgz#0794a1009195d14e448053fe99667413b7d02e44" - integrity sha512-gWfagucSWBn82WxzwFloBTLAcwYDgnpAfiV5pQfyAV5YpZikuLflRU8nc3Ts9wnNvLhwk4blzb42/C495Yw7BA== - dependencies: - ansi-escapes "^3.1.0" - chalk "^2.1.0" - eslint-rule-docs "^1.1.5" - log-symbols "^2.0.0" - plur "^3.0.1" - string-width "^2.0.0" - supports-hyperlinks "^1.0.1" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-ava@^5.1.0: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-5.1.1.tgz#709a03f6c56f9f316d83ebc739952cc28cea979a" - integrity sha512-3N7geVdXTabpngQOl+ih1ejMbFOXCUYROnTIP66KAQoMcEAkPSXYc/Jwo/qC4zpRR7PXMuf5afMzTEBpyZmWzQ== - dependencies: - arrify "^1.0.1" - deep-strict-equal "^0.2.0" - enhance-visitors "^1.0.0" - esm "^3.0.82" - espree "^4.0.0" - espurify "^1.8.1" - import-modules "^1.1.0" - is-plain-object "^2.0.4" - multimatch "^2.1.0" - pkg-up "^2.0.0" - -eslint-plugin-es@^1.3.1: - version "1.4.0" - resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-eslint-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.1.tgz#32ff0afba8a48e17073817e6d03fbc5622f735b7" - integrity sha512-GZDKhOFqJLKlaABX+kdoLskcTINMrVOWxGca54KcFb1QCPd0CLmqgAMRxkkUfGSmN+5NJUMGh7NGccIMcWPSfQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-markdown@^1.0.0-beta.6: - version "1.0.0-rc.0" - resolved "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.0-rc.0.tgz#edbc8b3a801b2d026e1211bb0a7ed5ba3bcf400d" - integrity sha512-28Ioje4p8QAmpxDL91jR4rU+x6+UEx6IW/b+nVnXuS7CMCuOttQl+8BGSu04bm0+8ibOlNsvt5QXc7D847oOkw== - dependencies: - object-assign "^4.0.1" - remark-parse "^5.0.0" - unified "^6.1.2" - -eslint-plugin-no-use-extend-native@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.4.0.tgz#ececdf248a2336555a554f7b1217a612240c4eaf" - integrity sha512-9W2747CwC7aTJknLKY6ftdzj3AZz8DSaa64zONOMIemxH7YRr0+hqrvsNtHK/v9DusPuMxM9y9hBnfHwzKFmww== - dependencies: - is-get-set-prop "^1.0.0" - is-js-type "^2.0.0" - is-obj-prop "^1.0.0" - is-proto-prop "^2.0.0" - -eslint-plugin-node@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964" - integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w== - dependencies: - eslint-plugin-es "^1.3.1" - eslint-utils "^1.3.1" - ignore "^5.0.2" - minimatch "^3.0.4" - resolve "^1.8.1" - semver "^5.5.0" - -eslint-plugin-prettier@3.1.1, eslint-plugin-prettier@^3.0.0: +eslint-plugin-prettier@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-promise@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" - integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg== - -eslint-plugin-unicorn@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-7.1.0.tgz#9efef5c68fde0ebefb0241fbcfa274f1b959c04e" - integrity sha512-lW/ZwGR638V0XuZgR160qVQvPtw8tw3laKT5LjJPt+W+tN7kVf2S2V7x+ZrEEwSjEb3OiEzb3cppzaKuYtgYeg== - dependencies: - clean-regexp "^1.0.0" - eslint-ast-utils "^1.0.0" - import-modules "^1.1.0" - lodash.camelcase "^4.1.1" - lodash.kebabcase "^4.0.1" - lodash.snakecase "^4.0.1" - lodash.upperfirst "^4.2.0" - safe-regex "^2.0.1" - -eslint-rule-docs@^1.1.5: - version "1.1.105" - resolved "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.105.tgz#72f37b9e2a28df2bf78d2bc395475d40b9bb3ee4" - integrity sha512-62+4LJ4Gu1QFf3AwYm7GXRebr0d+w7YspaPzGS8gjEH0EbLmjsUzfdwuAU0Xjs1Vt0xXUanMeXT2wO8u1MQauw== - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5186,82 +5139,77 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2, eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0: +eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^5.12.0: - version "5.16.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== +eslint@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" + integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g== dependencies: "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" + ajv "^6.10.0" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" - glob "^7.1.2" + glob-parent "^5.0.0" globals "^11.7.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.11" + lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" - path-is-inside "^1.0.2" progress "^2.0.0" regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" + v8-compile-cache "^2.0.3" -esm@^3.0.82: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espree@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" esprima@^3.1.3: version "3.1.3" @@ -5273,13 +5221,6 @@ esprima@^4.0.0: resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -espurify@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz#5746c6c1ab42d302de10bd1d5bf7f0e8c0515056" - integrity sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg== - dependencies: - core-js "^2.0.0" - esquery@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" @@ -5319,6 +5260,11 @@ eventemitter3@^3.1.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +events@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" @@ -5337,32 +5283,6 @@ exec-sh@^0.3.2: resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -5414,6 +5334,11 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -5463,7 +5388,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -5579,6 +5504,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -5708,7 +5640,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -5754,6 +5686,11 @@ flatted@^2.0.0: resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -5767,6 +5704,13 @@ fn-name@~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" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -5774,22 +5718,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forever-agent@~0.6.1: version "0.6.1" @@ -5974,11 +5911,6 @@ get-proxy@^2.0.0: dependencies: npm-conf "^1.1.0" -get-set-props@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3" - integrity sha1-mYR1wXhEVobQsyJG2l3428++jqM= - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -6095,6 +6027,11 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -6127,7 +6064,7 @@ glob@7.1.4, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glo once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0, global-dirs@^0.1.1: +global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= @@ -6154,6 +6091,14 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -6183,7 +6128,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^9.0.0, globby@^9.2.0: +globby@^9.2.0: version "9.2.0" resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== @@ -6204,23 +6149,6 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - got@^8.3.1: version "8.3.2" resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" @@ -6254,11 +6182,26 @@ graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1. resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= +grid.css@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/grid.css/-/grid.css-0.6.1.tgz#75f9cfd5fd5128bef79d24cf10938e5cdb0ee7e4" + integrity sha512-+4jldbOxZB5gvYA7eBpgO6uBzhPOXgAFdo/lk9oH25UQcW+H7+x496bZi4+Rj0dVcS9801EViJGeKUiDvumhZQ== + dependencies: + bulma "^0.6.1" + growly@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gzip-size@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + handlebars@^4.1.0, handlebars@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" @@ -6290,11 +6233,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -6353,11 +6291,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-1.0.0.tgz#89e25db604b725c8f5976fff0addc921b828a5a7" - integrity sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac= - has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -6396,11 +6329,21 @@ he@^1.1.0: resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +headroom.js@^0.9.4: + version "0.9.4" + resolved "https://registry.yarnpkg.com/headroom.js/-/headroom.js-0.9.4.tgz#0c4e6b4563bb69df55aecdefaba3227566f2df5a" + integrity sha1-DE5rRWO7ad9Vrs3vq6MidWby31o= + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +highlight.js@^9.15.8: + version "9.16.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.16.1.tgz#827f49ca96eae006d8a2a0d5e3acd56041c26fc5" + integrity sha512-pyyiU56NR1XSm8M/l1QDKGGCA2n2GrcTxFahBo4v/2dH3gy4IiALczwhC9YJicyjoRh6JQWM+h3PvY1ZZ+D0+g== + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6410,6 +6353,14 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0= + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -6572,10 +6523,21 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.0.2, ignore@^5.0.5: - version "5.1.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.1.tgz#2fc6b8f518aff48fef65a7f348ed85632448e4a5" - integrity sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA== +iltorb@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.4.tgz#7ec303bbbd8c0cd4d44a847eb6c6d8490f9c7433" + integrity sha512-7Qk6O7TK3rSWVRVRkPehcNTSN+P2i7MsG9pWmw6iVw/W6NcoNj0rFKOuBDM6fbZV6NNGuUW3JBRem6Ozn4KXhg== + dependencies: + detect-libc "^1.0.3" + nan "^2.14.0" + npmlog "^4.1.2" + prebuild-install "^5.3.2" + which-pm-runs "^1.0.0" + +immediate@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= import-cwd@^2.0.0: version "2.1.0" @@ -6607,11 +6569,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -6620,11 +6577,6 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -import-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/import-modules/-/import-modules-1.1.0.tgz#748db79c5cc42bb9701efab424f894e72600e9dc" - integrity sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw= - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6689,7 +6641,7 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@6.5.0, inquirer@^6.2.0, inquirer@^6.2.2: +inquirer@6.5.0, inquirer@^6.2.0: version "6.5.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== @@ -6708,6 +6660,25 @@ inquirer@6.5.0, inquirer@^6.2.0, inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + interpret@^1.0.0: version "1.2.0" resolved "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -6738,11 +6709,6 @@ ip@^1.1.5: resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -irregular-plurals@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872" - integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw== - is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -6767,19 +6733,6 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -6804,11 +6757,16 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.4, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" @@ -6821,13 +6779,6 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -6866,11 +6817,6 @@ is-date-object@^1.0.1: resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== - is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -6894,11 +6840,6 @@ is-directory@^0.3.1: resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-error@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c" - integrity sha1-aEqW2EB2V3yY9M20DG0mpRI78Zw= - is-expression@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" @@ -6943,6 +6884,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-function@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" @@ -6953,14 +6899,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-get-set-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz#2731877e4d78a6a69edcce6bb9d68b0779e76312" - integrity sha1-JzGHfk14pqae3M5rudaLB3nnYxI= - dependencies: - get-set-props "^0.1.0" - lowercase-keys "^1.0.0" - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -6975,26 +6913,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-js-type@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz#73617006d659b4eb4729bba747d28782df0f7e22" - integrity sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI= - dependencies: - js-types "^1.0.0" - is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -7005,11 +6923,6 @@ is-natural-number@^4.0.1: resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - is-number@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7022,14 +6935,6 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz#b34de79c450b8d7c73ab2cdf67dc875adb85f80e" - integrity sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4= - dependencies: - lowercase-keys "^1.0.0" - obj-props "^1.0.0" - is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -7090,19 +6995,6 @@ is-promise@^2.0.0, is-promise@^2.1.0: resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-proto-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz#99ab2863462e44090fd083efd1929058f9d935e1" - integrity sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg== - dependencies: - lowercase-keys "^1.0.0" - proto-props "^2.0.0" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - is-reference@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.3.tgz#e99059204b66fdbe09305cfca715a29caa5c8a51" @@ -7127,7 +7019,7 @@ is-resolvable@^1.0.0: resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: +is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= @@ -7139,7 +7031,7 @@ is-ssh@^1.3.0: dependencies: protocols "^1.1.0" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -7187,21 +7079,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== - is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -7212,6 +7094,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -7653,7 +7540,7 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest@24.9.0: +jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== @@ -7682,6 +7569,11 @@ jpeg-js@^0.3.4: resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.6.tgz#c40382aac9506e7d1f2d856eb02f6c7b2a98b37c" integrity sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw== +jquery@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== + js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -7697,11 +7589,6 @@ js-stringify@^1.0.1: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-types@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03" - integrity sha1-0kLmSU7Vcq08koCfyL7X92h8vwM= - js-yaml@^3.12.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" @@ -7710,7 +7597,7 @@ js-yaml@^3.12.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -7870,7 +7757,7 @@ kind-of@^5.0.0: resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.1, kind-of@^6.0.2: +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== @@ -7885,13 +7772,6 @@ kleur@^3.0.2: resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -7945,11 +7825,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -line-column-path@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/line-column-path/-/line-column-path-1.0.0.tgz#383b83fca8488faa7a59940ebf28b82058c16c55" - integrity sha1-ODuD/KhIj6p6WZQOvyi4IFjBbFU= - linkify-it@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz#c4caf38a6cd7ac2212ef3c7d2bde30a91561f9db" @@ -8057,16 +7932,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -8088,6 +7953,11 @@ load-json-file@^5.3.0: strip-bom "^3.0.0" type-fest "^0.3.0" +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -8130,11 +8000,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.camelcase@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -8150,21 +8015,11 @@ lodash.get@^4.4.2: resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.kebabcase@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= - lodash.map@^4.5.1: version "4.6.0" resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" @@ -8180,21 +8035,11 @@ lodash.merge@^4.6.1: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.mergewith@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.snakecase@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -8215,27 +8060,22 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash.upperfirst@^4.2.0: - version "4.3.1" - resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= - -lodash.zip@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" - integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= - 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== -lodash@4.17.15, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.2.1: +lodash@4.17.15, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -8247,7 +8087,7 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^2.0.0, log-symbols@^2.2.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== @@ -8312,7 +8152,7 @@ lozad@^1.9.0: resolved "https://registry.yarnpkg.com/lozad/-/lozad-1.9.0.tgz#75e71ea9e379c744c2ad7ecc37a5858a25674595" integrity sha512-JHLl59h3ESVfZEDyCeSlB3afZAIUZ6oA98hU3F6GZPRrPFWSuf6Z6zjMko+NEWpWfI7gGOMhE0d3txloLL2QiQ== -lru-cache@^4.0.1, lru-cache@^4.1.2: +lru-cache@^4.1.2: version "4.1.5" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -8327,6 +8167,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lunr@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.8.tgz#a8b89c31f30b5a044b97d2d28e2da191b6ba2072" + integrity sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== + macos-release@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz#ab58d55dd4714f0a05ad4b0e90f4370fef5cdea8" @@ -8419,10 +8264,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== +markdown-it-footnote@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.1.tgz#7f3730747cacc86e2fe0bf8a17a710f34791517a" + integrity sha1-fzcwdHysyG4v4L+KF6cQ80eRUXo= markdown-it-footnote@3.0.2: version "3.0.2" @@ -8440,6 +8285,11 @@ markdown-it@10.0.0: mdurl "^1.0.1" uc.micro "^1.0.5" +marked@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" + integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== + matcher@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" @@ -8521,21 +8371,6 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" @@ -8627,6 +8462,11 @@ mimic-response@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46" + integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -8654,7 +8494,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8723,14 +8563,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -8745,6 +8577,11 @@ mkdirp@*, mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= + modern-copy@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/modern-copy/-/modern-copy-1.0.3.tgz#1b0a3e8548316cae95e76f9f75cacb561d193b8e" @@ -8777,16 +8614,6 @@ ms@2.1.1, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - multimatch@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" @@ -8802,7 +8629,7 @@ mute-stream@0.0.7: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@~0.0.4: +mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== @@ -8821,6 +8648,11 @@ nan@^2.12.1: resolved "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +nan@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + nan@^2.9.2: version "2.12.1" resolved "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" @@ -8843,6 +8675,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" + integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -8872,6 +8709,13 @@ nice-try@^1.0.4: resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-abi@^2.7.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.12.0.tgz#40e9cfabdda1837863fa825e7dfa0b15686adf6f" + integrity sha512-VhPBXCIcvmo/5K8HPmnWJyyhvgKxnHTUMXR/XwGHV68+wrgkzST4UmQrY/XszSWA5dtnXpNp528zkcyJ/pzVcw== + dependencies: + semver "^5.4.1" + node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -8997,6 +8841,25 @@ node-releases@^1.1.23: dependencies: semver "^5.3.0" +node-releases@^1.1.38: + version "1.1.39" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" + integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== + dependencies: + semver "^6.3.0" + +noop-logger@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + "nopt@2 || 3": version "3.0.6" resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -9044,6 +8907,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + normalize-repo@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/normalize-repo/-/normalize-repo-1.1.3.tgz#f046f12128f14e077d4bf664892c317823711e7c" @@ -9165,7 +9033,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -9175,6 +9043,11 @@ npm-which@^3.0.1: gauge "~2.7.3" set-blocking "~2.0.0" +nprogress@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + nth-check@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -9182,6 +9055,11 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -9197,11 +9075,6 @@ oauth-sign@~0.9.0: resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -obj-props@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/obj-props/-/obj-props-1.1.0.tgz#626313faa442befd4a44e9a02c3cb6bde937b511" - integrity sha1-YmMT+qRCvv1KROmgLDy2vek3tRE= - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -9216,7 +9089,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11: +object-keys@^1.0.11, object-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -9278,6 +9151,14 @@ omggif@^1.0.9: resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== +omit-deep@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/omit-deep/-/omit-deep-0.3.0.tgz#21c8af3499bcadd29651a232cbcacbc52445ebec" + integrity sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w= + dependencies: + is-plain-object "^2.0.1" + unset-value "^0.1.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -9306,15 +9187,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open-editor@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/open-editor/-/open-editor-1.2.0.tgz#75ca23f0b74d4b3f55ee0b8a4e0f5c2325eb775f" - integrity sha1-dcoj8LdNSz9V7guKTg9cIyXrd18= - dependencies: - env-editor "^0.3.1" - line-column-path "^1.0.0" - opn "^5.0.0" - open@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -9327,13 +9199,6 @@ opencollective-postinstall@^2.0.2: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== -opn@^5.0.0: - version "5.4.0" - resolved "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035" - integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw== - dependencies: - is-wsl "^1.1.0" - optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -9538,16 +9403,6 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - pako@^1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -9603,18 +9458,6 @@ parse-bmfont-xml@^1.1.4: xml-parse-from-string "^1.0.0" xml2js "^0.4.5" -parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" - integrity sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -9747,13 +9590,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -9833,21 +9669,6 @@ pixelmatch@^4.0.2: dependencies: pngjs "^3.0.0" -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -9862,13 +9683,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pkg-up@^3.0.1: version "3.1.0" resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" @@ -9883,13 +9697,6 @@ please-upgrade-node@^3.0.2, please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" -plur@^3.0.1: - version "3.1.1" - resolved "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b" - integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w== - dependencies: - irregular-plurals "^2.0.0" - pn@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -9913,9 +9720,17 @@ posix-character-classes@^0.1.0: resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7" + integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0" + +postcss-calc@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== dependencies: css-unit-converter "^1.1.1" @@ -9923,6 +9738,48 @@ postcss-calc@^7.0.1: postcss-selector-parser "^5.0.0-rc.4" postcss-value-parser "^3.3.1" +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + postcss-colormin@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" @@ -9942,6 +9799,37 @@ postcss-convert-values@^4.0.1: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-custom-media@^7.0.7: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.9: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + postcss-discard-comments@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" @@ -9970,6 +9858,75 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" + integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" + integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + postcss-load-config@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" @@ -9978,6 +9935,20 @@ postcss-load-config@^2.0.0: cosmiconfig "^4.0.0" import-cwd "^2.0.0" +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + postcss-merge-longhand@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" @@ -10072,6 +10043,13 @@ postcss-modules-values@^2.0.0: icss-replace-symbols "^1.1.0" postcss "^7.0.6" +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + postcss-normalize-charset@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" @@ -10162,6 +10140,79 @@ postcss-ordered-values@^4.1.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.6.0.tgz#642e7d962e2bdc2e355db117c1eb63952690ed5b" + integrity sha512-I3zAiycfqXpPIFD6HXhLfWXIewAWO8emOKz+QSsxaUZb9Dp8HbF5kUf+4Wy/AxR33o+LRoO8blEWCHth0ZsCLA== + dependencies: + autoprefixer "^9.4.9" + browserslist "^4.4.2" + caniuse-lite "^1.0.30000939" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.3.0" + postcss "^7.0.14" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.2" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.7" + postcss-custom-properties "^8.0.9" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + postcss-reduce-initial@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" @@ -10182,6 +10233,29 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + postcss-selector-parser@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" @@ -10191,7 +10265,7 @@ postcss-selector-parser@^3.0.0: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.4: +postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: version "5.0.0" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== @@ -10224,6 +10298,20 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== +postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: version "7.0.17" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" @@ -10233,6 +10321,15 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21: + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + posthtml-parser@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.4.1.tgz#95b78fef766fbbe0a6f861b6e95582bc3d1ff933" @@ -10254,12 +10351,33 @@ posthtml@^0.11.3, posthtml@^0.11.6: posthtml-parser "^0.4.1" posthtml-render "^1.1.5" +prebuild-install@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e" + integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^3.0.3" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -10281,7 +10399,7 @@ prettier@1.16.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== -prettier@1.18.2, prettier@^1.15.2: +prettier@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== @@ -10308,6 +10426,13 @@ pretty-ms@^5.0.0: dependencies: parse-ms "^2.1.0" +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" + prismjs@1.17.1: version "1.17.1" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" @@ -10335,7 +10460,7 @@ process@~0.5.1: resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= -progress@^2.0.0: +progress@^2.0.0, 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== @@ -10385,11 +10510,6 @@ proto-list@~1.2.1: resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -proto-props@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz#8ac6e6dec658545815c623a3bc81580deda9a181" - integrity sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ== - protocols@^1.1.0, protocols@^1.4.0: version "1.4.7" resolved "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" @@ -10608,7 +10728,7 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: +querystring-es3@^0.2.0, querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -10643,7 +10763,7 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -10696,14 +10816,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -10729,15 +10841,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -10786,7 +10889,7 @@ read@1, read@~1.0.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.0.2: +readable-stream@^3.0.1, readable-stream@^3.0.2: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== @@ -10851,6 +10954,13 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +reduce@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.2.tgz#0cd680ad3ffe0b060e57a5c68bdfce37168d361b" + integrity sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ== + dependencies: + object-keys "^1.1.0" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -10888,11 +10998,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@~0.1.1: - version "0.1.6" - resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz#84900fa12fdf428a2ac25f04300382a7c0148479" - integrity sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -10919,21 +11024,6 @@ regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -10958,27 +11048,6 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -10989,7 +11058,7 @@ repeat-element@^1.1.2: resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -11001,11 +11070,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - request-promise-core@1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" @@ -11115,7 +11179,7 @@ resolve@1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: +resolve@1.12.0, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.8.1: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -11144,6 +11208,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -11253,7 +11325,18 @@ rollup-plugin-terser@5.1.2: serialize-javascript "^1.7.0" terser "^4.1.0" -rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: +rollup-plugin-typescript2@^0.24.3: + version "0.24.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.24.3.tgz#276fa33a9d584d500da62d3e5400307f4a46bdf2" + integrity sha512-D7yovQlhnRoz7pG/RF0ni+koxgzEShwfAGuOq6OVqKzcATHOvmUt2ePeYVdc9N0adcW1PcTzklUEM0oNWE/POw== + dependencies: + find-cache-dir "^3.0.0" + fs-extra "8.1.0" + resolve "1.12.0" + rollup-pluginutils "2.8.1" + tslib "1.10.0" + +rollup-pluginutils@2.8.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== @@ -11269,6 +11352,15 @@ rollup@1.22.0: "@types/node" "*" acorn "^7.1.0" +rollup@^1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.26.0.tgz#cf40fd5e1edc4d7f3d4235a0a43f1c2be1cf294b" + integrity sha512-5HljNYn9icFvXX+Oe97qY5TWvnWhKqgGT0HGeWWqFPx7w7+Anzg7dfHMtUif7YYy6QxAgynDSwK6uxbgcrVUxw== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -11324,13 +11416,6 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -safe-regex@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.0.2.tgz#3601b28d3aefe4b963d42f6c2cdb241265cbd63c" - integrity sha512-rRALJT0mh4qVFIJ9HvfjKDN77F9vp7kltOpFFI/8e6oKyHFmmxz4aSkY/YVauRDe7U0RrHdw9Lsxdel3E19s0A== - dependencies: - regexp-tree "~0.1.1" - "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -11390,19 +11475,12 @@ semver-compare@^1.0.0: resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.2.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -11489,15 +11567,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== - dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -11519,6 +11588,15 @@ shelljs@0.7.6: interpret "^1.0.0" rechoir "^0.6.2" +shelljs@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -11529,6 +11607,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-git@^1.85.0: version "1.124.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.124.0.tgz#10a73cc1af303832b5c11720d4256e134fba35ca" @@ -11742,6 +11834,13 @@ spdx-license-ids@^3.0.0: resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== +speed-measure-webpack-plugin@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz#69840a5cdc08b4638697dac7db037f595d7f36a0" + integrity sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ== + dependencies: + chalk "^2.0.1" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -11805,11 +11904,6 @@ staged-git-files@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== -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -11904,6 +11998,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + string.prototype.trim@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz#75a729b10cfc1be439543dae442129459ce61e3d" @@ -12018,12 +12121,12 @@ strip-indent@^2.0.0: resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@3.0.1: +strip-json-comments@3.0.1, strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -12053,20 +12156,20 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -superstruct@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.6.2.tgz#c5eb034806a17ff98d036674169ef85e4c7f6a1c" - integrity sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig== +superstruct@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.8.2.tgz#63d2937b0e24210535ad47d3fd67b474e99bff52" + integrity sha512-UW9XORtsYoe/iTj/pkOjG/rKozFkFDUbgj6iPiItvfIn9IaqVnp+v1iKKenC4AY280u6IIMXAtw2DAwHwTfY4g== dependencies: - clone-deep "^2.0.1" - kind-of "^6.0.1" + kind-of "^6.0.2" + tiny-invariant "^1.0.6" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.0.0, supports-color@^5.3.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -12080,14 +12183,6 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - svgo@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" @@ -12138,6 +12233,16 @@ tapable@^1.0.0, tapable@^1.1.1, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar-fs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" + integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA== + dependencies: + chownr "^1.1.1" + mkdirp "^0.5.1" + pump "^3.0.0" + tar-stream "^2.0.0" + tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -12151,6 +12256,17 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" +tar-stream@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3" + integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw== + dependencies: + bl "^3.0.0" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4, tar@^4.4.8: version "4.4.8" resolved "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -12194,13 +12310,6 @@ temp-write@^3.4.0: temp-dir "^1.0.0" uuid "^3.0.1" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" @@ -12250,11 +12359,6 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -the-argv@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522" - integrity sha1-AIRwUAVzDdhNt1UlPJMa45jblSI= - thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -12289,7 +12393,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -12299,7 +12403,7 @@ time-fix-plugin@^2.0.5: resolved "https://registry.yarnpkg.com/time-fix-plugin/-/time-fix-plugin-2.0.6.tgz#3210121d269b475a7e7661766e682bd768ba1ced" integrity sha512-2cjjg3672ppNm/uKhHAoCFp1ItEAiH+xJOjO9WGIF8hXuxPAJ2adfYgFiyooVbsOb948c+WrRh+edxFUMxYHoQ== -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= @@ -12326,6 +12430,11 @@ tiny-emitter@^2.0.0: resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== +tiny-invariant@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + tinycolor2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" @@ -12353,6 +12462,11 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-factory@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" + integrity sha1-hzivi9lxIK0dQEeXKtpVY7+UebE= + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -12460,21 +12574,6 @@ trim-right@^1.0.1: resolved "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== - trouter@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz#2726a5f8558e090d24c3a393f09eaab1df232df6" @@ -12482,11 +12581,23 @@ trouter@^2.0.1: dependencies: matchit "^1.0.0" +tslib@1.10.0, tslib@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + tslib@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -12521,6 +12632,11 @@ type-fest@^0.4.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -12533,10 +12649,37 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" - integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== +typedoc-default-themes@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz#7e73bf54dd9e11550dd0fb576d5176b758f8f8b5" + integrity sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw== + dependencies: + backbone "^1.4.0" + jquery "^3.4.1" + lunr "^2.3.6" + underscore "^1.9.1" + +typedoc@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.15.0.tgz#21eaf4db41cf2797bad027a74f2a75cd08ae0c2d" + integrity sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw== + dependencies: + "@types/minimatch" "3.0.3" + fs-extra "^8.1.0" + handlebars "^4.1.2" + highlight.js "^9.15.8" + lodash "^4.17.15" + marked "^0.7.0" + minimatch "^3.0.0" + progress "^2.0.3" + shelljs "^0.8.3" + typedoc-default-themes "^0.6.0" + typescript "3.5.x" + +typescript@3.5.x, typescript@^3.8.0-dev.20191031: + version "3.8.0-dev.20191031" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.0-dev.20191031.tgz#d19f77c9a6314f35d9e11381c93fffb3cff9bb1c" + integrity sha512-hnIkoA1tdqCoO71ocviQg+ojLPwuZw6IxUtW12hhI+0XCpqNinQOcvUJlak0pVRUKL6vMRjvmhMbE0+uDJp/sA== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.5" @@ -12584,13 +12727,10 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" +underscore@>=1.8.3, underscore@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -12615,18 +12755,6 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== -unified@^6.1.2: - version "6.2.0" - resolved "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - union-value@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -12661,44 +12789,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== - dependencies: - unist-util-visit-parents "^2.0.0" - universal-user-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-3.0.0.tgz#4cc88d68097bffd7ac42e3b7c903e7481424b4b9" @@ -12716,6 +12806,14 @@ unquote@~1.1.1: resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= +unset-value@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" + integrity sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -12724,32 +12822,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - upath@^1.0.5: version "1.1.0" resolved "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== -update-notifier@^2.3.0: - version "2.5.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -12776,13 +12853,6 @@ url-loader@^2.0.1: mime "^2.4.4" schema-utils "^2.0.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" @@ -12852,6 +12922,11 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -12881,28 +12956,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -13135,6 +13188,11 @@ which-module@^2.0.0: resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + 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.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -13149,13 +13207,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -13433,16 +13484,6 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - xhr@^2.0.1: version "2.5.0" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" @@ -13483,59 +13524,7 @@ xmlbuilder@~9.0.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xo-init@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/xo-init/-/xo-init-0.7.0.tgz#634b4789e366b4f87f747ef0cee1a99ce273aa15" - integrity sha512-mrrCKMu52vz0u2tiOl8DoG709pBtnSp58bb4/j58a4jeXjrb1gV7dxfOBjOlXitYtfW2QnlxxxfAojoFcpynDg== - dependencies: - arrify "^1.0.0" - execa "^0.9.0" - has-yarn "^1.0.0" - minimist "^1.1.3" - path-exists "^3.0.0" - read-pkg-up "^3.0.0" - the-argv "^1.0.0" - write-pkg "^3.1.0" - -xo@0.24.0: - version "0.24.0" - resolved "https://registry.npmjs.org/xo/-/xo-0.24.0.tgz#f931ff453f3440919d51da908591371e8ed714e0" - integrity sha512-eaXWpNtXHbJ+DSiDkdRnDcMYPeUi/MWFUoUgorBhzAueTCM+v4o9Xv6buYgyoL4r7JuTp5EWXx3lGn9Md4dgWA== - dependencies: - arrify "^1.0.1" - debug "^4.1.0" - eslint "^5.12.0" - eslint-config-prettier "^3.3.0" - eslint-config-xo "^0.26.0" - eslint-formatter-pretty "^2.0.0" - eslint-plugin-ava "^5.1.0" - eslint-plugin-eslint-comments "^3.0.1" - eslint-plugin-import "^2.14.0" - eslint-plugin-no-use-extend-native "^0.4.0" - eslint-plugin-node "^8.0.0" - eslint-plugin-prettier "^3.0.0" - eslint-plugin-promise "^4.0.0" - eslint-plugin-unicorn "^7.0.0" - find-cache-dir "^2.0.0" - get-stdin "^6.0.0" - globby "^9.0.0" - has-flag "^3.0.0" - lodash.isequal "^4.5.0" - lodash.mergewith "^4.6.1" - meow "^5.0.0" - multimatch "^3.0.0" - open-editor "^1.2.0" - path-exists "^3.0.0" - pkg-conf "^2.1.0" - prettier "^1.15.2" - resolve-cwd "^2.0.0" - resolve-from "^4.0.0" - semver "^5.5.0" - slash "^2.0.0" - update-notifier "^2.3.0" - xo-init "^0.7.0" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= @@ -13555,13 +13544,6 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -13641,3 +13623,8 @@ yup@^0.27.0: property-expr "^1.5.0" synchronous-promise "^2.0.6" toposort "^2.0.2" + +zepto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" + integrity sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g=