From e3ae0d9473249329a4e3efea147805ce538c045d Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Tue, 29 Oct 2019 18:34:50 +0800 Subject: [PATCH 01/30] improve declaration file --- package.json | 2 +- packages/saber/lib/cli-commands/build.js | 11 +- packages/saber/lib/cli-commands/dev.js | 21 +-- packages/saber/lib/cli-commands/serve.js | 13 +- packages/saber/lib/index.js | 5 +- packages/saber/lib/utils/getPermalink.js | 2 +- packages/saber/lib/utils/inspectWebpack.js | 9 +- packages/saber/lib/utils/validateConfig.js | 1 - .../get-initial-document-data.js | 0 .../vue-renderer}/get-initial-document.js | 0 .../lib => lib/vue-renderer}/index.js | 14 +- .../vue-renderer}/page-prop-loader.js | 2 +- .../lib => lib/vue-renderer}/render-html.js | 0 .../vue-renderer}/saber-page-loader.js | 0 .../template-plugins/__test__/link.test.js | 0 .../vue-renderer}/template-plugins/index.js | 2 +- .../vue-renderer}/template-plugins/link.js | 0 .../transform-template-loader.js | 0 .../lib => lib/vue-renderer}/utils.js | 0 packages/saber/lib/webpack/webpack.config.js | 2 +- packages/saber/package.json | 13 +- packages/saber/tsconfig.json | 9 ++ packages/saber/types/index.d.ts | 23 ++- .../{vue-renderer/app => vue-app}/404.vue | 0 .../saber/vue-app/components/ClientOnly.js | 13 ++ .../components/LayoutManager.vue | 0 .../app => vue-app}/components/SaberLink.js | 25 ++-- .../app => vue-app}/create-app.js | 2 + .../app => vue-app}/dev-client.js | 2 + .../app => vue-app}/entry-client.js | 0 .../app => vue-app}/entry-server.js | 0 .../app => vue-app}/helpers/inject-config.js | 6 +- .../app => vue-app}/helpers/path.js | 29 ++-- .../app => vue-app}/helpers/scroll-handler.js | 2 +- .../app => vue-app}/helpers/set-transition.js | 3 + .../app => vue-app}/polyfills.js | 0 .../{vue-renderer/app => vue-app}/router.js | 7 +- .../app => vue-app}/theme/layouts/default.vue | 0 .../app => vue-app}/utils/is-absolute-url.js | 0 .../app => vue-app}/vendor/promise.js | 0 .../vue-renderer/app/components/ClientOnly.js | 13 -- tsconfig.json => tsconfig.base.json | 2 +- yarn.lock | 141 ++++++++++++++++-- 43 files changed, 269 insertions(+), 105 deletions(-) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/get-initial-document-data.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/get-initial-document.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/index.js (97%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/page-prop-loader.js (95%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/render-html.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/saber-page-loader.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/template-plugins/__test__/link.test.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/template-plugins/index.js (93%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/template-plugins/link.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/transform-template-loader.js (100%) rename packages/saber/{vue-renderer/lib => lib/vue-renderer}/utils.js (100%) create mode 100644 packages/saber/tsconfig.json rename packages/saber/{vue-renderer/app => vue-app}/404.vue (100%) create mode 100644 packages/saber/vue-app/components/ClientOnly.js rename packages/saber/{vue-renderer/app => vue-app}/components/LayoutManager.vue (100%) rename packages/saber/{vue-renderer/app => vue-app}/components/SaberLink.js (70%) rename packages/saber/{vue-renderer/app => vue-app}/create-app.js (99%) rename packages/saber/{vue-renderer/app => vue-app}/dev-client.js (99%) rename packages/saber/{vue-renderer/app => vue-app}/entry-client.js (100%) rename packages/saber/{vue-renderer/app => vue-app}/entry-server.js (100%) rename packages/saber/{vue-renderer/app => vue-app}/helpers/inject-config.js (89%) rename packages/saber/{vue-renderer/app => vue-app}/helpers/path.js (75%) rename packages/saber/{vue-renderer/app => vue-app}/helpers/scroll-handler.js (98%) rename packages/saber/{vue-renderer/app => vue-app}/helpers/set-transition.js (99%) rename packages/saber/{vue-renderer/app => vue-app}/polyfills.js (100%) rename packages/saber/{vue-renderer/app => vue-app}/router.js (95%) rename packages/saber/{vue-renderer/app => vue-app}/theme/layouts/default.vue (100%) rename packages/saber/{vue-renderer/app => vue-app}/utils/is-absolute-url.js (100%) rename packages/saber/{vue-renderer/app => vue-app}/vendor/promise.js (100%) delete mode 100644 packages/saber/vue-renderer/app/components/ClientOnly.js rename tsconfig.json => tsconfig.base.json (100%) diff --git a/package.json b/package.json index 1c7941d22..01ab63f19 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "**/dist/**", "**/vendor/**", "*.min.js", - "**/vue-renderer/app/**", + "**/vue-app/**", "**/example/**", "**/examples/**", "website/**" diff --git a/packages/saber/lib/cli-commands/build.js b/packages/saber/lib/cli-commands/build.js index f7f70164f..f84defd7f 100644 --- a/packages/saber/lib/cli-commands/build.js +++ b/packages/saber/lib/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/lib/cli-commands/dev.js index f9cd03d0d..62e762b30 100644 --- a/packages/saber/lib/cli-commands/dev.js +++ b/packages/saber/lib/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/serve.js b/packages/saber/lib/cli-commands/serve.js index e2f63c441..4c1332e8a 100644 --- a/packages/saber/lib/cli-commands/serve.js +++ b/packages/saber/lib/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/index.js b/packages/saber/lib/index.js index c5c7fbf05..50c40054a 100644 --- a/packages/saber/lib/index.js +++ b/packages/saber/lib/index.js @@ -137,7 +137,7 @@ class Saber { cwd: this.configDir, prefix: 'saber-renderer-' }) - : require('../vue-renderer/lib') + : require('./vue-renderer') this.renderer = new this.RendererClass(this) // Load theme @@ -395,4 +395,5 @@ class Saber { } } -module.exports = (opts, config) => new Saber(opts, config) +exports.createSaber = (opts, config) => new Saber(opts, config) +exports.Saber = Saber diff --git a/packages/saber/lib/utils/getPermalink.js b/packages/saber/lib/utils/getPermalink.js index 43ff1b5bf..1702df5a8 100644 --- a/packages/saber/lib/utils/getPermalink.js +++ b/packages/saber/lib/utils/getPermalink.js @@ -12,7 +12,7 @@ * @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 {import('saber').IPermalinks} permalinks - The `permalinks` config option */ module.exports = (localeNames, page, permalinks) => { if (page.slug === 'index') return '/' diff --git a/packages/saber/lib/utils/inspectWebpack.js b/packages/saber/lib/utils/inspectWebpack.js index efb0c7210..c66d2882d 100644 --- a/packages/saber/lib/utils/inspectWebpack.js +++ b/packages/saber/lib/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/validateConfig.js b/packages/saber/lib/utils/validateConfig.js index 03383be88..7908ed45b 100644 --- a/packages/saber/lib/utils/validateConfig.js +++ b/packages/saber/lib/utils/validateConfig.js @@ -1,4 +1,3 @@ -// @ts-check const { struct } = require('superstruct') /** diff --git a/packages/saber/vue-renderer/lib/get-initial-document-data.js b/packages/saber/lib/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/lib/vue-renderer/get-initial-document-data.js diff --git a/packages/saber/vue-renderer/lib/get-initial-document.js b/packages/saber/lib/vue-renderer/get-initial-document.js similarity index 100% rename from packages/saber/vue-renderer/lib/get-initial-document.js rename to packages/saber/lib/vue-renderer/get-initial-document.js diff --git a/packages/saber/vue-renderer/lib/index.js b/packages/saber/lib/vue-renderer/index.js similarity index 97% rename from packages/saber/vue-renderer/lib/index.js rename to packages/saber/lib/vue-renderer/index.js index 826a0e28c..3f4e72a5b 100644 --- a/packages/saber/vue-renderer/lib/index.js +++ b/packages/saber/lib/vue-renderer/index.js @@ -5,6 +5,10 @@ const { SyncWaterfallHook } = require('tapable') const { readJSON } = require('./utils') const renderHTML = require('./render-html') +function resolveVueApp(...args) { + return path.join(__dirname, '../../vue-app', ...args) +} + const ID = 'vue-renderer' class VueRenderer { @@ -19,7 +23,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 +45,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( @@ -237,7 +241,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')) )}) } } @@ -548,7 +552,7 @@ class VueRenderer { } } -VueRenderer.defaultTheme = path.join(__dirname, '../app/theme') +VueRenderer.defaultTheme = resolveVueApp('theme') module.exports = VueRenderer diff --git a/packages/saber/vue-renderer/lib/page-prop-loader.js b/packages/saber/lib/vue-renderer/page-prop-loader.js similarity index 95% rename from packages/saber/vue-renderer/lib/page-prop-loader.js rename to packages/saber/lib/vue-renderer/page-prop-loader.js index 0ae595e1e..b2e27f6e9 100644 --- a/packages/saber/vue-renderer/lib/page-prop-loader.js +++ b/packages/saber/lib/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() diff --git a/packages/saber/vue-renderer/lib/render-html.js b/packages/saber/lib/vue-renderer/render-html.js similarity index 100% rename from packages/saber/vue-renderer/lib/render-html.js rename to packages/saber/lib/vue-renderer/render-html.js diff --git a/packages/saber/vue-renderer/lib/saber-page-loader.js b/packages/saber/lib/vue-renderer/saber-page-loader.js similarity index 100% rename from packages/saber/vue-renderer/lib/saber-page-loader.js rename to packages/saber/lib/vue-renderer/saber-page-loader.js diff --git a/packages/saber/vue-renderer/lib/template-plugins/__test__/link.test.js b/packages/saber/lib/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/lib/vue-renderer/template-plugins/__test__/link.test.js diff --git a/packages/saber/vue-renderer/lib/template-plugins/index.js b/packages/saber/lib/vue-renderer/template-plugins/index.js similarity index 93% rename from packages/saber/vue-renderer/lib/template-plugins/index.js rename to packages/saber/lib/vue-renderer/template-plugins/index.js index 80f0aa74b..a0d09e9bc 100644 --- a/packages/saber/vue-renderer/lib/template-plugins/index.js +++ b/packages/saber/lib/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/lib/vue-renderer/template-plugins/link.js similarity index 100% rename from packages/saber/vue-renderer/lib/template-plugins/link.js rename to packages/saber/lib/vue-renderer/template-plugins/link.js diff --git a/packages/saber/vue-renderer/lib/transform-template-loader.js b/packages/saber/lib/vue-renderer/transform-template-loader.js similarity index 100% rename from packages/saber/vue-renderer/lib/transform-template-loader.js rename to packages/saber/lib/vue-renderer/transform-template-loader.js diff --git a/packages/saber/vue-renderer/lib/utils.js b/packages/saber/lib/vue-renderer/utils.js similarity index 100% rename from packages/saber/vue-renderer/lib/utils.js rename to packages/saber/lib/vue-renderer/utils.js diff --git a/packages/saber/lib/webpack/webpack.config.js b/packages/saber/lib/webpack/webpack.config.js index 3692227ae..47653fe64 100644 --- a/packages/saber/lib/webpack/webpack.config.js +++ b/packages/saber/lib/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/package.json b/packages/saber/package.json index 574cb7921..eaee9a51b 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -3,16 +3,13 @@ "version": "0.10.4", "description": "A simple yet powerful static site generator", "files": [ - "bin", - "lib", - "!**/*.test.js", - "!**/__*__/**", + "/babel.js", "/types", - "/vue-renderer", - "/babel.js" + "/lib", + "/vue-app" ], "scripts": { - "test": "jest --env node" + "test": "tsc && jest --env node" }, "main": "lib/index.js", "bin": "lib/cli.js", @@ -79,7 +76,7 @@ "@types/webpack": "4.39.1", "jest": "24.9.0", "markdown-it-footnote": "3.0.2", - "typescript": "3.6.3" + "typescript": "^3.8.0-dev.20191029" }, "xo": false, "engines": { diff --git a/packages/saber/tsconfig.json b/packages/saber/tsconfig.json new file mode 100644 index 000000000..75a8c33ff --- /dev/null +++ b/packages/saber/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["types/*.d.ts", "lib"], + "exclude": ["node_modules", "**/__test__/**"], + "compilerOptions": { + "outDir": "dist", + "lib": ["esnext", "dom"] + } +} diff --git a/packages/saber/types/index.d.ts b/packages/saber/types/index.d.ts index 4af24b50b..6718debd6 100644 --- a/packages/saber/types/index.d.ts +++ b/packages/saber/types/index.d.ts @@ -1,5 +1,11 @@ declare module 'saber' { - interface Config { + interface ISaberOptions { + cwd?: string + dev?: boolean + verbose?: boolean + } + + interface ISaberConfig { siteConfig?: { [k: string]: any } @@ -8,7 +14,7 @@ declare module 'saber' { [k: string]: any } - permalinks?: Permalinks | ((page: Page) => Permalinks) + permalinks?: IPermalinks | ((page: IPage) => IPermalinks) build?: { /** @@ -48,11 +54,11 @@ declare module 'saber' { } } - interface Permalinks { + export interface IPermalinks { [pageType: string]: string } - interface Page { + export interface IPage { type: string layout?: string createdAt: Date @@ -71,7 +77,7 @@ declare module 'saber' { [k: string]: any } - type Plugin = + type SaberPlugin = | string | { /** The path to your plugin or an npm package name */ @@ -87,5 +93,10 @@ declare module 'saber' { options?: any } - export { Config, Permalinks } + export interface ISaber {} + + export const createSaber: ( + options: ISaberOptions, + config: ISaberConfig + ) => ISaber } 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 100% rename from tsconfig.json rename to tsconfig.base.json index 0e6bfadf0..43bf91b6f 100644 --- a/tsconfig.json +++ b/tsconfig.base.json @@ -2,8 +2,8 @@ "compilerOptions": { "strict": true, "allowJs": true, - "noEmit": true, "lib": ["es2017"], + "noEmit": true, "module": "commonjs", "target": "es2015", "esModuleInterop": true, diff --git a/yarn.lock b/yarn.lock index f4378f952..c178012ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1938,6 +1938,54 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@microsoft/api-extractor-model@7.5.2": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.5.2.tgz#39a3c015ca01a3435b5f161b8fce07117e6039be" + integrity sha512-wDXQ6IvrVg7tp3iqA+7f7yrSzjUPQ2kVNKsrxD5AqbGeohsJYePbmWvz6V8yxxO7ZuM9W7V5zLY6pYh4epq8Dg== + dependencies: + "@microsoft/node-core-library" "3.16.0" + "@microsoft/tsdoc" "0.12.14" + +"@microsoft/api-extractor@^7.5.2": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.5.2.tgz#4da588e71c6342ec66b6b087a471aa773a232c81" + integrity sha512-IGMpxhiTaUsGGdrGqCwhwGbyJNMwrVe0wi3vYqFL0G93N+DO2uI89/JNGxaiGjgQ8nCem6u8hPd0NhOcGU6DcA== + dependencies: + "@microsoft/api-extractor-model" "7.5.2" + "@microsoft/node-core-library" "3.16.0" + "@microsoft/ts-command-line" "4.3.4" + "@microsoft/tsdoc" "0.12.14" + colors "~1.2.1" + lodash "~4.17.15" + resolve "1.8.1" + source-map "~0.6.1" + typescript "~3.5.3" + +"@microsoft/node-core-library@3.16.0": + version "3.16.0" + resolved "https://registry.yarnpkg.com/@microsoft/node-core-library/-/node-core-library-3.16.0.tgz#cdd3a27b1513cb470d1098ba32d50ca22a1fb75c" + integrity sha512-zjgOAmOhWgE5eX8ofmRagcomeIhs96GizRm7m9UfAuzhEmWtQSOE33/WpZzoyw41S/bjevHi7YbkY+R70mdjFg== + dependencies: + "@types/node" "8.10.54" + colors "~1.2.1" + fs-extra "~7.0.1" + jju "~1.4.0" + z-schema "~3.18.3" + +"@microsoft/ts-command-line@4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@microsoft/ts-command-line/-/ts-command-line-4.3.4.tgz#a52214bd86f6d65c8975f46e6b12fad68545058a" + integrity sha512-PNqh7tACiOaM3znLX2EjECbabk0PfChEn6lMzrC62+xtV2Xr0N0dj1PtvDX125cxxF4FNcWoZqCODzJI/cB0GA== + dependencies: + "@types/argparse" "1.0.33" + argparse "~1.0.9" + colors "~1.2.1" + +"@microsoft/tsdoc@0.12.14": + version "0.12.14" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.14.tgz#0e0810a0a174e50e22dfe8edb30599840712f22d" + integrity sha512-518yewjSga1jLdiLrcmpMFlaba5P+50b0TWNFUpC+SL9Yzf0kMi57qw+bMl+rQ08cGqH1vLx4eg9YFUbZXgZ0Q== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -2033,6 +2081,11 @@ resolved "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff" integrity sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ== +"@types/argparse@1.0.33": + version "1.0.33" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.33.tgz#2728669427cdd74a99e53c9f457ca2866a37c52d" + integrity sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== + "@types/babel-types@*", "@types/babel-types@^7.0.0": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" @@ -2134,6 +2187,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== +"@types/node@8.10.54": + version "8.10.54" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.54.tgz#1c88eb253ac1210f1a5876953fb70f7cc4928402" + integrity sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -2629,7 +2687,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7: +argparse@^1.0.7, argparse@~1.0.9: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -3688,6 +3746,11 @@ colors@~1.1.2: resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= +colors@~1.2.1: + version "1.2.5" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" + integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -3708,6 +3771,11 @@ commander@^2.14.1, commander@^2.20.0, commander@^2.9.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.7.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@~2.8.1: version "2.8.1" resolved "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -5848,6 +5916,15 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@~7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -7672,6 +7749,11 @@ jimp@^0.8.0: core-js "^2.5.7" regenerator-runtime "^0.13.3" +jju@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= + joycon@^2.2.4: version "2.2.5" resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" @@ -8145,12 +8227,12 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.get@^4.4.2: +lodash.get@^4.0.0, lodash.get@^4.4.2: version "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: +lodash.isequal@^4.0.0, 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= @@ -8235,7 +8317,7 @@ lodash@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.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: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -9733,7 +9815,7 @@ path-key@^3.0.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== -path-parse@^1.0.6: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -11115,6 +11197,13 @@ resolve@1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + dependencies: + path-parse "^1.0.5" + 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: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -11213,7 +11302,7 @@ rollup-plugin-babel@4.3.3: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.8.1" -rollup-plugin-commonjs@10.1.0: +rollup-plugin-commonjs@10.1.0, rollup-plugin-commonjs@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== @@ -11224,7 +11313,7 @@ rollup-plugin-commonjs@10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" -rollup-plugin-json@4.0.0: +rollup-plugin-json@4.0.0, rollup-plugin-json@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== @@ -11269,6 +11358,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" @@ -12533,10 +12631,15 @@ 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== +typescript@^3.8.0-dev.20191029: + version "3.8.0-dev.20191029" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.0-dev.20191029.tgz#040e1f1a5486b014c865279b48b43b76c705bc90" + integrity sha512-1UykrsbCDggb3mmqUaUkXO7iYvQun6cd57kCGAOG/aFv/4yn0h3VpLZCVTb4Ycn5wentgiPIwKSQ7wERImDoIw== + +typescript@~3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.5" @@ -12867,6 +12970,11 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validator@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" + integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== + vendors@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" @@ -13641,3 +13749,14 @@ yup@^0.27.0: property-expr "^1.5.0" synchronous-promise "^2.0.6" toposort "^2.0.2" + +z-schema@~3.18.3: + version "3.18.4" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" + integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== + dependencies: + lodash.get "^4.0.0" + lodash.isequal "^4.0.0" + validator "^8.0.0" + optionalDependencies: + commander "^2.7.1" From ae947d4b731de647dd1ccf58b5d6c884e887d073 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 15:30:45 +0800 Subject: [PATCH 02/30] type check parseAttributes.js --- packages/saber/lib/utils/parseAttributes.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/saber/lib/utils/parseAttributes.js b/packages/saber/lib/utils/parseAttributes.js index 4ec4f9bdb..6d9273166 100644 --- a/packages/saber/lib/utils/parseAttributes.js +++ b/packages/saber/lib/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 && From a01e9c0f378c86892bed7778dc8c6887e30eedad Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 16:22:10 +0800 Subject: [PATCH 03/30] type check parseFrontmatter.js --- packages/saber-log/{ => lib}/colors.js | 0 packages/saber-log/{ => lib}/index.js | 41 +++++- packages/saber-log/package.json | 11 +- packages/saber-log/tsconfig.json | 8 ++ packages/saber-log/types/colors.d.ts | 42 ++++++ packages/saber-log/types/index.d.ts | 98 ++++++++++++++ packages/saber/lib/utils/parseFrontmatter.js | 22 ++- yarn.lock | 133 +------------------ 8 files changed, 224 insertions(+), 131 deletions(-) rename packages/saber-log/{ => lib}/colors.js (100%) rename packages/saber-log/{ => lib}/index.js (68%) create mode 100644 packages/saber-log/tsconfig.json create mode 100644 packages/saber-log/types/colors.d.ts create mode 100644 packages/saber-log/types/index.d.ts diff --git a/packages/saber-log/colors.js b/packages/saber-log/lib/colors.js similarity index 100% rename from packages/saber-log/colors.js rename to packages/saber-log/lib/colors.js diff --git a/packages/saber-log/index.js b/packages/saber-log/lib/index.js similarity index 68% rename from packages/saber-log/index.js rename to packages/saber-log/lib/index.js index 41d3aef35..6289721d2 100644 --- a/packages/saber-log/index.js +++ b/packages/saber-log/lib/index.js @@ -1,3 +1,4 @@ +// @ts-check const colors = require('./colors') const chars = { @@ -7,13 +8,27 @@ const chars = { error: colors.red('error') } +/** + * Check if a value is `undefined` + * @param {any} n + * @returns {boolean} + */ const defined = n => typeof n !== 'undefined' +/** + * @typedef {Object} ILogConstructorOptions + * @property {number=} logLevel + */ + class Log { constructor() { - this.setOptions() + /** @type {ILogConstructorOptions} */ + this.options = {} } + /** + * @param {ILogConstructorOptions} options + */ setOptions(options) { this.options = Object.assign({}, this.options, options) } @@ -32,10 +47,18 @@ class Log { return Number(logLevel) } + /** + * Log anything using `console.log` + * @param {...any} args + */ log(...args) { console.log(...args) } + /** + * Verbose logs + * @param {...any} args + */ verbose(...args) { if (this.logLevel < 4) return @@ -43,24 +66,40 @@ class Log { this.log(colors.dim('[verbose]'), ...messages) } + /** + * Info logs + * @param {...any} args + */ info(...args) { if (this.logLevel < 3) return this.log(`[${chars.info}]`, ...args) } + /** + * Warning logs + * @param {...any} args + */ warn(...args) { if (this.logLevel < 2) return this.log(`[${chars.warning}]`, ...args) } + /** + * Error logs + * @param {...any} args + */ error(...args) { if (this.logLevel < 1) return this.log(`[${chars.error}]`, ...args) } + /** + * Success logs + * @param {...any} args + */ success(...args) { if (this.logLevel < 3) return diff --git a/packages/saber-log/package.json b/packages/saber-log/package.json index a50a4fb65..a72382137 100644 --- a/packages/saber-log/package.json +++ b/packages/saber-log/package.json @@ -1,9 +1,14 @@ { "name": "saber-log", "version": "0.3.0", + "main": "lib/index.js", + "types": "types/index.d.ts", "files": [ - "index.js", - "colors.js" + "lib", + "types/index.d.ts" ], - "license": "MIT" + "license": "MIT", + "scripts": { + "types": "tsc --declarationDir types -d" + } } diff --git a/packages/saber-log/tsconfig.json b/packages/saber-log/tsconfig.json new file mode 100644 index 000000000..6146aef5f --- /dev/null +++ b/packages/saber-log/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["lib"], + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true + } +} diff --git a/packages/saber-log/types/colors.d.ts b/packages/saber-log/types/colors.d.ts new file mode 100644 index 000000000..8d968edf2 --- /dev/null +++ b/packages/saber-log/types/colors.d.ts @@ -0,0 +1,42 @@ +export declare const options: any; +export declare function reset(s: any): any; +export declare function bold(s: any): any; +export declare function dim(s: any): any; +export declare function italic(s: any): any; +export declare function underline(s: any): any; +export declare function inverse(s: any): any; +export declare function hidden(s: any): any; +export declare function strikethrough(s: any): any; +export declare function black(s: any): any; +export declare function red(s: any): any; +export declare function green(s: any): any; +export declare function yellow(s: any): any; +export declare function blue(s: any): any; +export declare function magenta(s: any): any; +export declare function cyan(s: any): any; +export declare function white(s: any): any; +export declare function gray(s: any): any; +export declare function bgBlack(s: any): any; +export declare function bgRed(s: any): any; +export declare function bgGreen(s: any): any; +export declare function bgYellow(s: any): any; +export declare function bgBlue(s: any): any; +export declare function bgMagenta(s: any): any; +export declare function bgCyan(s: any): any; +export declare function bgWhite(s: any): any; +export declare function blackBright(s: any): any; +export declare function redBright(s: any): any; +export declare function greenBright(s: any): any; +export declare function yellowBright(s: any): any; +export declare function blueBright(s: any): any; +export declare function magentaBright(s: any): any; +export declare function cyanBright(s: any): any; +export declare function whiteBright(s: any): any; +export declare function bgBlackBright(s: any): any; +export declare function bgRedBright(s: any): any; +export declare function bgGreenBright(s: any): any; +export declare function bgYellowBright(s: any): any; +export declare function bgBlueBright(s: any): any; +export declare function bgMagentaBright(s: any): any; +export declare function bgCyanBright(s: any): any; +export declare function bgWhiteBright(s: any): any; diff --git a/packages/saber-log/types/index.d.ts b/packages/saber-log/types/index.d.ts new file mode 100644 index 000000000..7a6746a7b --- /dev/null +++ b/packages/saber-log/types/index.d.ts @@ -0,0 +1,98 @@ +export type IOptions = { + logLevel?: number | undefined; +}; +/** + * @typedef {Object} IOptions + * @property {number=} logLevel + */ +declare class Log { + /** @type {IOptions} */ + options: IOptions; + /** + * @param {IOptions} options + */ + setOptions(options: IOptions): void; + get logLevel(): number; + /** + * Log anything using `console.log` + * @param {...any} args + */ + log(...args: any[]): void; + /** + * Verbose logs + * @param {...any} args + */ + verbose(...args: any[]): void; + /** + * Info logs + * @param {...any} args + */ + info(...args: any[]): void; + /** + * Warning logs + * @param {...any} args + */ + warn(...args: any[]): void; + /** + * Error logs + * @param {...any} args + */ + error(...args: any[]): void; + /** + * Success logs + * @param {...any} args + */ + success(...args: any[]): void; +} +export const colors: { + options: any; + reset: (s: any) => any; + bold: (s: any) => any; + dim: (s: any) => any; + italic: (s: any) => any; + underline: (s: any) => any; + inverse: (s: any) => any; + hidden: (s: any) => any; + strikethrough: (s: any) => any; + black: (s: any) => any; + red: (s: any) => any; + green: (s: any) => any; + yellow: (s: any) => any; + blue: (s: any) => any; + magenta: (s: any) => any; + cyan: (s: any) => any; + white: (s: any) => any; + gray: (s: any) => any; + bgBlack: (s: any) => any; + bgRed: (s: any) => any; + bgGreen: (s: any) => any; + bgYellow: (s: any) => any; + bgBlue: (s: any) => any; + bgMagenta: (s: any) => any; + bgCyan: (s: any) => any; + bgWhite: (s: any) => any; + blackBright: (s: any) => any; + redBright: (s: any) => any; + greenBright: (s: any) => any; + yellowBright: (s: any) => any; + blueBright: (s: any) => any; + magentaBright: (s: any) => any; + cyanBright: (s: any) => any; + whiteBright: (s: any) => any; + bgBlackBright: (s: any) => any; + bgRedBright: (s: any) => any; + bgGreenBright: (s: any) => any; + bgYellowBright: (s: any) => any; + bgBlueBright: (s: any) => any; + bgMagentaBright: (s: any) => any; + bgCyanBright: (s: any) => any; + bgWhiteBright: (s: any) => any; +}; +export namespace chars { + export const info: any; + export const success: any; + export const warning: any; + export const error: any; +} +export declare const log: Log; +export {}; diff --git a/packages/saber/lib/utils/parseFrontmatter.js b/packages/saber/lib/utils/parseFrontmatter.js index 6fb386b8d..4310f9461 100644 --- a/packages/saber/lib/utils/parseFrontmatter.js +++ b/packages/saber/lib/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/yarn.lock b/yarn.lock index c178012ab..f18d51f92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1938,54 +1938,6 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" -"@microsoft/api-extractor-model@7.5.2": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.5.2.tgz#39a3c015ca01a3435b5f161b8fce07117e6039be" - integrity sha512-wDXQ6IvrVg7tp3iqA+7f7yrSzjUPQ2kVNKsrxD5AqbGeohsJYePbmWvz6V8yxxO7ZuM9W7V5zLY6pYh4epq8Dg== - dependencies: - "@microsoft/node-core-library" "3.16.0" - "@microsoft/tsdoc" "0.12.14" - -"@microsoft/api-extractor@^7.5.2": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.5.2.tgz#4da588e71c6342ec66b6b087a471aa773a232c81" - integrity sha512-IGMpxhiTaUsGGdrGqCwhwGbyJNMwrVe0wi3vYqFL0G93N+DO2uI89/JNGxaiGjgQ8nCem6u8hPd0NhOcGU6DcA== - dependencies: - "@microsoft/api-extractor-model" "7.5.2" - "@microsoft/node-core-library" "3.16.0" - "@microsoft/ts-command-line" "4.3.4" - "@microsoft/tsdoc" "0.12.14" - colors "~1.2.1" - lodash "~4.17.15" - resolve "1.8.1" - source-map "~0.6.1" - typescript "~3.5.3" - -"@microsoft/node-core-library@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@microsoft/node-core-library/-/node-core-library-3.16.0.tgz#cdd3a27b1513cb470d1098ba32d50ca22a1fb75c" - integrity sha512-zjgOAmOhWgE5eX8ofmRagcomeIhs96GizRm7m9UfAuzhEmWtQSOE33/WpZzoyw41S/bjevHi7YbkY+R70mdjFg== - dependencies: - "@types/node" "8.10.54" - colors "~1.2.1" - fs-extra "~7.0.1" - jju "~1.4.0" - z-schema "~3.18.3" - -"@microsoft/ts-command-line@4.3.4": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@microsoft/ts-command-line/-/ts-command-line-4.3.4.tgz#a52214bd86f6d65c8975f46e6b12fad68545058a" - integrity sha512-PNqh7tACiOaM3znLX2EjECbabk0PfChEn6lMzrC62+xtV2Xr0N0dj1PtvDX125cxxF4FNcWoZqCODzJI/cB0GA== - dependencies: - "@types/argparse" "1.0.33" - argparse "~1.0.9" - colors "~1.2.1" - -"@microsoft/tsdoc@0.12.14": - version "0.12.14" - resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.12.14.tgz#0e0810a0a174e50e22dfe8edb30599840712f22d" - integrity sha512-518yewjSga1jLdiLrcmpMFlaba5P+50b0TWNFUpC+SL9Yzf0kMi57qw+bMl+rQ08cGqH1vLx4eg9YFUbZXgZ0Q== - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -2081,11 +2033,6 @@ resolved "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff" integrity sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ== -"@types/argparse@1.0.33": - version "1.0.33" - resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.33.tgz#2728669427cdd74a99e53c9f457ca2866a37c52d" - integrity sha512-VQgHxyPMTj3hIlq9SY1mctqx+Jj8kpQfoLvDlVSDNOyuYs8JYfkuY3OW/4+dO657yPmNhHpePRx0/Tje5ImNVQ== - "@types/babel-types@*", "@types/babel-types@^7.0.0": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" @@ -2187,11 +2134,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== -"@types/node@8.10.54": - version "8.10.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.54.tgz#1c88eb253ac1210f1a5876953fb70f7cc4928402" - integrity sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg== - "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -2687,7 +2629,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7, argparse@~1.0.9: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -3746,11 +3688,6 @@ colors@~1.1.2: resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= -colors@~1.2.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc" - integrity sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg== - columnify@^1.5.4: version "1.5.4" resolved "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -3771,11 +3708,6 @@ commander@^2.14.1, commander@^2.20.0, commander@^2.9.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^2.7.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - commander@~2.8.1: version "2.8.1" resolved "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -5916,15 +5848,6 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@~7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -7749,11 +7672,6 @@ jimp@^0.8.0: core-js "^2.5.7" regenerator-runtime "^0.13.3" -jju@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" - integrity sha1-o6vicYryQaKykE+EpiWXDzia4yo= - joycon@^2.2.4: version "2.2.5" resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" @@ -8227,12 +8145,12 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.get@^4.0.0, lodash.get@^4.4.2: +lodash.get@^4.4.2: version "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.0.0, lodash.isequal@^4.5.0: +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= @@ -8317,7 +8235,7 @@ lodash@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.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: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -9815,7 +9733,7 @@ path-key@^3.0.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== -path-parse@^1.0.5, path-parse@^1.0.6: +path-parse@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -11197,13 +11115,6 @@ resolve@1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== - dependencies: - path-parse "^1.0.5" - 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: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -11302,7 +11213,7 @@ rollup-plugin-babel@4.3.3: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.8.1" -rollup-plugin-commonjs@10.1.0, rollup-plugin-commonjs@^10.1.0: +rollup-plugin-commonjs@10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== @@ -11313,7 +11224,7 @@ rollup-plugin-commonjs@10.1.0, rollup-plugin-commonjs@^10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" -rollup-plugin-json@4.0.0, rollup-plugin-json@^4.0.0: +rollup-plugin-json@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== @@ -11358,15 +11269,6 @@ 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" @@ -12636,11 +12538,6 @@ typescript@^3.8.0-dev.20191029: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.0-dev.20191029.tgz#040e1f1a5486b014c865279b48b43b76c705bc90" integrity sha512-1UykrsbCDggb3mmqUaUkXO7iYvQun6cd57kCGAOG/aFv/4yn0h3VpLZCVTb4Ycn5wentgiPIwKSQ7wERImDoIw== -typescript@~3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" @@ -12970,11 +12867,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -validator@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-8.2.0.tgz#3c1237290e37092355344fef78c231249dab77b9" - integrity sha512-Yw5wW34fSv5spzTXNkokD6S6/Oq92d8q/t14TqsS3fAiA1RYnxSFSIZ+CY3n6PGGRCq5HhJTSepQvFUS2QUDxA== - vendors@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" @@ -13749,14 +13641,3 @@ yup@^0.27.0: property-expr "^1.5.0" synchronous-promise "^2.0.6" toposort "^2.0.2" - -z-schema@~3.18.3: - version "3.18.4" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.4.tgz#ea8132b279533ee60be2485a02f7e3e42541a9a2" - integrity sha512-DUOKC/IhbkdLKKiV89gw9DUauTV8U/8yJl1sjf6MtDmzevLKOF2duNJ495S3MFVjqZarr+qNGCPbkg4mu4PpLw== - dependencies: - lodash.get "^4.0.0" - lodash.isequal "^4.0.0" - validator "^8.0.0" - optionalDependencies: - commander "^2.7.1" From 0a5bd63a14e2d05bf9c8ccc0b17cc57926503231 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 16:31:33 +0800 Subject: [PATCH 04/30] type check parseFrontmatter.js --- .gitignore | 1 + package.json | 1 + packages/saber-log/lib/index.js | 10 +-- packages/saber-log/package.json | 1 + packages/saber-log/types/colors.d.ts | 42 ------------ packages/saber-log/types/index.d.ts | 98 ---------------------------- packages/saber/package.json | 3 +- yarn.lock | 8 +-- 8 files changed, 13 insertions(+), 151 deletions(-) delete mode 100644 packages/saber-log/types/colors.d.ts delete mode 100644 packages/saber-log/types/index.d.ts diff --git a/.gitignore b/.gitignore index 758e78869..87f9575ca 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ public .DS_Store examples/*/yarn.lock examples/*/package-lock.json +packages/saber-log/types diff --git a/package.json b/package.json index 01ab63f19..b023de95d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "lerna": "3.16.4", "lint-staged": "8.1.6", "prettier": "1.18.2", + "typescript": "^3.8.0-dev.20191031", "xo": "0.24.0" }, "xo": { diff --git a/packages/saber-log/lib/index.js b/packages/saber-log/lib/index.js index 6289721d2..bdb87f0d9 100644 --- a/packages/saber-log/lib/index.js +++ b/packages/saber-log/lib/index.js @@ -8,6 +8,11 @@ const chars = { error: colors.red('error') } +/** + * @typedef {Object} ILogConstructorOptions + * @property {number=} logLevel + */ + /** * Check if a value is `undefined` * @param {any} n @@ -15,11 +20,6 @@ const chars = { */ const defined = n => typeof n !== 'undefined' -/** - * @typedef {Object} ILogConstructorOptions - * @property {number=} logLevel - */ - class Log { constructor() { /** @type {ILogConstructorOptions} */ diff --git a/packages/saber-log/package.json b/packages/saber-log/package.json index a72382137..7b2695c9b 100644 --- a/packages/saber-log/package.json +++ b/packages/saber-log/package.json @@ -9,6 +9,7 @@ ], "license": "MIT", "scripts": { + "prepublishOnly": "yarn types", "types": "tsc --declarationDir types -d" } } diff --git a/packages/saber-log/types/colors.d.ts b/packages/saber-log/types/colors.d.ts deleted file mode 100644 index 8d968edf2..000000000 --- a/packages/saber-log/types/colors.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -export declare const options: any; -export declare function reset(s: any): any; -export declare function bold(s: any): any; -export declare function dim(s: any): any; -export declare function italic(s: any): any; -export declare function underline(s: any): any; -export declare function inverse(s: any): any; -export declare function hidden(s: any): any; -export declare function strikethrough(s: any): any; -export declare function black(s: any): any; -export declare function red(s: any): any; -export declare function green(s: any): any; -export declare function yellow(s: any): any; -export declare function blue(s: any): any; -export declare function magenta(s: any): any; -export declare function cyan(s: any): any; -export declare function white(s: any): any; -export declare function gray(s: any): any; -export declare function bgBlack(s: any): any; -export declare function bgRed(s: any): any; -export declare function bgGreen(s: any): any; -export declare function bgYellow(s: any): any; -export declare function bgBlue(s: any): any; -export declare function bgMagenta(s: any): any; -export declare function bgCyan(s: any): any; -export declare function bgWhite(s: any): any; -export declare function blackBright(s: any): any; -export declare function redBright(s: any): any; -export declare function greenBright(s: any): any; -export declare function yellowBright(s: any): any; -export declare function blueBright(s: any): any; -export declare function magentaBright(s: any): any; -export declare function cyanBright(s: any): any; -export declare function whiteBright(s: any): any; -export declare function bgBlackBright(s: any): any; -export declare function bgRedBright(s: any): any; -export declare function bgGreenBright(s: any): any; -export declare function bgYellowBright(s: any): any; -export declare function bgBlueBright(s: any): any; -export declare function bgMagentaBright(s: any): any; -export declare function bgCyanBright(s: any): any; -export declare function bgWhiteBright(s: any): any; diff --git a/packages/saber-log/types/index.d.ts b/packages/saber-log/types/index.d.ts deleted file mode 100644 index 7a6746a7b..000000000 --- a/packages/saber-log/types/index.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -export type IOptions = { - logLevel?: number | undefined; -}; -/** - * @typedef {Object} IOptions - * @property {number=} logLevel - */ -declare class Log { - /** @type {IOptions} */ - options: IOptions; - /** - * @param {IOptions} options - */ - setOptions(options: IOptions): void; - get logLevel(): number; - /** - * Log anything using `console.log` - * @param {...any} args - */ - log(...args: any[]): void; - /** - * Verbose logs - * @param {...any} args - */ - verbose(...args: any[]): void; - /** - * Info logs - * @param {...any} args - */ - info(...args: any[]): void; - /** - * Warning logs - * @param {...any} args - */ - warn(...args: any[]): void; - /** - * Error logs - * @param {...any} args - */ - error(...args: any[]): void; - /** - * Success logs - * @param {...any} args - */ - success(...args: any[]): void; -} -export const colors: { - options: any; - reset: (s: any) => any; - bold: (s: any) => any; - dim: (s: any) => any; - italic: (s: any) => any; - underline: (s: any) => any; - inverse: (s: any) => any; - hidden: (s: any) => any; - strikethrough: (s: any) => any; - black: (s: any) => any; - red: (s: any) => any; - green: (s: any) => any; - yellow: (s: any) => any; - blue: (s: any) => any; - magenta: (s: any) => any; - cyan: (s: any) => any; - white: (s: any) => any; - gray: (s: any) => any; - bgBlack: (s: any) => any; - bgRed: (s: any) => any; - bgGreen: (s: any) => any; - bgYellow: (s: any) => any; - bgBlue: (s: any) => any; - bgMagenta: (s: any) => any; - bgCyan: (s: any) => any; - bgWhite: (s: any) => any; - blackBright: (s: any) => any; - redBright: (s: any) => any; - greenBright: (s: any) => any; - yellowBright: (s: any) => any; - blueBright: (s: any) => any; - magentaBright: (s: any) => any; - cyanBright: (s: any) => any; - whiteBright: (s: any) => any; - bgBlackBright: (s: any) => any; - bgRedBright: (s: any) => any; - bgGreenBright: (s: any) => any; - bgYellowBright: (s: any) => any; - bgBlueBright: (s: any) => any; - bgMagentaBright: (s: any) => any; - bgCyanBright: (s: any) => any; - bgWhiteBright: (s: any) => any; -}; -export namespace chars { - export const info: any; - export const success: any; - export const warning: any; - export const error: any; -} -export declare const log: Log; -export {}; diff --git a/packages/saber/package.json b/packages/saber/package.json index eaee9a51b..b0d9422df 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -75,8 +75,7 @@ "@types/superstruct": "0.5.0", "@types/webpack": "4.39.1", "jest": "24.9.0", - "markdown-it-footnote": "3.0.2", - "typescript": "^3.8.0-dev.20191029" + "markdown-it-footnote": "3.0.2" }, "xo": false, "engines": { diff --git a/yarn.lock b/yarn.lock index f18d51f92..819098b08 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12533,10 +12533,10 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.8.0-dev.20191029: - version "3.8.0-dev.20191029" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.0-dev.20191029.tgz#040e1f1a5486b014c865279b48b43b76c705bc90" - integrity sha512-1UykrsbCDggb3mmqUaUkXO7iYvQun6cd57kCGAOG/aFv/4yn0h3VpLZCVTb4Ycn5wentgiPIwKSQ7wERImDoIw== +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" From 93abee1ffa294966c9e71c6a4b42fe24cda847b2 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 16:45:21 +0800 Subject: [PATCH 05/30] convert saber-log to typescript --- .gitignore | 1 - packages/saber-log/package.json | 15 +++--- packages/saber-log/rollup.config.js | 16 +++++++ .../{lib/colors.js => src/colors.ts} | 3 +- .../saber-log/{lib/index.js => src/index.ts} | 47 ++++++++----------- packages/saber-log/tsconfig.json | 5 +- yarn.lock | 29 +++++++++++- 7 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 packages/saber-log/rollup.config.js rename packages/saber-log/{lib/colors.js => src/colors.ts} (97%) rename packages/saber-log/{lib/index.js => src/index.ts} (68%) diff --git a/.gitignore b/.gitignore index 87f9575ca..758e78869 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ public .DS_Store examples/*/yarn.lock examples/*/package-lock.json -packages/saber-log/types diff --git a/packages/saber-log/package.json b/packages/saber-log/package.json index 7b2695c9b..7111f6af0 100644 --- a/packages/saber-log/package.json +++ b/packages/saber-log/package.json @@ -1,15 +1,18 @@ { "name": "saber-log", "version": "0.3.0", - "main": "lib/index.js", - "types": "types/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ - "lib", - "types/index.d.ts" + "dist" ], "license": "MIT", "scripts": { - "prepublishOnly": "yarn types", - "types": "tsc --declarationDir types -d" + "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/lib/colors.js b/packages/saber-log/src/colors.ts similarity index 97% rename from packages/saber-log/lib/colors.js rename to packages/saber-log/src/colors.ts index c1c43f36f..9c7940c21 100644 --- a/packages/saber-log/lib/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/lib/index.js b/packages/saber-log/src/index.ts similarity index 68% rename from packages/saber-log/lib/index.js rename to packages/saber-log/src/index.ts index bdb87f0d9..0b74531e1 100644 --- a/packages/saber-log/lib/index.js +++ b/packages/saber-log/src/index.ts @@ -1,5 +1,4 @@ -// @ts-check -const colors = require('./colors') +import { colors } from './colors' const chars = { info: colors.cyan('info'), @@ -8,28 +7,24 @@ const chars = { error: colors.red('error') } -/** - * @typedef {Object} ILogConstructorOptions - * @property {number=} logLevel - */ +interface ILogConstructorOptions { + logLevel?: number +} + /** * Check if a value is `undefined` - * @param {any} n - * @returns {boolean} */ -const defined = n => typeof n !== 'undefined' +const defined = (n: any) => typeof n !== 'undefined' class Log { + options: ILogConstructorOptions + constructor() { - /** @type {ILogConstructorOptions} */ this.options = {} } - /** - * @param {ILogConstructorOptions} options - */ - setOptions(options) { + setOptions(options: ILogConstructorOptions) { this.options = Object.assign({}, this.options, options) } @@ -49,17 +44,15 @@ class Log { /** * Log anything using `console.log` - * @param {...any} args */ - log(...args) { + log(...args: any[]) { console.log(...args) } /** * Verbose logs - * @param {...any} args */ - verbose(...args) { + verbose(...args: any[]) { if (this.logLevel < 4) return const messages = args.map(arg => (typeof arg === 'function' ? arg() : arg)) @@ -68,9 +61,8 @@ class Log { /** * Info logs - * @param {...any} args */ - info(...args) { + info(...args: any[]) { if (this.logLevel < 3) return this.log(`[${chars.info}]`, ...args) @@ -78,9 +70,8 @@ class Log { /** * Warning logs - * @param {...any} args */ - warn(...args) { + warn(...args: any[]) { if (this.logLevel < 2) return this.log(`[${chars.warning}]`, ...args) @@ -88,9 +79,8 @@ class Log { /** * Error logs - * @param {...any} args */ - error(...args) { + error(...args: any[]) { if (this.logLevel < 1) return this.log(`[${chars.error}]`, ...args) @@ -98,17 +88,18 @@ class Log { /** * Success logs - * @param {...any} args */ - success(...args) { + 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 index 6146aef5f..3e17d8531 100644 --- a/packages/saber-log/tsconfig.json +++ b/packages/saber-log/tsconfig.json @@ -1,8 +1,7 @@ { "extends": "../../tsconfig.base.json", - "include": ["lib"], + "include": ["src"], "compilerOptions": { - "noEmit": false, - "emitDeclarationOnly": true + "module": "esnext" } } diff --git a/yarn.lock b/yarn.lock index 819098b08..3907bd7d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11115,7 +11115,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.5.0, resolve@^1.6.0, 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== @@ -11253,7 +11253,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 +11280,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" @@ -12482,6 +12502,11 @@ trouter@^2.0.1: dependencies: matchit "^1.0.0" +tslib@1.10.0: + 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" From 7afe08f671c2836c65d0a505f35a05fb49bc6a07 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 17:41:49 +0800 Subject: [PATCH 06/30] compile saber --- packages/saber/package.json | 10 ++++++---- packages/saber/{lib => src}/BrowserApi.js | 0 packages/saber/{lib => src}/Compiler.js | 0 packages/saber/{lib => src}/Pages.js | 0 packages/saber/{lib => src}/Transformers.js | 0 packages/saber/{lib => src}/WebpackUtils.js | 0 packages/saber/{lib => src}/babel/preset.js | 0 packages/saber/{lib => src}/cli-commands/build.js | 0 packages/saber/{lib => src}/cli-commands/dev.js | 0 .../saber/{lib => src}/cli-commands/eject-theme.js | 0 packages/saber/{lib => src}/cli-commands/index.js | 0 packages/saber/{lib => src}/cli-commands/serve.js | 0 packages/saber/{lib => src}/cli-commands/utils.js | 0 packages/saber/{lib => src}/cli.js | 0 packages/saber/{lib => src}/config-chain/Options.js | 0 packages/saber/{lib => src}/config-chain/Plugin.js | 0 packages/saber/{lib => src}/config-chain/index.js | 0 packages/saber/{lib => src}/index.js | 0 .../__snapshots__/highlight-plugin.test.js.snap | 0 .../saber/{lib => src}/markdown/__test__/create-env.js | 0 .../markdown/__test__/excerpt-plugin.test.js | 0 .../markdown/__test__/headings-plugin.test.js | 0 .../markdown/__test__/highlight-plugin.test.js | 0 .../markdown/escape-interpolations-plugin.js | 0 packages/saber/{lib => src}/markdown/excerpt-plugin.js | 0 .../saber/{lib => src}/markdown/headings-plugin.js | 0 .../saber/{lib => src}/markdown/highlight-plugin.js | 0 .../saber/{lib => src}/markdown/hoist-tags-plugin.js | 0 .../saber/{lib => src}/markdown/task-list-plugin.js | 0 packages/saber/{lib => src}/plugins/config-css.js | 0 packages/saber/{lib => src}/plugins/config-font.js | 0 packages/saber/{lib => src}/plugins/config-image.js | 0 .../saber/{lib => src}/plugins/config-other-loaders.js | 0 .../{lib => src}/plugins/emit-runtime-polyfills.js | 0 .../saber/{lib => src}/plugins/emit-saber-variables.js | 0 .../saber/{lib => src}/plugins/extend-browser-api.js | 0 packages/saber/{lib => src}/plugins/extend-node-api.js | 0 packages/saber/{lib => src}/plugins/index.js | 0 packages/saber/{lib => src}/plugins/layouts.js | 0 packages/saber/{lib => src}/plugins/source-pages.js | 0 .../{lib => src}/plugins/transformer-components.js | 0 .../saber/{lib => src}/plugins/transformer-default.js | 0 .../saber/{lib => src}/plugins/transformer-markdown.js | 0 packages/saber/{lib => src}/plugins/watch-config.js | 0 .../{lib => src}/utils/__test__/getPermalink.test.js | 0 .../{lib => src}/utils/__test__/resolvePackage.test.js | 0 packages/saber/{lib => src}/utils/assetsAttribute.js | 0 packages/saber/{lib => src}/utils/configLoader.js | 0 packages/saber/{lib => src}/utils/getFileNames.js | 0 packages/saber/{lib => src}/utils/getPageType.js | 0 packages/saber/{lib => src}/utils/getPermalink.js | 0 packages/saber/{lib => src}/utils/inspectWebpack.js | 0 packages/saber/{lib => src}/utils/parseAttributes.js | 0 packages/saber/{lib => src}/utils/parseFrontmatter.js | 0 packages/saber/{lib => src}/utils/prettyBytes.js | 0 packages/saber/{lib => src}/utils/resolvePackage.js | 0 packages/saber/{lib => src}/utils/serveDir.js | 0 packages/saber/{lib => src}/utils/toml.min.js | 0 packages/saber/{lib => src}/utils/validateConfig.js | 0 packages/saber/{lib => src}/utils/yaml.min.js | 0 .../vue-renderer/get-initial-document-data.js | 0 .../{lib => src}/vue-renderer/get-initial-document.js | 0 packages/saber/{lib => src}/vue-renderer/index.js | 0 .../{lib => src}/vue-renderer/page-prop-loader.js | 0 .../saber/{lib => src}/vue-renderer/render-html.js | 0 .../{lib => src}/vue-renderer/saber-page-loader.js | 0 .../template-plugins/__test__/link.test.js | 0 .../vue-renderer/template-plugins/index.js | 0 .../{lib => src}/vue-renderer/template-plugins/link.js | 0 .../vue-renderer/transform-template-loader.js | 0 packages/saber/{lib => src}/vue-renderer/utils.js | 0 .../saber/{lib => src}/webpack/PrintStatusPlugin.js | 0 packages/saber/{lib => src}/webpack/babel-loader.js | 0 packages/saber/{lib => src}/webpack/toml-loader.js | 0 packages/saber/{lib => src}/webpack/webpack.config.js | 0 packages/saber/{lib => src}/webpack/yaml-loader.js | 0 packages/saber/tsconfig.json | 2 +- tsconfig.base.json | 3 +-- 78 files changed, 8 insertions(+), 7 deletions(-) rename packages/saber/{lib => src}/BrowserApi.js (100%) rename packages/saber/{lib => src}/Compiler.js (100%) rename packages/saber/{lib => src}/Pages.js (100%) rename packages/saber/{lib => src}/Transformers.js (100%) rename packages/saber/{lib => src}/WebpackUtils.js (100%) rename packages/saber/{lib => src}/babel/preset.js (100%) rename packages/saber/{lib => src}/cli-commands/build.js (100%) rename packages/saber/{lib => src}/cli-commands/dev.js (100%) rename packages/saber/{lib => src}/cli-commands/eject-theme.js (100%) rename packages/saber/{lib => src}/cli-commands/index.js (100%) rename packages/saber/{lib => src}/cli-commands/serve.js (100%) rename packages/saber/{lib => src}/cli-commands/utils.js (100%) rename packages/saber/{lib => src}/cli.js (100%) rename packages/saber/{lib => src}/config-chain/Options.js (100%) rename packages/saber/{lib => src}/config-chain/Plugin.js (100%) rename packages/saber/{lib => src}/config-chain/index.js (100%) rename packages/saber/{lib => src}/index.js (100%) rename packages/saber/{lib => src}/markdown/__test__/__snapshots__/highlight-plugin.test.js.snap (100%) rename packages/saber/{lib => src}/markdown/__test__/create-env.js (100%) rename packages/saber/{lib => src}/markdown/__test__/excerpt-plugin.test.js (100%) rename packages/saber/{lib => src}/markdown/__test__/headings-plugin.test.js (100%) rename packages/saber/{lib => src}/markdown/__test__/highlight-plugin.test.js (100%) rename packages/saber/{lib => src}/markdown/escape-interpolations-plugin.js (100%) rename packages/saber/{lib => src}/markdown/excerpt-plugin.js (100%) rename packages/saber/{lib => src}/markdown/headings-plugin.js (100%) rename packages/saber/{lib => src}/markdown/highlight-plugin.js (100%) rename packages/saber/{lib => src}/markdown/hoist-tags-plugin.js (100%) rename packages/saber/{lib => src}/markdown/task-list-plugin.js (100%) rename packages/saber/{lib => src}/plugins/config-css.js (100%) rename packages/saber/{lib => src}/plugins/config-font.js (100%) rename packages/saber/{lib => src}/plugins/config-image.js (100%) rename packages/saber/{lib => src}/plugins/config-other-loaders.js (100%) rename packages/saber/{lib => src}/plugins/emit-runtime-polyfills.js (100%) rename packages/saber/{lib => src}/plugins/emit-saber-variables.js (100%) rename packages/saber/{lib => src}/plugins/extend-browser-api.js (100%) rename packages/saber/{lib => src}/plugins/extend-node-api.js (100%) rename packages/saber/{lib => src}/plugins/index.js (100%) rename packages/saber/{lib => src}/plugins/layouts.js (100%) rename packages/saber/{lib => src}/plugins/source-pages.js (100%) rename packages/saber/{lib => src}/plugins/transformer-components.js (100%) rename packages/saber/{lib => src}/plugins/transformer-default.js (100%) rename packages/saber/{lib => src}/plugins/transformer-markdown.js (100%) rename packages/saber/{lib => src}/plugins/watch-config.js (100%) rename packages/saber/{lib => src}/utils/__test__/getPermalink.test.js (100%) rename packages/saber/{lib => src}/utils/__test__/resolvePackage.test.js (100%) rename packages/saber/{lib => src}/utils/assetsAttribute.js (100%) rename packages/saber/{lib => src}/utils/configLoader.js (100%) rename packages/saber/{lib => src}/utils/getFileNames.js (100%) rename packages/saber/{lib => src}/utils/getPageType.js (100%) rename packages/saber/{lib => src}/utils/getPermalink.js (100%) rename packages/saber/{lib => src}/utils/inspectWebpack.js (100%) rename packages/saber/{lib => src}/utils/parseAttributes.js (100%) rename packages/saber/{lib => src}/utils/parseFrontmatter.js (100%) rename packages/saber/{lib => src}/utils/prettyBytes.js (100%) rename packages/saber/{lib => src}/utils/resolvePackage.js (100%) rename packages/saber/{lib => src}/utils/serveDir.js (100%) rename packages/saber/{lib => src}/utils/toml.min.js (100%) rename packages/saber/{lib => src}/utils/validateConfig.js (100%) rename packages/saber/{lib => src}/utils/yaml.min.js (100%) rename packages/saber/{lib => src}/vue-renderer/get-initial-document-data.js (100%) rename packages/saber/{lib => src}/vue-renderer/get-initial-document.js (100%) rename packages/saber/{lib => src}/vue-renderer/index.js (100%) rename packages/saber/{lib => src}/vue-renderer/page-prop-loader.js (100%) rename packages/saber/{lib => src}/vue-renderer/render-html.js (100%) rename packages/saber/{lib => src}/vue-renderer/saber-page-loader.js (100%) rename packages/saber/{lib => src}/vue-renderer/template-plugins/__test__/link.test.js (100%) rename packages/saber/{lib => src}/vue-renderer/template-plugins/index.js (100%) rename packages/saber/{lib => src}/vue-renderer/template-plugins/link.js (100%) rename packages/saber/{lib => src}/vue-renderer/transform-template-loader.js (100%) rename packages/saber/{lib => src}/vue-renderer/utils.js (100%) rename packages/saber/{lib => src}/webpack/PrintStatusPlugin.js (100%) rename packages/saber/{lib => src}/webpack/babel-loader.js (100%) rename packages/saber/{lib => src}/webpack/toml-loader.js (100%) rename packages/saber/{lib => src}/webpack/webpack.config.js (100%) rename packages/saber/{lib => src}/webpack/yaml-loader.js (100%) diff --git a/packages/saber/package.json b/packages/saber/package.json index b0d9422df..884e87178 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -5,14 +5,16 @@ "files": [ "/babel.js", "/types", - "/lib", + "/dist", "/vue-app" ], "scripts": { - "test": "tsc && jest --env node" + "test": "tsc && jest --env node", + "prepublishOnly": "yarn build", + "build": "tsc" }, - "main": "lib/index.js", - "bin": "lib/cli.js", + "main": "dist/index.js", + "bin": "dist/cli.js", "types": "types/index.d.ts", "license": "MIT", "dependencies": { diff --git a/packages/saber/lib/BrowserApi.js b/packages/saber/src/BrowserApi.js similarity index 100% rename from packages/saber/lib/BrowserApi.js rename to packages/saber/src/BrowserApi.js diff --git a/packages/saber/lib/Compiler.js b/packages/saber/src/Compiler.js similarity index 100% rename from packages/saber/lib/Compiler.js rename to packages/saber/src/Compiler.js diff --git a/packages/saber/lib/Pages.js b/packages/saber/src/Pages.js similarity index 100% rename from packages/saber/lib/Pages.js rename to packages/saber/src/Pages.js diff --git a/packages/saber/lib/Transformers.js b/packages/saber/src/Transformers.js similarity index 100% rename from packages/saber/lib/Transformers.js rename to packages/saber/src/Transformers.js diff --git a/packages/saber/lib/WebpackUtils.js b/packages/saber/src/WebpackUtils.js similarity index 100% rename from packages/saber/lib/WebpackUtils.js rename to packages/saber/src/WebpackUtils.js 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 100% rename from packages/saber/lib/cli-commands/build.js rename to packages/saber/src/cli-commands/build.js diff --git a/packages/saber/lib/cli-commands/dev.js b/packages/saber/src/cli-commands/dev.js similarity index 100% rename from packages/saber/lib/cli-commands/dev.js rename to packages/saber/src/cli-commands/dev.js 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 100% rename from packages/saber/lib/cli-commands/serve.js rename to packages/saber/src/cli-commands/serve.js 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/lib/index.js b/packages/saber/src/index.js similarity index 100% rename from packages/saber/lib/index.js rename to packages/saber/src/index.js 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 100% rename from packages/saber/lib/markdown/task-list-plugin.js rename to packages/saber/src/markdown/task-list-plugin.js diff --git a/packages/saber/lib/plugins/config-css.js b/packages/saber/src/plugins/config-css.js similarity index 100% rename from packages/saber/lib/plugins/config-css.js rename to packages/saber/src/plugins/config-css.js 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 100% rename from packages/saber/lib/plugins/emit-runtime-polyfills.js rename to packages/saber/src/plugins/emit-runtime-polyfills.js 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 100% rename from packages/saber/lib/plugins/extend-browser-api.js rename to packages/saber/src/plugins/extend-browser-api.js diff --git a/packages/saber/lib/plugins/extend-node-api.js b/packages/saber/src/plugins/extend-node-api.js similarity index 100% rename from packages/saber/lib/plugins/extend-node-api.js rename to packages/saber/src/plugins/extend-node-api.js 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 100% rename from packages/saber/lib/plugins/layouts.js rename to packages/saber/src/plugins/layouts.js diff --git a/packages/saber/lib/plugins/source-pages.js b/packages/saber/src/plugins/source-pages.js similarity index 100% rename from packages/saber/lib/plugins/source-pages.js rename to packages/saber/src/plugins/source-pages.js diff --git a/packages/saber/lib/plugins/transformer-components.js b/packages/saber/src/plugins/transformer-components.js similarity index 100% rename from packages/saber/lib/plugins/transformer-components.js rename to packages/saber/src/plugins/transformer-components.js 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 100% rename from packages/saber/lib/plugins/transformer-markdown.js rename to packages/saber/src/plugins/transformer-markdown.js diff --git a/packages/saber/lib/plugins/watch-config.js b/packages/saber/src/plugins/watch-config.js similarity index 100% rename from packages/saber/lib/plugins/watch-config.js rename to packages/saber/src/plugins/watch-config.js 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.js similarity index 100% rename from packages/saber/lib/utils/assetsAttribute.js rename to packages/saber/src/utils/assetsAttribute.js 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 100% rename from packages/saber/lib/utils/getPermalink.js rename to packages/saber/src/utils/getPermalink.js diff --git a/packages/saber/lib/utils/inspectWebpack.js b/packages/saber/src/utils/inspectWebpack.js similarity index 100% rename from packages/saber/lib/utils/inspectWebpack.js rename to packages/saber/src/utils/inspectWebpack.js diff --git a/packages/saber/lib/utils/parseAttributes.js b/packages/saber/src/utils/parseAttributes.js similarity index 100% rename from packages/saber/lib/utils/parseAttributes.js rename to packages/saber/src/utils/parseAttributes.js diff --git a/packages/saber/lib/utils/parseFrontmatter.js b/packages/saber/src/utils/parseFrontmatter.js similarity index 100% rename from packages/saber/lib/utils/parseFrontmatter.js rename to packages/saber/src/utils/parseFrontmatter.js 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 100% rename from packages/saber/lib/utils/serveDir.js rename to packages/saber/src/utils/serveDir.js 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.js similarity index 100% rename from packages/saber/lib/utils/validateConfig.js rename to packages/saber/src/utils/validateConfig.js 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/lib/vue-renderer/get-initial-document-data.js b/packages/saber/src/vue-renderer/get-initial-document-data.js similarity index 100% rename from packages/saber/lib/vue-renderer/get-initial-document-data.js rename to packages/saber/src/vue-renderer/get-initial-document-data.js diff --git a/packages/saber/lib/vue-renderer/get-initial-document.js b/packages/saber/src/vue-renderer/get-initial-document.js similarity index 100% rename from packages/saber/lib/vue-renderer/get-initial-document.js rename to packages/saber/src/vue-renderer/get-initial-document.js diff --git a/packages/saber/lib/vue-renderer/index.js b/packages/saber/src/vue-renderer/index.js similarity index 100% rename from packages/saber/lib/vue-renderer/index.js rename to packages/saber/src/vue-renderer/index.js diff --git a/packages/saber/lib/vue-renderer/page-prop-loader.js b/packages/saber/src/vue-renderer/page-prop-loader.js similarity index 100% rename from packages/saber/lib/vue-renderer/page-prop-loader.js rename to packages/saber/src/vue-renderer/page-prop-loader.js diff --git a/packages/saber/lib/vue-renderer/render-html.js b/packages/saber/src/vue-renderer/render-html.js similarity index 100% rename from packages/saber/lib/vue-renderer/render-html.js rename to packages/saber/src/vue-renderer/render-html.js diff --git a/packages/saber/lib/vue-renderer/saber-page-loader.js b/packages/saber/src/vue-renderer/saber-page-loader.js similarity index 100% rename from packages/saber/lib/vue-renderer/saber-page-loader.js rename to packages/saber/src/vue-renderer/saber-page-loader.js diff --git a/packages/saber/lib/vue-renderer/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/lib/vue-renderer/template-plugins/__test__/link.test.js rename to packages/saber/src/vue-renderer/template-plugins/__test__/link.test.js diff --git a/packages/saber/lib/vue-renderer/template-plugins/index.js b/packages/saber/src/vue-renderer/template-plugins/index.js similarity index 100% rename from packages/saber/lib/vue-renderer/template-plugins/index.js rename to packages/saber/src/vue-renderer/template-plugins/index.js diff --git a/packages/saber/lib/vue-renderer/template-plugins/link.js b/packages/saber/src/vue-renderer/template-plugins/link.js similarity index 100% rename from packages/saber/lib/vue-renderer/template-plugins/link.js rename to packages/saber/src/vue-renderer/template-plugins/link.js diff --git a/packages/saber/lib/vue-renderer/transform-template-loader.js b/packages/saber/src/vue-renderer/transform-template-loader.js similarity index 100% rename from packages/saber/lib/vue-renderer/transform-template-loader.js rename to packages/saber/src/vue-renderer/transform-template-loader.js diff --git a/packages/saber/lib/vue-renderer/utils.js b/packages/saber/src/vue-renderer/utils.js similarity index 100% rename from packages/saber/lib/vue-renderer/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 100% rename from packages/saber/lib/webpack/PrintStatusPlugin.js rename to packages/saber/src/webpack/PrintStatusPlugin.js 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 100% rename from packages/saber/lib/webpack/webpack.config.js rename to packages/saber/src/webpack/webpack.config.js 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 index 75a8c33ff..d17a74b5f 100644 --- a/packages/saber/tsconfig.json +++ b/packages/saber/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../../tsconfig.base.json", - "include": ["types/*.d.ts", "lib"], + "include": ["types/*.d.ts", "src"], "exclude": ["node_modules", "**/__test__/**"], "compilerOptions": { "outDir": "dist", diff --git a/tsconfig.base.json b/tsconfig.base.json index 43bf91b6f..4c8b4a4fd 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -3,9 +3,8 @@ "strict": true, "allowJs": true, "lib": ["es2017"], - "noEmit": true, "module": "commonjs", - "target": "es2015", + "target": "es2017", "esModuleInterop": true, "moduleResolution": "node", "noImplicitAny": true, From 5cb2fe1f0a0f764dd3d3472f78d149a415363900 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 17:47:16 +0800 Subject: [PATCH 07/30] convert assetsAttribute.js to typescript --- ...{assetsAttribute.js => assetsAttribute.ts} | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) rename packages/saber/src/utils/{assetsAttribute.js => assetsAttribute.ts} (67%) diff --git a/packages/saber/src/utils/assetsAttribute.js b/packages/saber/src/utils/assetsAttribute.ts similarity index 67% rename from packages/saber/src/utils/assetsAttribute.js rename to packages/saber/src/utils/assetsAttribute.ts index 30a071b0b..f12c076ec 100644 --- a/packages/saber/src/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) || /^\//.test(str) 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,13 @@ 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 = { +export { prefixAssets, requireAssets } From 40104e5399e52e366b6beb39c6e6973b9e30d55b Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 21:55:55 +0800 Subject: [PATCH 08/30] migrate to eslint --- .gitignore | 1 + lerna.json | 3 +- other-packages/eslint-config-saber/index.js | 41 + .../eslint-config-saber/package.json | 16 + package.json | 38 +- packages/saber-log/src/index.ts | 2 +- packages/saber-plugin-code-copy/package.json | 1 - packages/saber-plugin-feed/package.json | 1 - .../package.json | 1 - .../saber-plugin-meta-redirect/package.json | 1 - .../package.json | 1 - packages/saber-plugin-pwa/package.json | 1 - .../package.json | 1 - .../saber-plugin-transformer-pug/package.json | 1 - packages/saber/.eslintignore | 2 + packages/saber/.eslintrc.js | 3 + packages/saber/package.json | 6 +- packages/saber/src/Pages.js | 186 --- packages/saber/src/Pages.ts | 297 ++++ packages/saber/src/declarations.d.ts | 1 + packages/saber/src/index.js | 2 +- .../saber/src/markdown/task-list-plugin.js | 2 + packages/saber/src/utils/getPermalink.js | 24 +- packages/saber/tsconfig.json | 8 +- packages/saber/types/index.d.ts | 102 -- tsconfig.base.json | 1 - yarn.lock | 1285 +++-------------- 27 files changed, 630 insertions(+), 1398 deletions(-) create mode 100644 other-packages/eslint-config-saber/index.js create mode 100644 other-packages/eslint-config-saber/package.json create mode 100644 packages/saber/.eslintignore create mode 100644 packages/saber/.eslintrc.js delete mode 100644 packages/saber/src/Pages.js create mode 100644 packages/saber/src/Pages.ts create mode 100644 packages/saber/src/declarations.d.ts delete mode 100644 packages/saber/types/index.d.ts 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/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..2a1aee8d7 --- /dev/null +++ b/other-packages/eslint-config-saber/index.js @@ -0,0 +1,41 @@ +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 + } + } + ] + } +} 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 b023de95d..fcb98cff2 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,40 +18,12 @@ "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", "lerna": "3.16.4", "lint-staged": "8.1.6", "prettier": "1.18.2", - "typescript": "^3.8.0-dev.20191031", - "xo": "0.24.0" - }, - "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-app/**", - "**/example/**", - "**/examples/**", - "website/**" - ], - "envs": [ - "jest" - ] + "typescript": "^3.8.0-dev.20191031" }, "husky": { "hooks": { @@ -60,10 +32,6 @@ }, "lint-staged": { "linters": { - "*.js": [ - "xo --fix", - "git add" - ], "*.{json,md}": [ "prettier --write", "git add" diff --git a/packages/saber-log/src/index.ts b/packages/saber-log/src/index.ts index 0b74531e1..2f547737b 100644 --- a/packages/saber-log/src/index.ts +++ b/packages/saber-log/src/index.ts @@ -17,7 +17,7 @@ interface ILogConstructorOptions { */ const defined = (n: any) => typeof n !== 'undefined' -class Log { +export class Log { options: ILogConstructorOptions constructor() { 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..887c5d2c1 --- /dev/null +++ b/packages/saber/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: 'saber' +} diff --git a/packages/saber/package.json b/packages/saber/package.json index 884e87178..251a10d71 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -11,7 +11,8 @@ "scripts": { "test": "tsc && jest --env node", "prepublishOnly": "yarn build", - "build": "tsc" + "build": "tsc", + "lint": "eslint src --ext js,ts" }, "main": "dist/index.js", "bin": "dist/cli.js", @@ -73,13 +74,14 @@ }, "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" }, - "xo": false, "engines": { "node": ">=8" } diff --git a/packages/saber/src/Pages.js b/packages/saber/src/Pages.js deleted file mode 100644 index c385aa65a..000000000 --- a/packages/saber/src/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/src/Pages.ts b/packages/saber/src/Pages.ts new file mode 100644 index 000000000..4f4e4c2da --- /dev/null +++ b/packages/saber/src/Pages.ts @@ -0,0 +1,297 @@ +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' + +// 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 IRedirecrtRouteConfig { + 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 IFileInfo { + relative: string + absolute: string + birthtime: Date + mtime: Date + content: string +} + +export interface IAssets { + [k: string]: string +} + +export interface ICreatePageOptions { + /** Default to `true` when not specified */ + normalize?: boolean + file?: IFileInfo +} + +export interface ICreatePageInput { + 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?: IAssets + /** 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 IPage { + 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: IPage + assets: IAssets + [k: string]: any +} + +export class Pages extends Map { + api: TODO + redirectRoutes: Map + + constructor(api: TODO) { + super() + this.api = api + this.redirectRoutes = new Map() + } + + normalizePage(_page: ICreatePageInput, file?: IFileInfo): IPage { + 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') + } + + // 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 = + 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 IPage + } + + createPage(page: ICreatePageInput, options: ICreatePageOptions = {}) { + const { file, normalize } = options + if (normalize !== false) { + page = this.normalizePage(page, file) + } + + this.set(page.internal.id, page as IPage) + } + + removePage(id: string) { + this.removeWhere(page => { + return page.internal.id === id + }) + } + + removeWhere(getCondition: (page: IPage) => boolean) { + for (const page of this.values()) { + const condition = getCondition(page) + if (condition) { + this.delete(page.internal.id) + } + } + } + + getPagePublicFields(page: string | IPage) { + let result: any = typeof page === 'string' ? this.get(page) : page + if (!result) { + throw new Error(`The page doesn't exist`) + } + + result = Object.assign({}, page, { + content: undefined, + internal: undefined + }) + // TODO: remove in 1.0 + result.attributes = result + return result as Omit + } + + createRedirect(_configs: IRedirecrtRouteConfig | IRedirecrtRouteConfig[]) { + 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/src/declarations.d.ts b/packages/saber/src/declarations.d.ts new file mode 100644 index 000000000..98ed3ca5d --- /dev/null +++ b/packages/saber/src/declarations.d.ts @@ -0,0 +1 @@ +declare type TODO = any diff --git a/packages/saber/src/index.js b/packages/saber/src/index.js index 50c40054a..99f0b98b5 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.js @@ -6,7 +6,7 @@ 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 { Pages } = require('./Pages') const BrowserApi = require('./BrowserApi') const Transformers = require('./Transformers') const configLoader = require('./utils/configLoader') diff --git a/packages/saber/src/markdown/task-list-plugin.js b/packages/saber/src/markdown/task-list-plugin.js index 5d0403aa3..fdc9ba4c0 100644 --- a/packages/saber/src/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/src/utils/getPermalink.js b/packages/saber/src/utils/getPermalink.js index 1702df5a8..41ee8ca88 100644 --- a/packages/saber/src/utils/getPermalink.js +++ b/packages/saber/src/utils/getPermalink.js @@ -11,8 +11,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').IPermalinks} 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 +26,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,13 +38,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)?$/, '') } diff --git a/packages/saber/tsconfig.json b/packages/saber/tsconfig.json index d17a74b5f..bcc114eb1 100644 --- a/packages/saber/tsconfig.json +++ b/packages/saber/tsconfig.json @@ -1,9 +1,11 @@ { "extends": "../../tsconfig.base.json", - "include": ["types/*.d.ts", "src"], - "exclude": ["node_modules", "**/__test__/**"], + "include": ["src"], "compilerOptions": { + "allowJs": true, "outDir": "dist", - "lib": ["esnext", "dom"] + "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 6718debd6..000000000 --- a/packages/saber/types/index.d.ts +++ /dev/null @@ -1,102 +0,0 @@ -declare module 'saber' { - interface ISaberOptions { - cwd?: string - dev?: boolean - verbose?: boolean - } - - interface ISaberConfig { - siteConfig?: { - [k: string]: any - } - - themeConfig?: { - [k: string]: any - } - - permalinks?: IPermalinks | ((page: IPage) => IPermalinks) - - 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[] - } - } - - export interface IPermalinks { - [pageType: string]: string - } - - export interface IPage { - 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 SaberPlugin = - | 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 interface ISaber {} - - export const createSaber: ( - options: ISaberOptions, - config: ISaberConfig - ) => ISaber -} diff --git a/tsconfig.base.json b/tsconfig.base.json index 4c8b4a4fd..3906e7899 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,6 @@ { "compilerOptions": { "strict": true, - "allowJs": true, "lib": ["es2017"], "module": "commonjs", "target": "es2017", diff --git a/yarn.lock b/yarn.lock index 3907bd7d0..3d195996f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2078,6 +2078,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 +2109,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,6 +2134,23 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@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@*": version "3.0.3" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -2218,6 +2245,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 +2504,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 +2529,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== @@ -2495,7 +2563,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== @@ -2519,23 +2587,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 +2719,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 +2756,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= @@ -2873,11 +2936,6 @@ 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== - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -2961,19 +3019,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" @@ -3102,11 +3147,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" @@ -3324,7 +3364,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= @@ -3366,11 +3406,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 +3449,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 +3456,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 +3513,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 +3543,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 +3550,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" @@ -3637,11 +3647,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 +3812,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 +3846,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 +3978,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 +3992,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 +4030,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 +4053,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,11 +4081,6 @@ 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-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -4387,7 +4346,7 @@ 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: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -4513,13 +4472,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" @@ -4675,14 +4627,6 @@ 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= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4752,7 +4696,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== @@ -4854,6 +4798,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,13 +4827,6 @@ 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= - dependencies: - lodash "^4.13.1" - enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" @@ -4911,11 +4853,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" @@ -5005,14 +4942,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 +4949,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 +4964,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 +5046,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" @@ -5337,32 +5103,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" @@ -5463,7 +5203,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 +5319,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 +5455,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= @@ -5974,11 +5721,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" @@ -6127,7 +5869,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= @@ -6183,7 +5925,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 +5946,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" @@ -6290,11 +6015,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 +6073,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" @@ -6572,11 +6287,6 @@ 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== - import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -6607,11 +6317,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 +6325,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 +6389,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 +6408,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 +6457,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 +6481,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,7 +6505,7 @@ 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== @@ -6821,13 +6522,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 +6560,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 +6583,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 +6627,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 +6642,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 +6656,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 +6666,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 +6678,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 +6738,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 +6762,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 +6774,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 +6822,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" @@ -7697,11 +7322,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 +7330,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== @@ -7885,13 +7505,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 +7558,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 +7665,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" @@ -8130,11 +7728,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 +7743,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 +7763,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 +7788,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 +7815,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 +7880,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== @@ -8419,11 +7987,6 @@ 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.2: version "3.0.2" resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.2.tgz#1575ee7a093648d4e096aa33386b058d92ac8bc1" @@ -8521,21 +8084,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" @@ -8654,7 +8202,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.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8777,16 +8325,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 +8340,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== @@ -9197,11 +8735,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" @@ -9306,15 +8839,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 +8851,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 +9055,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 +9110,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 +9242,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 +9321,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 +9335,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 +9349,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" @@ -10259,7 +9718,7 @@ prelude-ls@~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 +9740,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== @@ -10385,11 +9844,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" @@ -10643,7 +10097,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 +10150,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 +10175,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" @@ -10888,11 +10325,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 +10351,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 +10375,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 +10385,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 +10397,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 +10506,7 @@ resolve@1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -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.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 +10535,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" @@ -11344,13 +10743,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" @@ -11410,19 +10802,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.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== @@ -11825,11 +11210,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" @@ -11924,6 +11304,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" @@ -12038,12 +11427,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= @@ -12086,7 +11475,7 @@ supports-color@^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== @@ -12100,14 +11489,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" @@ -12214,13 +11595,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" @@ -12270,11 +11644,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" @@ -12319,7 +11688,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= @@ -12480,21 +11849,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" @@ -12502,7 +11856,7 @@ trouter@^2.0.1: dependencies: matchit "^1.0.0" -tslib@1.10.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== @@ -12512,6 +11866,13 @@ tslib@^1.9.0: 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" @@ -12546,6 +11907,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" @@ -12609,14 +11975,6 @@ 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" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -12640,18 +11998,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" @@ -12686,44 +12032,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" @@ -12749,32 +12057,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" @@ -12801,13 +12088,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" @@ -12877,6 +12157,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" @@ -12906,28 +12191,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" @@ -13174,13 +12437,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" @@ -13458,16 +12714,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" @@ -13508,59 +12754,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= @@ -13580,13 +12774,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" From 2351923816079bc79711693d29149fbfc9746c45 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 22:46:38 +0800 Subject: [PATCH 09/30] some fixes --- packages/saber/src/Pages.ts | 6 ++++-- packages/saber/src/vue-renderer/index.js | 10 ++++++++++ packages/saber/src/vue-renderer/page-prop-loader.js | 5 ++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts index 4f4e4c2da..78a188797 100644 --- a/packages/saber/src/Pages.ts +++ b/packages/saber/src/Pages.ts @@ -257,17 +257,19 @@ export class Pages extends Map { } getPagePublicFields(page: string | IPage) { - let result: any = typeof page === 'string' ? this.get(page) : page + let result: TODO = typeof page === 'string' ? this.get(page) : page + if (!result) { throw new Error(`The page doesn't exist`) } - result = Object.assign({}, page, { + result = Object.assign({}, result, { content: undefined, internal: undefined }) // TODO: remove in 1.0 result.attributes = result + return result as Omit } diff --git a/packages/saber/src/vue-renderer/index.js b/packages/saber/src/vue-renderer/index.js index 3f4e72a5b..1805d6ff7 100644 --- a/packages/saber/src/vue-renderer/index.js +++ b/packages/saber/src/vue-renderer/index.js @@ -461,6 +461,16 @@ class VueRenderer { } }) + server.get('/_saber/pages', (req, res) => { + res.setHeader('content-type', 'text/html') + res.end(` + + `) + }) + server.get('/_saber/visit-page', async (req, res) => { let [, pathname, hash] = /^([^#]+)(#.+)?$/.exec(req.query.route) || [] pathname = removeTrailingSlash(pathname) diff --git a/packages/saber/src/vue-renderer/page-prop-loader.js b/packages/saber/src/vue-renderer/page-prop-loader.js index b2e27f6e9..3b56f8ed4 100644 --- a/packages/saber/src/vue-renderer/page-prop-loader.js +++ b/packages/saber/src/vue-renderer/page-prop-loader.js @@ -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) From 33edfdc246b9ad4caf33a6a0803f6850a3389e23 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 22:50:25 +0800 Subject: [PATCH 10/30] convert BrowserApi to typescript --- .../saber/src/{BrowserApi.js => BrowserApi.ts} | 18 ++++++++++++++---- packages/saber/src/index.js | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) rename packages/saber/src/{BrowserApi.js => BrowserApi.ts} (77%) diff --git a/packages/saber/src/BrowserApi.js b/packages/saber/src/BrowserApi.ts similarity index 77% rename from packages/saber/src/BrowserApi.js rename to packages/saber/src/BrowserApi.ts index 8b7c3b30f..dd215feaf 100644 --- a/packages/saber/src/BrowserApi.js +++ b/packages/saber/src/BrowserApi.ts @@ -1,12 +1,22 @@ -const path = require('path') -const { fs, slash } = require('saber-utils') +import path from 'path' +import { fs, slash } from 'saber-utils' -module.exports = class BrowserApi extends Set { - constructor(api) { +export class BrowserApi extends Set { + api: TODO + + constructor(api: TODO) { 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/src/index.js b/packages/saber/src/index.js index 99f0b98b5..d883192f7 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.js @@ -7,7 +7,7 @@ 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 { BrowserApi } = require('./BrowserApi') const Transformers = require('./Transformers') const configLoader = require('./utils/configLoader') const resolvePackage = require('./utils/resolvePackage') From 090e8d71efe97d5590d4e97403844dff20715e78 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 23:13:25 +0800 Subject: [PATCH 11/30] conevrt Transformers to typescript --- .../src/{Transformers.js => Transformers.ts} | 20 ++++++++++++++----- packages/saber/src/index.js | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) rename packages/saber/src/{Transformers.js => Transformers.ts} (60%) diff --git a/packages/saber/src/Transformers.js b/packages/saber/src/Transformers.ts similarity index 60% rename from packages/saber/src/Transformers.js rename to packages/saber/src/Transformers.ts index 478fd0995..009d8f6eb 100644 --- a/packages/saber/src/Transformers.js +++ b/packages/saber/src/Transformers.ts @@ -1,4 +1,14 @@ -module.exports = class Transformers { +import { ICreatePageInput, IPage } from './Pages' + +export interface ITransformer { + extensions: string[] + parse?: (page: ICreatePageInput) => void + getPageComponent: (page: IPage) => 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: ITransformer) { 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/src/index.js b/packages/saber/src/index.js index d883192f7..4a8b5dd01 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.js @@ -8,7 +8,7 @@ const { SyncHook, AsyncSeriesHook, SyncWaterfallHook } = require('tapable') const getPort = require('get-port') const { Pages } = require('./Pages') const { BrowserApi } = require('./BrowserApi') -const Transformers = require('./Transformers') +const { Transformers } = require('./Transformers') const configLoader = require('./utils/configLoader') const resolvePackage = require('./utils/resolvePackage') const builtinPlugins = require('./plugins') From 34527067ef10cd87cb1f9ef6a2d10458aabf15a4 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 23:19:05 +0800 Subject: [PATCH 12/30] convert Compiler to ts --- .../saber/src/{Compiler.js => Compiler.ts} | 18 ++++++++++++------ packages/saber/src/index.js | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) rename packages/saber/src/{Compiler.js => Compiler.ts} (75%) diff --git a/packages/saber/src/Compiler.js b/packages/saber/src/Compiler.ts similarity index 75% rename from packages/saber/src/Compiler.js rename to packages/saber/src/Compiler.ts index 3b3bdab30..2f24b7457 100644 --- a/packages/saber/src/Compiler.js +++ b/packages/saber/src/Compiler.ts @@ -1,19 +1,25 @@ -const { EventEmitter } = require('events') +import { EventEmitter } from 'events' +import WebpackChain from 'webpack-chain' +import { Compiler as WebpackCompiler } from 'webpack' -module.exports = class Compiler extends EventEmitter { - constructor(type, api) { +export class Compiler extends EventEmitter { + type: string + api: TODO + status: 'waiting' | 'success' | 'building' | 'error' + + constructor(type: string, api: TODO) { super() this.type = type this.api = api this.status = 'waiting' } - injectToWebpack(config) { + injectToWebpack(config: WebpackChain) { const ID = `compiler-${this.type}` 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', { @@ -32,7 +38,7 @@ module.exports = class Compiler extends EventEmitter { } const allCompilers = { ready: true, hasError: false } - Object.values(context.api.compilers).forEach(({ status }) => { + Object.values(context.api.compilers).forEach(({ status }: TODO) => { if (status !== 'success' && status !== 'error') { allCompilers.ready = false } diff --git a/packages/saber/src/index.js b/packages/saber/src/index.js index 4a8b5dd01..c331e66c6 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.js @@ -12,7 +12,7 @@ const { Transformers } = require('./Transformers') const configLoader = require('./utils/configLoader') const resolvePackage = require('./utils/resolvePackage') const builtinPlugins = require('./plugins') -const Compiler = require('./Compiler') +const { Compiler } = require('./Compiler') const WebpackUtils = require('./WebpackUtils') class Saber { From 98c5415da1632798bb69b105533cdbb7579e8e55 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Thu, 31 Oct 2019 23:23:09 +0800 Subject: [PATCH 13/30] convert WebpackUtils to typescript --- .../saber/src/{WebpackUtils.js => WebpackUtils.ts} | 13 ++++++++----- packages/saber/src/index.js | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) rename packages/saber/src/{WebpackUtils.js => WebpackUtils.ts} (68%) diff --git a/packages/saber/src/WebpackUtils.js b/packages/saber/src/WebpackUtils.ts similarity index 68% rename from packages/saber/src/WebpackUtils.js rename to packages/saber/src/WebpackUtils.ts index 8eec06847..8be14406c 100644 --- a/packages/saber/src/WebpackUtils.js +++ b/packages/saber/src/WebpackUtils.ts @@ -1,7 +1,10 @@ -const path = require('path') +import path from 'path' +import { Rule } from 'webpack-chain' -module.exports = class WebpackUtils { - constructor(api) { +export class WebpackUtils { + api: TODO + + constructor(api: TODO) { this.api = api } @@ -9,7 +12,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 +22,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/src/index.js b/packages/saber/src/index.js index c331e66c6..165b8d550 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.js @@ -13,7 +13,7 @@ const configLoader = require('./utils/configLoader') const resolvePackage = require('./utils/resolvePackage') const builtinPlugins = require('./plugins') const { Compiler } = require('./Compiler') -const WebpackUtils = require('./WebpackUtils') +const { WebpackUtils } = require('./WebpackUtils') class Saber { constructor(opts = {}, config = {}) { From ac8908533554eb0dc9ed5a1a75529a4c1f715f65 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 00:36:50 +0800 Subject: [PATCH 14/30] convert index.js to typescript with a lot of todos and ts-ignore --- packages/saber/src/{index.js => index.ts} | 292 +++++++++++++++++----- 1 file changed, 230 insertions(+), 62 deletions(-) rename packages/saber/src/{index.js => index.ts} (63%) diff --git a/packages/saber/src/index.js b/packages/saber/src/index.ts similarity index 63% rename from packages/saber/src/index.js rename to packages/saber/src/index.ts index 165b8d550..f16b395b2 100644 --- a/packages/saber/src/index.js +++ b/packages/saber/src/index.ts @@ -1,24 +1,166 @@ -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 || '.') +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 { SyncHook, AsyncSeriesHook, SyncWaterfallHook } from 'tapable' +import getPort from 'get-port' +import { Pages } 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' + +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 interface SaberConfig { + /** The path or name of your theme */ + theme?: string + siteConfig?: SiteConfig + themeConfig?: object + locales?: { + [localePath: string]: { + siteConfig?: SiteConfig + themeConfig?: ThemeConfig + } + } + renderer?: string + /** 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 +} + +export class Saber { + opts: SaberOptions + initialConfig: SaberConfig + // @ts-ignore + config: Required + pages: Pages + browserApi: BrowserApi + webpackUtils: WebpackUtils + log: Log + colors: typeof colors + utils: typeof import('saber-utils') + hooks: TODO + transformers: Transformers + runtimePolyfills: Set + compilers: { + [k: string]: Compiler + } + Renderer?: TODO + renderer?: TODO + pkg: { + path?: string + data: { + [k: string]: any + } + } + configDir?: string + configPath?: string + theme?: string + + 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) @@ -79,9 +221,9 @@ class Saber { for (const hook of Object.keys(this.hooks)) { const ignoreNames = ['theme-node-api', 'user-node-api'] this.hooks[hook].intercept({ - register(tapInfo) { + register(tapInfo: TODO) { const { fn, name } = tapInfo - tapInfo.fn = (...args) => { + tapInfo.fn = (...args: any[]) => { if (!ignoreNames.includes(name)) { const msg = `${hook} ${colors.dim(`(${name})`)}` log.verbose(msg) @@ -96,8 +238,24 @@ class Saber { } if (opts.verbose) { - process.env.SABER_LOG_LEVEL = 4 + 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 = '' } get dev() { @@ -109,13 +267,6 @@ class Saber { } 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, @@ -127,23 +278,23 @@ class Saber { if (this.configPath) { log.info( `Using config file: ${colors.dim( - path.relative(process.cwd(), configPath) + path.relative(process.cwd(), this.configPath) )}` ) } - this.RendererClass = this.config.renderer + this.Renderer = this.config.renderer ? resolvePackage(this.config.renderer, { - cwd: this.configDir, + cwd: this.configDir || this.opts.cwd, prefix: 'saber-renderer-' }) : require('./vue-renderer') - this.renderer = new this.RendererClass(this) + this.renderer = new this.Renderer(this) // Load theme if (this.config.theme) { this.theme = resolvePackage(this.config.theme, { - cwd: this.configDir, + cwd: this.configDir || this.opts.cwd, prefix: 'saber-theme-' }) // When a theme is loaded from `node_modules` and `$theme/dist` directory exists @@ -158,12 +309,12 @@ class Saber { log.info(`Using theme: ${colors.dim(this.config.theme)}`) log.verbose(() => `Theme directory: ${colors.dim(this.theme)}`) } else { - this.theme = this.RendererClass.defaultTheme + this.theme = this.Renderer.defaultTheme } // Load built-in plugins for (const plugin of builtinPlugins) { - await this.applyPlugin(require(plugin.resolve), plugin.options) + await this.applyPlugin(require(plugin.resolve)) } // Load user plugins @@ -185,15 +336,16 @@ class Saber { await this.hooks.afterPlugins.promise() } - async setConfig(config, configPath = this.configPath) { + async setConfig(config: SaberConfig, configPath = this.configPath) { this.configPath = configPath if (configPath) { this.configDir = path.dirname(configPath) } else { - this.configDir = null + this.configDir = undefined } const initialRun = !this.config + // @ts-ignore this.config = merge({}, config, this.initialConfig) // Validate config, apply default values, normalize some values this.config = require('./utils/validateConfig')(this.config, { @@ -202,8 +354,9 @@ class Saber { // Make sure the port is available const { port } = this.config.server + // @ts-ignore this.config.server._originalPort = port - if (initialRun) { + if (initialRun && port) { this.config.server.port = await getPort({ port: getPort.makeRange(port, port + 1000), host: this.config.server.host @@ -211,7 +364,11 @@ class Saber { } } - async applyPlugin(plugin, options, pluginLocation) { + async applyPlugin( + plugin: SaberPlugin, + options?: any, + pluginLocation?: string + ) { await plugin.apply(this, options) if (!plugin.name.startsWith('builtin:')) { @@ -226,25 +383,32 @@ class Saber { getUserPlugins() { // Plugins that are specified in user config, a.k.a. saber-config.js etc - const plugins = + const plugins: ResolvedSaberPlugin[] = this.configDir && this.config.plugins ? this.config.plugins.map(p => { if (typeof p === 'string') { p = { resolve: p } } + // Help!!! + // @ts-ignore const location = resolveFrom(this.configDir, p.resolve) - const plugin = require(location) - plugin.location = location - plugin.options = p.options + const resolvedPlugin = { + ...require(location), + location, + options: p.options + } - return plugin + return resolvedPlugin }) : [] - const applyFilterPlugins = plugins => { - const handlers = new Set() + const applyFilterPlugins = ( + plugins: ResolvedSaberPlugin[] + ): ResolvedSaberPlugin[] => { + type Handler = (plugins: ResolvedSaberPlugin[]) => ResolvedSaberPlugin[] + const handlers = new Set() for (const plugin of plugins) { const { filterPlugins, options } = plugin @@ -268,23 +432,24 @@ class Saber { return applyFilterPlugins(this.hooks.filterPlugins.call(plugins)) } - resolveCache(...args) { + resolveCache(...args: string[]) { return this.resolveCwd('.saber', ...args) } - resolveCwd(...args) { + resolveCwd(...args: string[]) { return path.resolve(this.opts.cwd, ...args) } - resolveOwnDir(...args) { + resolveOwnDir(...args: string[]) { return path.join(__dirname, '../', ...args) } - resolveOutDir(...args) { + resolveOutDir(...args: string[]) { + // @ts-ignore return this.resolveCwd(this.config.build.outDir, ...args) } - getWebpackConfig(opts) { + getWebpackConfig(opts: WebpackContext) { opts = Object.assign({ type: 'client' }, opts) const chain = require('./webpack/webpack.config')(this, opts) this.hooks.chainWebpack.call(chain, opts) @@ -297,8 +462,8 @@ class Saber { return config } - getDocument(context) { - const initialHTML = this.RendererClass.getDocument(context) + getDocument(context: TODO) { + const initialHTML = this.Renderer.getDocument(context) return this.hooks.getDocument.call(initialHTML, context) } @@ -344,7 +509,8 @@ class Saber { } // Build app in production mode - async build({ skipCompilation }) { + async build(options: { skipCompilation?: boolean } = {}) { + const { skipCompilation } = options await this.prepare() await this.run() if (!skipCompilation) { @@ -374,7 +540,7 @@ class Saber { }) } - hasDependency(name) { + hasDependency(name: string) { return this.getDependencies().includes(name) } @@ -385,15 +551,17 @@ class Saber { ] } - localResolve(name) { + localResolve(name: string): string { return require('resolve-from').silent(this.opts.cwd, name) } - localRequire(name) { + localRequire(name: string): any { const resolved = this.localResolve(name) return resolved && require(resolved) } } -exports.createSaber = (opts, config) => new Saber(opts, config) -exports.Saber = Saber +export const createSaber = ( + opts: SaberConstructorOptions, + config: SaberConfig +) => new Saber(opts, config) From 5c3428b3a3c334856077270d62e432bdd5a6512f Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 21:10:48 +0800 Subject: [PATCH 15/30] type-check website/saber-config.js --- packages/saber/src/index.ts | 81 +++++++++++++++++++++- packages/saber/src/utils/validateConfig.js | 11 ++- website/saber-config.js | 12 +++- 3 files changed, 100 insertions(+), 4 deletions(-) diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index f16b395b2..a2ea53a8b 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -42,7 +42,10 @@ export interface ThemeConfig { export interface SaberPlugin { name: string apply: (api: Saber, options: any) => void | Promise - filterPlugins?: (plugins: ResolvedSaberPlugin[], options?: any) => ResolvedSaberPlugin[] + filterPlugins?: ( + plugins: ResolvedSaberPlugin[], + options?: any + ) => ResolvedSaberPlugin[] } export interface SaberConfigPlugin { @@ -60,6 +63,8 @@ export interface WebpackContext { [k: string]: any } +export type PageType = 'page' | 'post' + export interface SaberConfig { /** The path or name of your theme */ theme?: string @@ -71,6 +76,21 @@ export interface SaberConfig { themeConfig?: ThemeConfig } } + /** + * Customize permalink format based on page types (page or post) + */ + permalinks?: { + /** + * Permalink format for normal pages + * @default `/:slug.html` + */ + page?: string + /** + * Permalink format for posts + * @default `/posts/:slug.html` + */ + post?: string + } renderer?: string /** Build configurations */ build?: { @@ -125,6 +145,65 @@ export interface SaberConfig { 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 { diff --git a/packages/saber/src/utils/validateConfig.js b/packages/saber/src/utils/validateConfig.js index 7908ed45b..a1e553cbb 100644 --- a/packages/saber/src/utils/validateConfig.js +++ b/packages/saber/src/utils/validateConfig.js @@ -82,6 +82,14 @@ module.exports = (config, { dev }) => { const locales = struct('object?') + const template = struct({ + openLinkInNewTab: 'boolean', + plugins: ['any'] + }, { + openLinkInNewTab: true, + plugins: [] + }) + const schema = struct({ build, siteConfig, @@ -91,7 +99,8 @@ module.exports = (config, { dev }) => { plugins, markdown, permalinks, - server + server, + template }) const [err, result] = schema.validate(config) 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 From ac83dbf5da04622ad7cb41deb48fb56c1ad38c00 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 22:10:47 +0800 Subject: [PATCH 16/30] generate typedoc --- package.json | 4 ++ packages/saber/{src => }/declarations.d.ts | 0 packages/saber/package.json | 6 +- packages/saber/src/index.ts | 1 + website/package.json | 2 +- yarn.lock | 76 ++++++++++++++++++++-- 6 files changed, 82 insertions(+), 7 deletions(-) rename packages/saber/{src => }/declarations.d.ts (100%) diff --git a/package.json b/package.json index fcb98cff2..f5230e290 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,12 @@ "lerna": "3.16.4", "lint-staged": "8.1.6", "prettier": "1.18.2", + "typedoc": "^0.15.0", "typescript": "^3.8.0-dev.20191031" }, + "resolutions": { + "typedoc/typescript": "^3.8.0-dev.20191031" + }, "husky": { "hooks": { "pre-commit": "lint-staged" diff --git a/packages/saber/src/declarations.d.ts b/packages/saber/declarations.d.ts similarity index 100% rename from packages/saber/src/declarations.d.ts rename to packages/saber/declarations.d.ts diff --git a/packages/saber/package.json b/packages/saber/package.json index 251a10d71..4de401977 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -6,13 +6,15 @@ "/babel.js", "/types", "/dist", - "/vue-app" + "/vue-app", + "/declarations.d.ts" ], "scripts": { "test": "tsc && jest --env node", "prepublishOnly": "yarn build", "build": "tsc", - "lint": "eslint src --ext js,ts" + "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": "dist/index.js", "bin": "dist/cli.js", diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index a2ea53a8b..284d21cc1 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -1,3 +1,4 @@ +/// import path from 'path' import http from 'http' import { fs } from 'saber-utils' diff --git a/website/package.json b/website/package.json index c1bb4eae2..cd13e0c91 100644 --- a/website/package.json +++ b/website/package.json @@ -3,7 +3,7 @@ "name": "saber-website", "scripts": { "dev": "node ../packages/saber/lib/cli.js", - "generate": "node ../packages/saber/lib/cli.js generate" + "generate": "node ../packages/saber/lib/cli.js generate && yarn workspace saber build:typedoc" }, "dependencies": { "date-fns": "1.30.1", diff --git a/yarn.lock b/yarn.lock index 3d195996f..51f310462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2151,7 +2151,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e" integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg== -"@types/minimatch@*": +"@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== @@ -2936,6 +2936,13 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +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" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -6116,6 +6123,11 @@ hex-color-regex@^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" @@ -7307,6 +7319,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" @@ -7895,6 +7912,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" @@ -8003,6 +8025,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" @@ -8202,7 +8229,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.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== @@ -9794,7 +9821,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== @@ -10924,6 +10951,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" @@ -11924,7 +11960,34 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.8.0-dev.20191031: +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== @@ -11975,6 +12038,11 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +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" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" From 322d88adc2146b1c6966d097b57dc17928ec8181 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 22:40:56 +0800 Subject: [PATCH 17/30] fix path to babel preset --- packages/saber/babel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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') From 7f1734d26c48429b46ac9abd332e5bcfaf31a036 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 22:56:46 +0800 Subject: [PATCH 18/30] remove TODOs related to Saber --- packages/saber/src/BrowserApi.ts | 5 +++-- packages/saber/src/Compiler.ts | 7 ++++--- packages/saber/src/Pages.ts | 5 +++-- packages/saber/src/WebpackUtils.ts | 5 +++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/saber/src/BrowserApi.ts b/packages/saber/src/BrowserApi.ts index dd215feaf..6d4db833c 100644 --- a/packages/saber/src/BrowserApi.ts +++ b/packages/saber/src/BrowserApi.ts @@ -1,10 +1,11 @@ import path from 'path' import { fs, slash } from 'saber-utils' +import { Saber } from './' export class BrowserApi extends Set { - api: TODO + api: Saber - constructor(api: TODO) { + constructor(api: Saber) { super() this.api = api } diff --git a/packages/saber/src/Compiler.ts b/packages/saber/src/Compiler.ts index 2f24b7457..b939b1711 100644 --- a/packages/saber/src/Compiler.ts +++ b/packages/saber/src/Compiler.ts @@ -1,13 +1,14 @@ import { EventEmitter } from 'events' import WebpackChain from 'webpack-chain' import { Compiler as WebpackCompiler } from 'webpack' +import { Saber } from './' export class Compiler extends EventEmitter { type: string - api: TODO + api: Saber status: 'waiting' | 'success' | 'building' | 'error' - constructor(type: string, api: TODO) { + constructor(type: string, api: Saber) { super() this.type = type this.api = api @@ -38,7 +39,7 @@ export class Compiler extends EventEmitter { } const allCompilers = { ready: true, hasError: false } - Object.values(context.api.compilers).forEach(({ status }: TODO) => { + Object.values(context.api.compilers).forEach(({ status }) => { if (status !== 'success' && status !== 'error') { allCompilers.ready = false } diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts index 78a188797..e5085548e 100644 --- a/packages/saber/src/Pages.ts +++ b/packages/saber/src/Pages.ts @@ -6,6 +6,7 @@ import merge from 'lodash.merge' import getPermalink from './utils/getPermalink' import getPageType from './utils/getPageType' import { prefixAssets } from './utils/assetsAttribute' +import { Saber } from './' // 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)))?)(_|-))?(.+$)/ @@ -104,10 +105,10 @@ export interface IPage { } export class Pages extends Map { - api: TODO + api: Saber redirectRoutes: Map - constructor(api: TODO) { + constructor(api: Saber) { super() this.api = api this.redirectRoutes = new Map() diff --git a/packages/saber/src/WebpackUtils.ts b/packages/saber/src/WebpackUtils.ts index 8be14406c..19e9479a9 100644 --- a/packages/saber/src/WebpackUtils.ts +++ b/packages/saber/src/WebpackUtils.ts @@ -1,10 +1,11 @@ import path from 'path' import { Rule } from 'webpack-chain' +import { Saber } from './' export class WebpackUtils { - api: TODO + api: Saber - constructor(api: TODO) { + constructor(api: Saber) { this.api = api } From 62ed64d7eeab55ea1cd57c187e15650fcf9d71ab Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 23:08:00 +0800 Subject: [PATCH 19/30] remove TODOs related to hooks --- packages/saber/src/Pages.ts | 12 ++--- packages/saber/src/Transformers.ts | 2 +- packages/saber/src/hooks.ts | 44 +++++++++++++++++ packages/saber/src/index.ts | 76 ++++++++---------------------- 4 files changed, 68 insertions(+), 66 deletions(-) create mode 100644 packages/saber/src/hooks.ts diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts index e5085548e..779c02afd 100644 --- a/packages/saber/src/Pages.ts +++ b/packages/saber/src/Pages.ts @@ -7,6 +7,7 @@ import getPermalink from './utils/getPermalink' import getPageType from './utils/getPageType' import { prefixAssets } from './utils/assetsAttribute' import { Saber } from './' +import { ITransformer } 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)))?)(_|-))?(.+$)/ @@ -156,16 +157,11 @@ export class Pages extends Map { if (!transformer) { log.warn(`No transformer was found for content type: ${page.contentType}`) - transformer = api.transformers.get('default') + transformer = api.transformers.get('default') as ITransformer } - // Get page attributes from the page content - if (transformer.parse) { - transformer.parse(page) - } - - // Transform page content - if (page.content && transformer.transform) { + // Transform page + if (transformer.transform) { transformer.transform(page) } diff --git a/packages/saber/src/Transformers.ts b/packages/saber/src/Transformers.ts index 009d8f6eb..164805b2b 100644 --- a/packages/saber/src/Transformers.ts +++ b/packages/saber/src/Transformers.ts @@ -2,7 +2,7 @@ import { ICreatePageInput, IPage } from './Pages' export interface ITransformer { extensions: string[] - parse?: (page: ICreatePageInput) => void + transform?: (page: ICreatePageInput) => void getPageComponent: (page: IPage) => string } diff --git a/packages/saber/src/hooks.ts b/packages/saber/src/hooks.ts new file mode 100644 index 000000000..dac93c5b5 --- /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 index 284d21cc1..dc2d93db4 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -5,9 +5,8 @@ import { fs } from 'saber-utils' import { log, colors, Log } from 'saber-log' import resolveFrom from 'resolve-from' import merge from 'lodash.merge' -import { SyncHook, AsyncSeriesHook, SyncWaterfallHook } from 'tapable' import getPort from 'get-port' -import { Pages } from './Pages' +import { Pages, IPage, ICreatePageInput } from './Pages' import { BrowserApi } from './BrowserApi' import { Transformers } from './Transformers' import configLoader from './utils/configLoader' @@ -15,6 +14,7 @@ import resolvePackage from './utils/resolvePackage' import builtinPlugins from './plugins' import { Compiler } from './Compiler' import { WebpackUtils } from './WebpackUtils' +import { hooks } from './hooks' export interface SaberConstructorOptions { cwd?: string @@ -66,6 +66,19 @@ export interface WebpackContext { 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 @@ -80,18 +93,7 @@ export interface SaberConfig { /** * Customize permalink format based on page types (page or post) */ - permalinks?: { - /** - * Permalink format for normal pages - * @default `/:slug.html` - */ - page?: string - /** - * Permalink format for posts - * @default `/posts/:slug.html` - */ - post?: string - } + permalinks?: Permalinks | ((page: ICreatePageInput) => Permalinks) renderer?: string /** Build configurations */ build?: { @@ -218,7 +220,7 @@ export class Saber { log: Log colors: typeof colors utils: typeof import('saber-utils') - hooks: TODO + hooks: typeof hooks transformers: Transformers runtimePolyfills: Set compilers: { @@ -248,48 +250,7 @@ export class Saber { 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.hooks = hooks this.transformers = new Transformers() this.runtimePolyfills = new Set() @@ -300,6 +261,7 @@ export class Saber { for (const hook of Object.keys(this.hooks)) { const ignoreNames = ['theme-node-api', 'user-node-api'] + // @ts-ignore this.hooks[hook].intercept({ register(tapInfo: TODO) { const { fn, name } = tapInfo From 0b1b38e22470a95a23f330037554404607ef6bbc Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 23:29:23 +0800 Subject: [PATCH 20/30] remove TODOs related to renderer remove custom renderer support (since we won't be able to add react support anytime soon) --- packages/saber/src/hooks.ts | 2 +- packages/saber/src/index.ts | 23 +++++++---------------- packages/saber/src/vue-renderer/index.js | 12 ++++++------ 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/packages/saber/src/hooks.ts b/packages/saber/src/hooks.ts index dac93c5b5..b5b16497f 100644 --- a/packages/saber/src/hooks.ts +++ b/packages/saber/src/hooks.ts @@ -2,7 +2,7 @@ import { SyncHook, AsyncSeriesHook, SyncWaterfallHook } from 'tapable' export const hooks = { // Before all user plugins have been applied - beforePlugins: new AsyncSeriesHook(), + beforePlugins: new AsyncSeriesHook(), filterPlugins: new SyncWaterfallHook(['plugins']), // After all user plugins have been applied afterPlugins: new AsyncSeriesHook(), diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index dc2d93db4..678554eea 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -15,6 +15,7 @@ import builtinPlugins from './plugins' import { Compiler } from './Compiler' import { WebpackUtils } from './WebpackUtils' import { hooks } from './hooks' +import { VueRenderer } from './vue-renderer' export interface SaberConstructorOptions { cwd?: string @@ -94,7 +95,6 @@ export interface SaberConfig { * Customize permalink format based on page types (page or post) */ permalinks?: Permalinks | ((page: ICreatePageInput) => Permalinks) - renderer?: string /** Build configurations */ build?: { /** @@ -226,8 +226,7 @@ export class Saber { compilers: { [k: string]: Compiler } - Renderer?: TODO - renderer?: TODO + renderer: VueRenderer pkg: { path?: string data: { @@ -298,6 +297,8 @@ export class Saber { // TODO: find a better way this.configDir = '' this.configPath = '' + + this.renderer = new VueRenderer() } get dev() { @@ -325,13 +326,7 @@ export class Saber { ) } - this.Renderer = this.config.renderer - ? resolvePackage(this.config.renderer, { - cwd: this.configDir || this.opts.cwd, - prefix: 'saber-renderer-' - }) - : require('./vue-renderer') - this.renderer = new this.Renderer(this) + this.renderer.init(this) // Load theme if (this.config.theme) { @@ -351,7 +346,7 @@ export class Saber { log.info(`Using theme: ${colors.dim(this.config.theme)}`) log.verbose(() => `Theme directory: ${colors.dim(this.theme)}`) } else { - this.theme = this.Renderer.defaultTheme + this.theme = this.renderer.defaultTheme } // Load built-in plugins @@ -504,11 +499,6 @@ export class Saber { return config } - getDocument(context: TODO) { - const initialHTML = this.Renderer.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` @@ -555,6 +545,7 @@ export class Saber { const { skipCompilation } = options await this.prepare() await this.run() + if (!skipCompilation) { await this.renderer.build() await this.hooks.afterBuild.promise() diff --git a/packages/saber/src/vue-renderer/index.js b/packages/saber/src/vue-renderer/index.js index 1805d6ff7..e5e8a039e 100644 --- a/packages/saber/src/vue-renderer/index.js +++ b/packages/saber/src/vue-renderer/index.js @@ -11,8 +11,8 @@ function resolveVueApp(...args) { 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() @@ -184,6 +184,10 @@ class VueRenderer { api.hooks.emitRoutes.tapPromise('vue-renderer', () => this.writeRoutes()) } + get defaultTheme() { + return resolveVueApp('theme') + } + async writeRoutes() { if (this._writingRoutes) { return @@ -562,10 +566,6 @@ class VueRenderer { } } -VueRenderer.defaultTheme = resolveVueApp('theme') - -module.exports = VueRenderer - function runCompiler(compiler) { return new Promise((resolve, reject) => { compiler.run((err, stats) => { From c731e6e7645bed5c27704428752fa57a24cebe2a Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 23:34:18 +0800 Subject: [PATCH 21/30] fix path to saber cli --- website/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/package.json b/website/package.json index cd13e0c91..90c99577c 100644 --- a/website/package.json +++ b/website/package.json @@ -2,8 +2,8 @@ "private": true, "name": "saber-website", "scripts": { - "dev": "node ../packages/saber/lib/cli.js", - "generate": "node ../packages/saber/lib/cli.js generate && yarn workspace saber build:typedoc" + "dev": "node ../packages/saber/dist/cli.js", + "generate": "node ../packages/saber/dist/cli.js generate && yarn workspace saber build:typedoc" }, "dependencies": { "date-fns": "1.30.1", From bd5300ef9eaa5534bc7a6b1086f9408ca646778a Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 23:42:35 +0800 Subject: [PATCH 22/30] make website a workspace to simplify commands --- CONTRIBUTING.md | 3 +-- package.json | 3 ++- website/package.json | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) 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/package.json b/package.json index f5230e290..ee3df538e 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,8 @@ }, "workspaces": [ "packages/*", - "other-packages/*" + "other-packages/*", + "website" ], "config": { "commitizen": { diff --git a/website/package.json b/website/package.json index 90c99577c..8b73c6e70 100644 --- a/website/package.json +++ b/website/package.json @@ -1,9 +1,10 @@ { "private": true, + "version": "0.0.0", "name": "saber-website", "scripts": { - "dev": "node ../packages/saber/dist/cli.js", - "generate": "node ../packages/saber/dist/cli.js generate && yarn workspace saber build:typedoc" + "dev": "saber", + "generate": "saber generate && yarn workspace saber build:typedoc" }, "dependencies": { "date-fns": "1.30.1", From e76923c423889a90e534e65900a4e0920036690e Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Fri, 1 Nov 2019 23:52:56 +0800 Subject: [PATCH 23/30] use the transform method --- packages/saber/src/plugins/transformer-components.js | 2 +- packages/saber/src/plugins/transformer-markdown.js | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/saber/src/plugins/transformer-components.js b/packages/saber/src/plugins/transformer-components.js index a6b3278b8..30bb02068 100644 --- a/packages/saber/src/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/src/plugins/transformer-markdown.js b/packages/saber/src/plugins/transformer-markdown.js index 96cfb192d..624301fa1 100644 --- a/packages/saber/src/plugins/transformer-markdown.js +++ b/packages/saber/src/plugins/transformer-markdown.js @@ -6,16 +6,14 @@ exports.name = 'builtin:transformer-markdown' exports.apply = api => { api.transformers.add('markdown', { extensions: ['md'], - parse(page) { + transform(page) { const { frontmatter, body } = require('../utils/parseFrontmatter')( page.content, page.internal.absolute ) Object.assign(page, frontmatter) page.content = body - }, - transform(page) { - transformMarkdown(api, page) + page.content = renderMarkdown(api, page) }, getPageComponent(page) { return ` @@ -29,7 +27,7 @@ exports.apply = api => { }) } -function transformMarkdown(api, page) { +function renderMarkdown(api, page) { const { configDir } = api const { markdown = {} } = api.config const env = { @@ -113,5 +111,5 @@ function transformMarkdown(api, page) { md.use(plugin.plugin, ...plugin.args) } - page.content = md.render(page.content, env) + return md.render(page.content, env) } From 34df6b56cd28e775245e22f23f007c4e75b2caee Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 13:31:23 +0800 Subject: [PATCH 24/30] remove more TODOs --- packages/saber/src/Pages.ts | 2 +- packages/saber/src/index.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts index 779c02afd..c66980aa9 100644 --- a/packages/saber/src/Pages.ts +++ b/packages/saber/src/Pages.ts @@ -254,7 +254,7 @@ export class Pages extends Map { } getPagePublicFields(page: string | IPage) { - let result: TODO = typeof page === 'string' ? this.get(page) : page + let result = typeof page === 'string' ? this.get(page) : page if (!result) { throw new Error(`The page doesn't exist`) diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index 678554eea..a15195838 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -258,11 +258,11 @@ export class Saber { client: new Compiler('client', this) } - for (const hook of Object.keys(this.hooks)) { + const hookNames = Object.keys(this.hooks) as Array + for (const hook of hookNames) { const ignoreNames = ['theme-node-api', 'user-node-api'] - // @ts-ignore this.hooks[hook].intercept({ - register(tapInfo: TODO) { + register(tapInfo) { const { fn, name } = tapInfo tapInfo.fn = (...args: any[]) => { if (!ignoreNames.includes(name)) { From df0930c9fba116b6889fa045a990580929b2729c Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 14:31:21 +0800 Subject: [PATCH 25/30] remove ts-ignore for api.config --- .vscode/settings.json | 10 + packages/saber/src/index.ts | 93 +-- packages/saber/src/plugins/watch-config.js | 63 -- packages/saber/src/plugins/watch-config.ts | 74 ++ .../saber/src/webpack/PrintStatusPlugin.js | 8 +- website/package.json | 2 +- yarn.lock | 768 +++++++++++++++++- 7 files changed, 891 insertions(+), 127 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 packages/saber/src/plugins/watch-config.js create mode 100644 packages/saber/src/plugins/watch-config.ts 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/packages/saber/src/index.ts b/packages/saber/src/index.ts index a15195838..c00d4a3b6 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -16,6 +16,7 @@ import { Compiler } from './Compiler' import { WebpackUtils } from './WebpackUtils' import { hooks } from './hooks' import { VueRenderer } from './vue-renderer' +import validateConfig from './utils/validateConfig' export interface SaberConstructorOptions { cwd?: string @@ -212,7 +213,6 @@ export interface MarkdownPlugin { export class Saber { opts: SaberOptions initialConfig: SaberConfig - // @ts-ignore config: Required pages: Pages browserApi: BrowserApi @@ -236,6 +236,7 @@ export class Saber { configDir?: string configPath?: string theme?: string + actualServerPort?: number constructor(opts: SaberConstructorOptions = {}, config: SaberConfig = {}) { this.opts = { @@ -299,6 +300,38 @@ export class Saber { 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: Required, configPath?: string) { + this.config = config + this.configPath = configPath + this.configDir = configPath && path.dirname(configPath) } get dev() { @@ -310,22 +343,6 @@ export class Saber { } async prepare() { - // 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(), this.configPath) - )}` - ) - } - this.renderer.init(this) // Load theme @@ -336,7 +353,7 @@ export class Saber { }) // 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)) { + if (this.theme.includes('node_modules')) { const distDir = path.join(this.theme, 'dist') if (fs.existsSync(distDir)) { this.theme = distDir @@ -351,7 +368,8 @@ export class Saber { // Load built-in plugins for (const plugin of builtinPlugins) { - await this.applyPlugin(require(plugin.resolve)) + const resolvedPlugin = require(plugin.resolve) + await this.applyPlugin(resolvedPlugin.default || resolvedPlugin) } // Load user plugins @@ -373,34 +391,6 @@ export class Saber { await this.hooks.afterPlugins.promise() } - async setConfig(config: SaberConfig, configPath = this.configPath) { - this.configPath = configPath - if (configPath) { - this.configDir = path.dirname(configPath) - } else { - this.configDir = undefined - } - - const initialRun = !this.config - // @ts-ignore - 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 - // @ts-ignore - this.config.server._originalPort = port - if (initialRun && port) { - this.config.server.port = await getPort({ - port: getPort.makeRange(port, port + 1000), - host: this.config.server.host - }) - } - } - async applyPlugin( plugin: SaberPlugin, options?: any, @@ -561,7 +551,14 @@ export class Saber { const server = http.createServer(this.renderer.getRequestHandler()) - server.listen(this.config.server.port, this.config.server.host) + // 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() { diff --git a/packages/saber/src/plugins/watch-config.js b/packages/saber/src/plugins/watch-config.js deleted file mode 100644 index 4f67d2b41..000000000 --- a/packages/saber/src/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/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/src/webpack/PrintStatusPlugin.js b/packages/saber/src/webpack/PrintStatusPlugin.js index fd46543e6..5d9dc5a28 100644 --- a/packages/saber/src/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/website/package.json b/website/package.json index 8b73c6e70..0d2bcf39a 100644 --- a/website/package.json +++ b/website/package.json @@ -1,7 +1,7 @@ { "private": true, "version": "0.0.0", - "name": "saber-website", + "name": "website", "scripts": { "dev": "saber", "generate": "saber generate && yarn workspace saber build:typedoc" diff --git a/yarn.lock b/yarn.lock index 51f310462..6dd11b448 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" @@ -2546,6 +2569,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" @@ -2573,6 +2601,27 @@ ajv@^6.1.0, ajv@^6.10.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" @@ -2829,6 +2878,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" @@ -2839,6 +2908,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" @@ -3001,6 +3078,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" @@ -3062,6 +3146,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" @@ -3142,6 +3234,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" @@ -3234,6 +3335,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" @@ -3401,6 +3507,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" @@ -4088,6 +4199,13 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +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" resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -4101,6 +4219,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" @@ -4117,6 +4243,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" @@ -4172,6 +4305,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" @@ -4333,7 +4471,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== @@ -4353,14 +4491,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.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== @@ -4411,6 +4549,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" @@ -4590,7 +4735,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= @@ -4634,6 +4779,19 @@ dir-glob@^2.2.2: dependencies: path-type "^3.0.0" +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: + 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" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4782,6 +4940,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" @@ -4834,6 +4997,13 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +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: + once "^1.4.0" + enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" @@ -4870,6 +5040,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" @@ -4915,6 +5093,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" @@ -5092,6 +5275,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" @@ -5161,6 +5349,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" @@ -5508,6 +5701,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" @@ -5521,6 +5719,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" @@ -5545,6 +5750,11 @@ for-own@^1.0.0: 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" resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -5844,6 +6054,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" @@ -5903,6 +6118,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" @@ -5986,11 +6209,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" @@ -6118,6 +6356,11 @@ 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" @@ -6137,6 +6380,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" @@ -6299,6 +6550,22 @@ 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== +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" resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -6522,6 +6789,11 @@ is-buffer@^1.1.5: 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" @@ -6849,6 +7121,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" @@ -7703,6 +7980,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" @@ -8009,6 +8291,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +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" resolved "https://registry.yarnpkg.com/markdown-it-footnote/-/markdown-it-footnote-3.0.2.tgz#1575ee7a093648d4e096aa33386b058d92ac8bc1" @@ -8202,6 +8489,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" @@ -8320,6 +8612,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" @@ -8386,6 +8683,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" @@ -8408,6 +8710,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" @@ -8437,6 +8744,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" @@ -8562,6 +8876,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" @@ -8609,6 +8942,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" @@ -8730,7 +9068,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== @@ -8740,6 +9078,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" @@ -8747,6 +9090,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" @@ -8776,7 +9124,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== @@ -8838,6 +9186,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" @@ -9399,6 +9755,14 @@ 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-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" @@ -9409,6 +9773,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" @@ -9428,6 +9834,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" @@ -9456,6 +9893,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" @@ -9464,6 +9970,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" @@ -9558,6 +10078,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" @@ -9648,6 +10175,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" @@ -9668,6 +10268,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" @@ -9677,7 +10300,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== @@ -9710,6 +10333,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" @@ -9719,6 +10356,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" @@ -9740,6 +10386,27 @@ 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" @@ -9794,6 +10461,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" @@ -10089,7 +10763,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= @@ -10250,7 +10924,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== @@ -10315,6 +10989,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" @@ -10829,7 +11510,7 @@ 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@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", 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== @@ -10970,6 +11651,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" @@ -11183,6 +11878,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" @@ -11575,6 +12277,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" @@ -11588,6 +12300,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" @@ -11714,7 +12437,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= @@ -11778,6 +12501,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" @@ -12117,6 +12845,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" @@ -12491,6 +13227,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" @@ -12921,3 +13662,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= From 3da6a2aeb6d3fa22617a3b69a6646e9bd9e344f4 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 15:05:00 +0800 Subject: [PATCH 26/30] disable @typescript-eslint/triple-slash-reference for now --- packages/saber/.eslintrc.js | 5 ++++- packages/saber/src/index.ts | 7 ++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/saber/.eslintrc.js b/packages/saber/.eslintrc.js index 887c5d2c1..1789a71a0 100644 --- a/packages/saber/.eslintrc.js +++ b/packages/saber/.eslintrc.js @@ -1,3 +1,6 @@ module.exports = { - extends: 'saber' + extends: 'saber', + rules: { + '@typescript-eslint/triple-slash-reference': 'off' + } } diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index c00d4a3b6..b825c0898 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -6,7 +6,7 @@ import { log, colors, Log } from 'saber-log' import resolveFrom from 'resolve-from' import merge from 'lodash.merge' import getPort from 'get-port' -import { Pages, IPage, ICreatePageInput } from './Pages' +import { Pages, ICreatePageInput } from './Pages' import { BrowserApi } from './BrowserApi' import { Transformers } from './Transformers' import configLoader from './utils/configLoader' @@ -417,9 +417,7 @@ export class Saber { p = { resolve: p } } - // Help!!! - // @ts-ignore - const location = resolveFrom(this.configDir, p.resolve) + const location = resolveFrom(this.configDir as string, p.resolve) const resolvedPlugin = { ...require(location), @@ -472,7 +470,6 @@ export class Saber { } resolveOutDir(...args: string[]) { - // @ts-ignore return this.resolveCwd(this.config.build.outDir, ...args) } From 63c79f5ec94c16fa3d44f0afc5cf35ef3d1e911f Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 15:59:55 +0800 Subject: [PATCH 27/30] no ts-ignore --- packages/saber/declarations.d.ts | 2 + packages/saber/package.json | 3 +- packages/saber/src/Pages.ts | 44 ++++++------- packages/saber/src/Transformers.ts | 12 ++-- packages/saber/src/index.ts | 10 +-- .../{validateConfig.js => validateConfig.ts} | 61 +++++++++++++---- yarn.lock | 65 ++++--------------- 7 files changed, 96 insertions(+), 101 deletions(-) rename packages/saber/src/utils/{validateConfig.js => validateConfig.ts} (61%) diff --git a/packages/saber/declarations.d.ts b/packages/saber/declarations.d.ts index 98ed3ca5d..468931d5c 100644 --- a/packages/saber/declarations.d.ts +++ b/packages/saber/declarations.d.ts @@ -1 +1,3 @@ declare type TODO = any + +declare type NonUndefined = A extends undefined ? never : A diff --git a/packages/saber/package.json b/packages/saber/package.json index 4de401977..7d209e6a7 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -57,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", @@ -79,7 +79,6 @@ "@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" diff --git a/packages/saber/src/Pages.ts b/packages/saber/src/Pages.ts index c66980aa9..a1f4865ea 100644 --- a/packages/saber/src/Pages.ts +++ b/packages/saber/src/Pages.ts @@ -7,12 +7,12 @@ import getPermalink from './utils/getPermalink' import getPageType from './utils/getPageType' import { prefixAssets } from './utils/assetsAttribute' import { Saber } from './' -import { ITransformer } from './Transformers' +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 IRedirecrtRouteConfig { +export interface RedirecrtRouteConfig { fromPath: string toPath: string /** Make it a permanent redirect; defaults to temporary */ @@ -25,7 +25,7 @@ export interface IRedirecrtRouteConfig { isPermanent?: boolean } -export interface IFileInfo { +export interface FileInfo { relative: string absolute: string birthtime: Date @@ -33,17 +33,17 @@ export interface IFileInfo { content: string } -export interface IAssets { +export interface Assets { [k: string]: string } -export interface ICreatePageOptions { +export interface CreatePageOptions { /** Default to `true` when not specified */ normalize?: boolean - file?: IFileInfo + file?: FileInfo } -export interface ICreatePageInput { +export interface CreatePageInput { type: 'page' | 'post' content: string /** @@ -61,7 +61,7 @@ export interface ICreatePageInput { */ permalink?: string slug?: string - assets?: IAssets + assets?: Assets /** Internal info is automatically removed from your app runtime for security reasons */ internal: { /** A unique ID for this page */ @@ -84,7 +84,7 @@ export interface ICreatePageInput { [k: string]: any } -export interface IPage { +export interface Page { type: 'page' | 'post' content: string contentType: string @@ -100,14 +100,14 @@ export interface IPage { /** @private */ saved?: boolean } - attributes: IPage - assets: IAssets + attributes: Page + assets: Assets [k: string]: any } -export class Pages extends Map { +export class Pages extends Map { api: Saber - redirectRoutes: Map + redirectRoutes: Map constructor(api: Saber) { super() @@ -115,7 +115,7 @@ export class Pages extends Map { this.redirectRoutes = new Map() } - normalizePage(_page: ICreatePageInput, file?: IFileInfo): IPage { + normalizePage(_page: CreatePageInput, file?: FileInfo): Page { const { api } = this let page = merge( @@ -157,7 +157,7 @@ export class Pages extends Map { if (!transformer) { log.warn(`No transformer was found for content type: ${page.contentType}`) - transformer = api.transformers.get('default') as ITransformer + transformer = api.transformers.get('default') as Transformer } // Transform page @@ -226,16 +226,16 @@ export class Pages extends Map { // TODO: remove in 1.0 page.attributes = page - return page as IPage + return page as Page } - createPage(page: ICreatePageInput, options: ICreatePageOptions = {}) { + createPage(page: CreatePageInput, options: CreatePageOptions = {}) { const { file, normalize } = options if (normalize !== false) { page = this.normalizePage(page, file) } - this.set(page.internal.id, page as IPage) + this.set(page.internal.id, page as Page) } removePage(id: string) { @@ -244,7 +244,7 @@ export class Pages extends Map { }) } - removeWhere(getCondition: (page: IPage) => boolean) { + removeWhere(getCondition: (page: Page) => boolean) { for (const page of this.values()) { const condition = getCondition(page) if (condition) { @@ -253,7 +253,7 @@ export class Pages extends Map { } } - getPagePublicFields(page: string | IPage) { + getPagePublicFields(page: string | Page) { let result = typeof page === 'string' ? this.get(page) : page if (!result) { @@ -267,10 +267,10 @@ export class Pages extends Map { // TODO: remove in 1.0 result.attributes = result - return result as Omit + return result as Omit } - createRedirect(_configs: IRedirecrtRouteConfig | IRedirecrtRouteConfig[]) { + createRedirect(_configs: RedirecrtRouteConfig | RedirecrtRouteConfig[]) { if (_configs) { const configs = Array.isArray(_configs) ? _configs : [_configs] diff --git a/packages/saber/src/Transformers.ts b/packages/saber/src/Transformers.ts index 164805b2b..64b73225b 100644 --- a/packages/saber/src/Transformers.ts +++ b/packages/saber/src/Transformers.ts @@ -1,13 +1,13 @@ -import { ICreatePageInput, IPage } from './Pages' +import { CreatePageInput, Page } from './Pages' -export interface ITransformer { +export interface Transformer { extensions: string[] - transform?: (page: ICreatePageInput) => void - getPageComponent: (page: IPage) => string + transform?: (page: CreatePageInput) => void + getPageComponent: (page: Page) => string } export class Transformers { - transformers: Map + transformers: Map constructor() { this.transformers = new Map() @@ -17,7 +17,7 @@ export class Transformers { return require('./utils/parseFrontmatter') } - add(contentType: string, transformer: ITransformer) { + add(contentType: string, transformer: Transformer) { this.transformers.set(contentType, transformer) } diff --git a/packages/saber/src/index.ts b/packages/saber/src/index.ts index b825c0898..bd08d6c4f 100644 --- a/packages/saber/src/index.ts +++ b/packages/saber/src/index.ts @@ -6,7 +6,7 @@ import { log, colors, Log } from 'saber-log' import resolveFrom from 'resolve-from' import merge from 'lodash.merge' import getPort from 'get-port' -import { Pages, ICreatePageInput } from './Pages' +import { Pages, CreatePageInput } from './Pages' import { BrowserApi } from './BrowserApi' import { Transformers } from './Transformers' import configLoader from './utils/configLoader' @@ -16,7 +16,7 @@ import { Compiler } from './Compiler' import { WebpackUtils } from './WebpackUtils' import { hooks } from './hooks' import { VueRenderer } from './vue-renderer' -import validateConfig from './utils/validateConfig' +import { validateConfig, ValidatedSaberConfig } from './utils/validateConfig' export interface SaberConstructorOptions { cwd?: string @@ -95,7 +95,7 @@ export interface SaberConfig { /** * Customize permalink format based on page types (page or post) */ - permalinks?: Permalinks | ((page: ICreatePageInput) => Permalinks) + permalinks?: Permalinks | ((page: CreatePageInput) => Permalinks) /** Build configurations */ build?: { /** @@ -213,7 +213,7 @@ export interface MarkdownPlugin { export class Saber { opts: SaberOptions initialConfig: SaberConfig - config: Required + config: ValidatedSaberConfig pages: Pages browserApi: BrowserApi webpackUtils: WebpackUtils @@ -328,7 +328,7 @@ export class Saber { } } - setConfig(config: Required, configPath?: string) { + setConfig(config: ValidatedSaberConfig, configPath?: string) { this.config = config this.configPath = configPath this.configDir = configPath && path.dirname(configPath) diff --git a/packages/saber/src/utils/validateConfig.js b/packages/saber/src/utils/validateConfig.ts similarity index 61% rename from packages/saber/src/utils/validateConfig.js rename to packages/saber/src/utils/validateConfig.ts index a1e553cbb..434df2075 100644 --- a/packages/saber/src/utils/validateConfig.js +++ b/packages/saber/src/utils/validateConfig.ts @@ -1,12 +1,40 @@ -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?', @@ -80,22 +108,27 @@ module.exports = (config, { dev }) => { } ) - const locales = struct('object?') + const locales = struct('object', {}) - const template = struct({ - openLinkInNewTab: 'boolean', - plugins: ['any'] - }, { - openLinkInNewTab: true, - plugins: [] - }) + 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, diff --git a/yarn.lock b/yarn.lock index 6dd11b448..795bc7a17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2218,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" @@ -3724,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" @@ -5733,23 +5718,11 @@ 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" @@ -7784,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== @@ -8590,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" @@ -11602,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" @@ -12200,13 +12156,13 @@ 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" @@ -12474,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" From 335add94f797ffe1bf907f35a1f9accf6aa01b00 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 16:18:56 +0800 Subject: [PATCH 28/30] resolve lint errors --- other-packages/eslint-config-saber/index.js | 3 +- packages/saber/src/Compiler.ts | 1 + packages/saber/src/plugins/config-css.js | 2 +- .../src/plugins/emit-runtime-polyfills.js | 1 + .../saber/src/plugins/extend-browser-api.js | 18 ++++-- packages/saber/src/plugins/extend-node-api.js | 61 ++++++++++--------- packages/saber/src/plugins/layouts.js | 40 +++++++----- packages/saber/src/plugins/source-pages.js | 14 ++++- .../saber/src/plugins/transformer-markdown.js | 52 ++++++++-------- packages/saber/src/utils/assetsAttribute.ts | 7 +-- packages/saber/src/utils/getPermalink.js | 16 ++--- packages/saber/src/utils/serveDir.js | 2 +- packages/saber/src/vue-renderer/index.js | 35 +++++------ 13 files changed, 141 insertions(+), 111 deletions(-) diff --git a/other-packages/eslint-config-saber/index.js b/other-packages/eslint-config-saber/index.js index 2a1aee8d7..8191e3b73 100644 --- a/other-packages/eslint-config-saber/index.js +++ b/other-packages/eslint-config-saber/index.js @@ -36,6 +36,7 @@ module.exports = { requireLast: false } } - ] + ], + '@typescript-eslint/prefer-includes': 'off' } } diff --git a/packages/saber/src/Compiler.ts b/packages/saber/src/Compiler.ts index b939b1711..0ffdf4063 100644 --- a/packages/saber/src/Compiler.ts +++ b/packages/saber/src/Compiler.ts @@ -17,6 +17,7 @@ export class Compiler extends EventEmitter { 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 { diff --git a/packages/saber/src/plugins/config-css.js b/packages/saber/src/plugins/config-css.js index 2d934785b..3d0e8f8be 100644 --- a/packages/saber/src/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/src/plugins/emit-runtime-polyfills.js b/packages/saber/src/plugins/emit-runtime-polyfills.js index a5289ef85..7a8d76dd8 100644 --- a/packages/saber/src/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/src/plugins/extend-browser-api.js b/packages/saber/src/plugins/extend-browser-api.js index 43ad66135..e608fd9d9 100644 --- a/packages/saber/src/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/src/plugins/extend-node-api.js b/packages/saber/src/plugins/extend-node-api.js index cdd087045..38e16e20c 100644 --- a/packages/saber/src/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/src/plugins/layouts.js b/packages/saber/src/plugins/layouts.js index c617a7bbe..0853f3b65 100644 --- a/packages/saber/src/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/src/plugins/source-pages.js b/packages/saber/src/plugins/source-pages.js index af1bfeb55..844c2d249 100644 --- a/packages/saber/src/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/src/plugins/transformer-markdown.js b/packages/saber/src/plugins/transformer-markdown.js index 624301fa1..4499898a2 100644 --- a/packages/saber/src/plugins/transformer-markdown.js +++ b/packages/saber/src/plugins/transformer-markdown.js @@ -1,32 +1,6 @@ const ConfigChain = require('../config-chain') const resolvePackage = require('../utils/resolvePackage') -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 ` - - ` - } - }) -} - function renderMarkdown(api, page) { const { configDir } = api const { markdown = {} } = api.config @@ -113,3 +87,29 @@ function renderMarkdown(api, page) { 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/utils/assetsAttribute.ts b/packages/saber/src/utils/assetsAttribute.ts index f12c076ec..0652a6950 100644 --- a/packages/saber/src/utils/assetsAttribute.ts +++ b/packages/saber/src/utils/assetsAttribute.ts @@ -6,7 +6,7 @@ import { slash, isAbsoluteUrl } from 'saber-utils' * When it's an absolute url or starting with `/` * `/path` is used to reference files in static folder */ -const isExternal = (str: string) => isAbsoluteUrl(str) || /^\//.test(str) +const isExternal = (str: string) => isAbsoluteUrl(str) || str.startsWith('/') const MARK = '@@!!SABER_ASSET_MARK_e5968b9a!!@@' @@ -42,7 +42,4 @@ const requireAssets = (str: string) => return `require("${p1}")` }) -export { - prefixAssets, - requireAssets -} +export { prefixAssets, requireAssets } diff --git a/packages/saber/src/utils/getPermalink.js b/packages/saber/src/utils/getPermalink.js index 41ee8ca88..4725df4a3 100644 --- a/packages/saber/src/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 @@ -54,11 +62,3 @@ module.exports = (localeNames, page, permalinks) => { .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/src/utils/serveDir.js b/packages/saber/src/utils/serveDir.js index f6e9bcde7..60761cf42 100644 --- a/packages/saber/src/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/src/vue-renderer/index.js b/packages/saber/src/vue-renderer/index.js index e5e8a039e..f8e84a470 100644 --- a/packages/saber/src/vue-renderer/index.js +++ b/packages/saber/src/vue-renderer/index.js @@ -5,10 +5,27 @@ 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' export class VueRenderer { @@ -476,6 +493,7 @@ export class VueRenderer { }) 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 || '') @@ -565,20 +583,3 @@ export class VueRenderer { return server.handler } } - -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(/\/$/, '') -} From 4672fb5b218e893c46d6cf7ceaffed897a308a64 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 17:55:32 +0800 Subject: [PATCH 29/30] fix jest config --- package.json | 1 + packages/saber/jest.config.js | 4 ++++ packages/saber/package.json | 3 +-- yarn.lock | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 packages/saber/jest.config.js diff --git a/package.json b/package.json index ee3df538e..841e9256e 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "enquirer": "^2.3.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", diff --git a/packages/saber/jest.config.js b/packages/saber/jest.config.js new file mode 100644 index 000000000..20821eedd --- /dev/null +++ b/packages/saber/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + testPathIgnorePatterns: ['/node_modules/', '/types/'], + testEnvironment: 'node' +} diff --git a/packages/saber/package.json b/packages/saber/package.json index 7d209e6a7..af6cc3bd2 100644 --- a/packages/saber/package.json +++ b/packages/saber/package.json @@ -10,7 +10,7 @@ "/declarations.d.ts" ], "scripts": { - "test": "tsc && jest --env node", + "test": "tsc && jest", "prepublishOnly": "yarn build", "build": "tsc", "lint": "eslint src --ext js,ts", @@ -80,7 +80,6 @@ "@types/lodash.merge": "^4.6.6", "@types/resolve-from": "5.0.1", "@types/webpack": "4.39.1", - "jest": "24.9.0", "markdown-it-footnote": "3.0.2" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 795bc7a17..33a50905f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7540,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== From b6b935a39630b3908129e3b58c4a8bc7ea68587f Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Sat, 2 Nov 2019 17:57:23 +0800 Subject: [PATCH 30/30] exclude dist --- packages/saber/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/saber/jest.config.js b/packages/saber/jest.config.js index 20821eedd..3bffd7323 100644 --- a/packages/saber/jest.config.js +++ b/packages/saber/jest.config.js @@ -1,4 +1,4 @@ module.exports = { - testPathIgnorePatterns: ['/node_modules/', '/types/'], + testPathIgnorePatterns: ['/node_modules/', '/types/', '/dist/'], testEnvironment: 'node' }