From dd0f34e7a9d1156d5ddf70040d20ade244c9e902 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 6 Feb 2020 00:05:04 +0100 Subject: [PATCH 1/9] Create package ipynb2html-viewer --- .vscode/extensions.json | 1 + .vscode/settings.json | 5 + README.adoc | 2 + package.json | 9 + packages/ipynb2html-viewer/index.html | 31 + packages/ipynb2html-viewer/package.json | 57 + packages/ipynb2html-viewer/postcss.config.js | 13 + packages/ipynb2html-viewer/rollup.config.js | 98 ++ packages/ipynb2html-viewer/src/actions.ts | 220 +++ packages/ipynb2html-viewer/src/effects.ts | 113 ++ packages/ipynb2html-viewer/src/events.ts | 7 + .../ipynb2html-viewer/src/icons/alert.svg | 3 + .../src/icons/chevron-down.svg | 3 + .../src/icons/chevron-up.svg | 3 + .../ipynb2html-viewer/src/icons/folder.svg | 3 + .../ipynb2html-viewer/src/icons/github.svg | 3 + .../ipynb2html-viewer/src/icons/logo.src.svg | 84 ++ packages/ipynb2html-viewer/src/icons/logo.svg | 6 + packages/ipynb2html-viewer/src/index.ts | 20 + packages/ipynb2html-viewer/src/types.ts | 18 + packages/ipynb2html-viewer/src/utils.ts | 25 + packages/ipynb2html-viewer/src/view.pcss | 281 ++++ packages/ipynb2html-viewer/src/view.tsx | 78 ++ packages/ipynb2html-viewer/tsconfig.json | 16 + tsconfig.json | 1 + types/@hyperapp/events.d.ts | 62 + types/@hyperapp/http.d.ts | 64 + types/@hyperapp/index.d.ts | 1 + types/hyperapp.d.ts | 232 +++ yarn.lock | 1240 ++++++++++++++++- 30 files changed, 2683 insertions(+), 16 deletions(-) create mode 100644 packages/ipynb2html-viewer/index.html create mode 100644 packages/ipynb2html-viewer/package.json create mode 100644 packages/ipynb2html-viewer/postcss.config.js create mode 100644 packages/ipynb2html-viewer/rollup.config.js create mode 100644 packages/ipynb2html-viewer/src/actions.ts create mode 100644 packages/ipynb2html-viewer/src/effects.ts create mode 100644 packages/ipynb2html-viewer/src/events.ts create mode 100644 packages/ipynb2html-viewer/src/icons/alert.svg create mode 100644 packages/ipynb2html-viewer/src/icons/chevron-down.svg create mode 100644 packages/ipynb2html-viewer/src/icons/chevron-up.svg create mode 100644 packages/ipynb2html-viewer/src/icons/folder.svg create mode 100644 packages/ipynb2html-viewer/src/icons/github.svg create mode 100644 packages/ipynb2html-viewer/src/icons/logo.src.svg create mode 100644 packages/ipynb2html-viewer/src/icons/logo.svg create mode 100644 packages/ipynb2html-viewer/src/index.ts create mode 100644 packages/ipynb2html-viewer/src/types.ts create mode 100644 packages/ipynb2html-viewer/src/utils.ts create mode 100644 packages/ipynb2html-viewer/src/view.pcss create mode 100644 packages/ipynb2html-viewer/src/view.tsx create mode 100644 packages/ipynb2html-viewer/tsconfig.json create mode 100644 types/@hyperapp/events.d.ts create mode 100644 types/@hyperapp/http.d.ts create mode 100644 types/@hyperapp/index.d.ts create mode 100644 types/hyperapp.d.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 83f99da..ea5c3c0 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,7 @@ // List of extensions which should be recommended for users of this workspace. "recommendations": [ + "cpylua.language-postcss", "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "gamunu.vscode-yarn", diff --git a/.vscode/settings.json b/.vscode/settings.json index b7f924c..f67f0d5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,11 @@ "typescript" ], + "files.associations": { + // XXX: PostCSS extension doesn't provide as nice autocompletion as + // VSCode's native CSS support. But this doesn't understand nested rules... + "*.pcss": "css", + }, "files.encoding": "utf8", "files.eol": "\n", "files.exclude": { diff --git a/README.adoc b/README.adoc index dd607d9..c5f8f03 100644 --- a/README.adoc +++ b/README.adoc @@ -215,6 +215,7 @@ ifndef::npm-readme[] * https://yarnpkg.com[yarn] for dependencies management and building * https://eslint.org[ESLint] for linting JS/TypeScript code * https://jestjs.io[Jest] for testing +* https://postcss.org[PostCSS] for transforming stylesheets to plain CSS * https://rollupjs.org[Rollup] for building single-file bundles @@ -254,6 +255,7 @@ If you use Visual Studio Code, you should install the following extensions: * link:{vs-marketplace-uri}ryanluker.vscode-coverage-gutters[Coverage Gutters] * link:{vs-marketplace-uri}EditorConfig.EditorConfig[EditorConfig for VS Code] * link:{vs-marketplace-uri}dbaeumer.vscode-eslint[ESLint] +* link:{vs-marketplace-uri}cpylua.language-postcss[language-postcss] * link:{vs-marketplace-uri}Orta.vscode-jest[Jest] (and link:{vs-marketplace-uri}shtian.jest-snippets-standard[Jest Snippets Standard Style]) * link:{vs-marketplace-uri}gamunu.vscode-yarn[yarn] diff --git a/package.json b/package.json index 8638be1..08b587d 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "arrify": "^2.0.1", "common-path-prefix": "^3.0.0", "core-js": "^3.6.5", + "cssnano": "^4.1.10", "csso-cli": "^3.0.0", "dedent": "^0.7.0", "eslint": "^7.3.0", @@ -46,13 +47,21 @@ "nodom": "^2.3.0", "npm-run-all": "^4.1.5", "patch-package": "^6.2.2", + "postcss": "^7.0.32", + "postcss-cli": "^7.1.1", + "postcss-inline-svg": "^4.1.0", + "postcss-nesting": "^7.0.1", + "postcss-sort-media-queries": "^1.6.24", "postinstall-postinstall": "^2.1.0", "rimraf": "^3.0.2", "rollup": "^2.17.1", "rollup-plugin-add-git-msg": "^1.1.0", + "rollup-plugin-conditional": "^3.1.2", "rollup-plugin-executable": "^1.6.0", + "rollup-plugin-livereload": "^1.3.0", "rollup-plugin-node-externals": "^2.2.0", "rollup-plugin-node-license": "^0.2.0", + "rollup-plugin-serve": "^1.0.1", "rollup-plugin-terser": "^6.1.0", "rollup-plugin-typescript2": "^0.27.1", "tar": "^5.0.5", diff --git a/packages/ipynb2html-viewer/index.html b/packages/ipynb2html-viewer/index.html new file mode 100644 index 0000000..95a3968 --- /dev/null +++ b/packages/ipynb2html-viewer/index.html @@ -0,0 +1,31 @@ + + + + + + .ipynb viewer + + + + + + + + + + + diff --git a/packages/ipynb2html-viewer/package.json b/packages/ipynb2html-viewer/package.json new file mode 100644 index 0000000..a92c4d7 --- /dev/null +++ b/packages/ipynb2html-viewer/package.json @@ -0,0 +1,57 @@ +{ + "name": "ipynb2html-viewer", + "version": "0.0.0", + "description": "Web viewer of Jupyter Notebooks", + "author": "Jakub Jirutka ", + "license": "MIT", + "homepage": "https://github.com/jirutka/ipynb2html", + "bugs": "https://github.com/jirutka/ipynb2html/issues", + "repository": { + "type": "git", + "url": "https://github.com/jirutka/ipynb2html.git" + }, + "keywords": [ + "browser", + "converter", + "ipython", + "jupyter", + "notebook", + "webapp" + ], + "main": "lib/index.js", + "browser": "dist/ipynb-viewer.min.js", + "types": "lib/index.d.ts", + "files": [ + "dist", + "lib", + "src", + "index.html" + ], + "scripts": { + "build": "run-p build-bundle build-css", + "build-bundle": "rollup -c", + "build-css": "run-p build-css:*", + "build-css:dev": "postcss src/view.pcss -o dist/ipynb-viewer.css", + "build-css:prod": "NODE_ENV=production postcss src/view.pcss -o dist/ipynb-viewer.min.css", + "build-ts": "ttsc --build", + "bundle": "run-s build", + "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", + "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", + "prepublishOnly": "run-s readme2md", + "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", + "watch": "run-p watch-bundle watch-css", + "watch-bundle": "rollup -c --watch", + "watch-css": "postcss src/view.pcss -o dist/ipynb-viewer.css --watch", + "watch-ts": "tssc --build --watch" + }, + "dependencies": { + "@hyperapp/events": "^0.0.4", + "hyperapp": "^2.0.4", + "ipynb2html": "0.3.0" + }, + "browserslist": [ + ">0.5%", + "Firefox ESR", + "not dead" + ] +} diff --git a/packages/ipynb2html-viewer/postcss.config.js b/packages/ipynb2html-viewer/postcss.config.js new file mode 100644 index 0000000..e2f994e --- /dev/null +++ b/packages/ipynb2html-viewer/postcss.config.js @@ -0,0 +1,13 @@ +module.exports = ({ env }) => ({ + map: { + inline: false, + }, + plugins: { + 'postcss-inline-svg': {}, + 'postcss-nesting': {}, + 'postcss-sort-media-queries': { + sort: 'desktop-first', + }, + 'cssnano': env === 'production', + }, +}) diff --git a/packages/ipynb2html-viewer/rollup.config.js b/packages/ipynb2html-viewer/rollup.config.js new file mode 100644 index 0000000..8a05662 --- /dev/null +++ b/packages/ipynb2html-viewer/rollup.config.js @@ -0,0 +1,98 @@ +import addGitMsg from 'rollup-plugin-add-git-msg' +import babel from '@rollup/plugin-babel' +import commonjs from '@rollup/plugin-commonjs' +import conditional from 'rollup-plugin-conditional' +import license from 'rollup-plugin-node-license' +import livereload from 'rollup-plugin-livereload' +import resolve from '@rollup/plugin-node-resolve' +import serve from 'rollup-plugin-serve' +import { terser } from 'rollup-plugin-terser' +import ttypescript from 'ttypescript' +import typescript from 'rollup-plugin-typescript2' + +import pkg from './package.json' + + +const extensions = ['.mjs', '.js', '.ts'] + +export default { + input: 'src/index.ts', + plugins: [ + // Transpile TypeScript sources to JS. + typescript({ + typescript: ttypescript, + tsconfigOverride: { + compilerOptions: { + target: 'ES5', + module: 'ESNext', + declaration: false, + declarationMap: false, + composite: false, + incremental: true, + }, + }, + clean: true, + }), + // Resolve node modules. + resolve({ + extensions, + mainFields: ['browser', 'module', 'main'], + }), + // Convert CommonJS modules to ES6 modules. + commonjs(), + // Transpile all sources for older browsers and inject needed polyfills. + babel({ + babelrc: false, + // To avoid Babel injecting core-js polyfills into core-js. + exclude: [/node_modules\/core-js\//], + extensions, + presets: [ + [ + '@babel/env', { + corejs: 3, + debug: false, + modules: false, + useBuiltIns: 'usage', // inject polyfills + // targets: reads from "browserslist" in package.json + }, + ], + ], + }), + // Add git tag, commit SHA and build date at top of the file. + addGitMsg({ + copyright: [ + pkg.author, + '* This project is licensed under the terms of the MIT license.' + ].join('\n'), + }), + // Generate table of the bundled packages at top of the file. + license({ format: 'table' }), + // Use only when running in watch mode... + conditional(process.env.ROLLUP_WATCH, () => [ + serve(), + livereload(), + ]), + ], + external: [ + 'ipynb2html', + ], + output: [false, true].map(minify => ({ + name: 'init', + file: `dist/ipynb-viewer${minify ? '.min.js' : '.js'}`, + format: 'umd', + sourcemap: true, + globals: { + ipynb2html: 'ipynb2html', + }, + plugins: [ + // Minify JS when building .min.js file and *not* running in watch mode. + !process.env.ROLLUP_WATCH && minify && terser({ + ecma: 5, + output: { + // Preserve comment injected by addGitMsg and license. + comments: RegExp(`(?:\\$\\{${pkg.name}\\}|Bundled npm packages)`), + }, + }), + ].filter(Boolean), + })), +} diff --git a/packages/ipynb2html-viewer/src/actions.ts b/packages/ipynb2html-viewer/src/actions.ts new file mode 100644 index 0000000..80c89bb --- /dev/null +++ b/packages/ipynb2html-viewer/src/actions.ts @@ -0,0 +1,220 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-use-before-define */ +import * as hyperapp from 'hyperapp' +import * as ipynb2html from 'ipynb2html' + +import { + historyPush, + readFile, + readFromStorage, + request, + ResponseError, + setPageTitle, + writeToStorage, +} from './effects' +import { State, ErrorMessage } from './types' + + +type Action = hyperapp.Action +type Dispatchable = hyperapp.Dispatchable + + +const initState: State = { + mainView: 'BLANK', + fileUrl: null, + title: '.ipynb viewer', + notebook: null, + error: null, + dragover: false, + historyIdx: 0, + fromHistory: false, +} + + +// Helpers + +// FIXME: This is just a quick & dirty solution. +const isNotebook = (notebook: any): notebook is ipynb2html.Notebook => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + return typeof notebook === 'object' && !!notebook?.metadata && !!notebook?.cells +} + +const isFileDataTransfer = (transfer: DataTransfer | null): transfer is DataTransfer => { + return !!transfer && !!Array.from(transfer.items).find(item => item.kind === 'file') +} + +const rewriteFileUrl = (url: string): string => { + const { host, pathname } = new URL(url) + + switch (host) { + case 'gist.github.com': + return `https://gist.githubusercontent.com${pathname}/raw/` + default: + return url + } +} + +const stateToUrlQuery = (state: State): string => { + const params: Record = {} + if (state.fileUrl) { + params.url = state.fileUrl + } + return new URLSearchParams(params).toString() +} + + +// Actions + +export const Initialize: hyperapp.ActionOnInit = () => { + const url = new URLSearchParams(window.location.search).get('url') + + return url + ? (FetchNotebook({ ...initState, fileUrl: url }) as hyperapp.DispatchableOnInit) + : initState +} + +export const ShowNotebook: Action = (state, notebook): Dispatchable => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + notebook = typeof notebook === 'string' ? JSON.parse(notebook) : notebook + + if (!isNotebook(notebook)) { + return [ShowError, { + title: 'Invalid Format', + message: 'The file is not in Jupyter Notebook format.', + }] + } + const title = ipynb2html.readNotebookTitle(notebook) ?? initState.title + + const effects = [ + setPageTitle(title), + ] + if (!state.fromHistory) { + state.historyIdx++ + + effects.push( + writeToStorage({ + key: `notebook/${state.historyIdx}`, + value: notebook, + session: true, + }), + historyPush({ + state: { ...state, notebook: null }, + urlQuery: stateToUrlQuery(state), + }), + ) + } + + return [ + { + ...state, + title, + notebook, + mainView: 'NOTEBOOK', + fromHistory: false, + error: null, + }, + ...effects, + ] +} + +export const ShowBlank: Action = (state): Dispatchable => [ + (state = { ...state, mainView: 'BLANK', fileUrl: null, notebook: null }), + setPageTitle(initState.title!), + historyPush({ + state, + urlQuery: '', + }), +] + +export const ShowError: Action = (state, error): Dispatchable => { + let title = 'title' in error ? error.title : 'Error' + let message = error.message + let detail = error.message + + if (error instanceof SyntaxError && error.message.startsWith('JSON.parse:')) { + title = 'Malformed Notebook' + message = 'The file is not a valid JSON.' + } else if (error instanceof ResponseError) { + title = 'HTTP Error' + message = 'Failed to fetch notebook from the given address.' + } else if (error instanceof TypeError + && (error.message === 'Failed to fetch' || error.message.startsWith('NetworkError ')) + ) { + title = 'Network Error' + message = 'Failed to fetch notebook from the given address.' + } else { + detail = '' + } + console.error(error) + + return { + ...state, + mainView: 'ERROR', + error: { title, message, detail }, + notebook: null, + } +} + +export const SubmitFileUrl: Action = (state): Dispatchable => ( + state.fileUrl ? FetchNotebook : ShowBlank +) + +export const SetFileUrl: Action = (state, fileUrl): Dispatchable => ( + { ...state, fileUrl } +) + +export const FetchNotebook: Action = (state): Dispatchable => [ + { ...state, mainView: 'FETCHING', notebook: null }, + request({ + url: rewriteFileUrl(state.fileUrl!), + options: { + mode: 'cors', + redirect: 'follow', + referrerPolicy: 'no-referrer', + }, + onSuccess: ShowNotebook, + onError: ShowError, + }), +] + +export const LoadLocalFile: Action = (state, file): Dispatchable => [ + { ...state, fileUrl: null }, + readFile({ file, onSuccess: ShowNotebook }), +] + +export const HistoryPop: Action = (state, event): Dispatchable => [ + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + { ...(state = event.state ?? state), fromHistory: true }, + readFromStorage({ + key: `notebook/${state.historyIdx}`, + session: true, + onSuccess: ShowNotebook, + }), +] + +export const DragOver: Action = (state, event): Dispatchable => { + if (!isFileDataTransfer(event.dataTransfer)) { + return state + } + event.preventDefault() + event.dataTransfer.dropEffect = 'copy' + + return { ...state, dragover: true } +} + +export const DragLeave: Action = (state): Dispatchable => ({ + ...state, + dragover: false, +}) + +export const DropFile: Action = (state, event): Dispatchable => { + if (!isFileDataTransfer(event.dataTransfer)) { + return state + } + event.preventDefault() + const file = event.dataTransfer.files?.[0] + + return [ + { ...state, dragover: false, fileUrl: null }, + readFile({ file, onSuccess: ShowNotebook }), + ] +} diff --git a/packages/ipynb2html-viewer/src/effects.ts b/packages/ipynb2html-viewer/src/effects.ts new file mode 100644 index 0000000..54e45c8 --- /dev/null +++ b/packages/ipynb2html-viewer/src/effects.ts @@ -0,0 +1,113 @@ +import { AnyState, Dispatch, Dispatchable, Effect } from 'hyperapp' + + +function fx ( + fn: (dispatch: Dispatch, props: Props) => void, +) { + return (props: Props): Effect => [fn, props] +} + + +type HistoryPush = (props: { state: any, urlQuery?: string }) => Effect + +export const historyPush: HistoryPush = fx((_, { state, urlQuery }) => { + const url = new URL(window.location.href) + if (urlQuery != null) { + url.search = urlQuery + } + history.pushState(state, document.title, url.href) +}) + + +type ReadFile = (props: { + file: File, + onSuccess: Dispatchable, + onError?: Dispatchable, +}) => Effect + +export const readFile: ReadFile = fx((dispatch, { file, onSuccess, onError }) => { + const reader = new FileReader() + + reader.onload = (event) => { + dispatch(onSuccess, event.target?.result?.toString() ?? '') + } + if (onError) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + reader.onerror = () => dispatch(onError, reader.error!) + } + reader.readAsText(file, 'utf8') +}) + + +type ReadFromStorage = (props: { + key: string, + session: boolean, + onSuccess: Dispatchable, +}) => Effect + +export const readFromStorage: ReadFromStorage = fx((dispatch, { key, session, onSuccess }) => { + const storage = session ? window.sessionStorage : window.localStorage + + const value = storage.getItem(key) + if (value == null) { + // FIXME + } else { + dispatch(onSuccess, JSON.parse(value)) + } +}) + + +type WriteToStorage = (props: { + key: string, + value: unknown, + session: boolean, +}) => Effect + +export const writeToStorage: WriteToStorage = fx((_, { key, value, session }) => { + const storage = session ? window.sessionStorage : window.localStorage + + if (value == null) { + storage.removeItem(key) + } else { + storage.setItem(key, JSON.stringify(value)) + } +}) + + +export class ResponseError extends Error { + constructor (readonly response: Response) { + super(`${response.status} ${response.statusText}`) + // See https://github.com/Microsoft/TypeScript/issues/13965 *facepalm* + Object.setPrototypeOf(this, new.target.prototype) + } +} + +type Request = (props: { + url: Parameters[0], + options?: Parameters[1], + onSuccess: Dispatchable, + onError: Dispatchable, +}) => Effect + +export const request: Request = fx((dispatch, { url, options = {}, onSuccess, onError }) => { + options.headers = { + ...options.headers, + accept: 'application/json', + } + fetch(url, options) + .then(async response => { + if (!response.ok) { + throw new ResponseError(response) + } + return await response.json() as unknown + }) + .then(result => dispatch(onSuccess, result)) + .catch(error => dispatch(onError, error)) +}) + + +type SetPageTitle = (title: string) => Effect + +export const setPageTitle: SetPageTitle = fx((_, title: string) => { + document.title = title +}) diff --git a/packages/ipynb2html-viewer/src/events.ts b/packages/ipynb2html-viewer/src/events.ts new file mode 100644 index 0000000..e3d59b1 --- /dev/null +++ b/packages/ipynb2html-viewer/src/events.ts @@ -0,0 +1,7 @@ +import { createOnCustomEvent } from '@hyperapp/events' + + +export const onDragOver = createOnCustomEvent('dragover') +export const onDragLeave = createOnCustomEvent('dragleave') +export const onDrop = createOnCustomEvent('drop') +export const onPopState = createOnCustomEvent('popstate') diff --git a/packages/ipynb2html-viewer/src/icons/alert.svg b/packages/ipynb2html-viewer/src/icons/alert.svg new file mode 100644 index 0000000..6145366 --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ipynb2html-viewer/src/icons/chevron-down.svg b/packages/ipynb2html-viewer/src/icons/chevron-down.svg new file mode 100644 index 0000000..7c9f57b --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/chevron-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ipynb2html-viewer/src/icons/chevron-up.svg b/packages/ipynb2html-viewer/src/icons/chevron-up.svg new file mode 100644 index 0000000..485566e --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/chevron-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ipynb2html-viewer/src/icons/folder.svg b/packages/ipynb2html-viewer/src/icons/folder.svg new file mode 100644 index 0000000..d3447ce --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/folder.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ipynb2html-viewer/src/icons/github.svg b/packages/ipynb2html-viewer/src/icons/github.svg new file mode 100644 index 0000000..60bc95d --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ipynb2html-viewer/src/icons/logo.src.svg b/packages/ipynb2html-viewer/src/icons/logo.src.svg new file mode 100644 index 0000000..61f242e --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/logo.src.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + ipynb + viewer + + diff --git a/packages/ipynb2html-viewer/src/icons/logo.svg b/packages/ipynb2html-viewer/src/icons/logo.svg new file mode 100644 index 0000000..65a9f2f --- /dev/null +++ b/packages/ipynb2html-viewer/src/icons/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/ipynb2html-viewer/src/index.ts b/packages/ipynb2html-viewer/src/index.ts new file mode 100644 index 0000000..e2d3e99 --- /dev/null +++ b/packages/ipynb2html-viewer/src/index.ts @@ -0,0 +1,20 @@ +import { app } from 'hyperapp' +import { preventDefault } from '@hyperapp/events' + +import * as actions from './actions' +import { onDragLeave, onDragOver, onDrop, onPopState } from './events' +import { State } from './types' +import { App } from './view' + + +export default (): void => app({ + node: document.body, + init: actions.Initialize, + view: App, + subscriptions: () => [ + onDragOver(actions.DragOver), + onDragLeave(preventDefault(actions.DragLeave)), + onDrop(actions.DropFile), + onPopState(actions.HistoryPop), + ], +}) diff --git a/packages/ipynb2html-viewer/src/types.ts b/packages/ipynb2html-viewer/src/types.ts new file mode 100644 index 0000000..93eb1f0 --- /dev/null +++ b/packages/ipynb2html-viewer/src/types.ts @@ -0,0 +1,18 @@ +import { Notebook } from 'ipynb2html' + +export type State = { + fileUrl: string | null, + title: string | null, + notebook: Notebook | null, + error: ErrorMessage | null, + dragover: boolean, + historyIdx: number, + fromHistory: boolean, + mainView: 'BLANK' | 'ERROR' | 'FETCHING' | 'NOTEBOOK', +} + +export type ErrorMessage = { + title: string, + message: string, + detail?: string, +} diff --git a/packages/ipynb2html-viewer/src/utils.ts b/packages/ipynb2html-viewer/src/utils.ts new file mode 100644 index 0000000..2270ec4 --- /dev/null +++ b/packages/ipynb2html-viewer/src/utils.ts @@ -0,0 +1,25 @@ +import { AnyState, Dispatch, Effect } from 'hyperapp' + + +export function fx ( + fn: (dispatch: Dispatch, props: Props) => void, +) { + return (props: Props): Effect => [fn, props] +} + +export function match any}> ( + value: T, + matcher: U, +): U extends {[K in T]: (k: K) => infer R} ? R : never { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return matcher[value](value) +} + +export function targetFile (event: Event): File { + const file = (event.target as HTMLInputElement | null)?.files?.[0] + + if (!file) { + throw TypeError("Event doesn't contain any file") + } + return file +} diff --git a/packages/ipynb2html-viewer/src/view.pcss b/packages/ipynb2html-viewer/src/view.pcss new file mode 100644 index 0000000..1cde32e --- /dev/null +++ b/packages/ipynb2html-viewer/src/view.pcss @@ -0,0 +1,281 @@ +html, +body { + margin: 0; + padding: 0; + color: #2a2a2a; + font-family: sans-serif; + background-color: #dedede; + + @media print { + color: black; + background-color: white; + } +} + +code, +pre { + font-size: 0.85rem; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 1.6em; + position: relative; +} + +h1 .anchor, +h2 .anchor, +h3 .anchor, +h4 .anchor, +h5 .anchor, +h6 .anchor { + display: block; + width: 1em; + left: -1em; + height: 100%; + position: absolute; +} + +h1:hover .anchor, +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 50'%3E%3Cg fill='none' stroke='%23000' stroke-width='3'%3E%3Cpath d='M26.1 22a5.8 5.8 0 00-8.1 0l-9.6 9.5a5.8 5.8 0 008.2 8.2l5.8-5.9'/%3E%3Cpath d='M23.6 28a5.8 5.8 0 008.2 0l9.5-9.5a5.8 5.8 0 00-8.1-8.2l-5.8 5.9'/%3E%3C/g%3E%3C/svg%3E") no-repeat 100% center; +} + +table { + border: 1px solid #cfcfcf; + border-collapse: collapse; +} + +th { + font-weight: 600; +} + +td, +th { + padding: 0.2em 0.4em; + border: 1px solid #cfcfcf; +} + +thead tr, +tbody tr:nth-child(even) { + background-color: #f7f7f7; +} + +thead tr:hover, +tbody tr:hover { + background-color: #cfcfcf; +} + +.dragover { + opacity: 0.5; +} + +#header { + display: flex; + flex-wrap: nowrap; + align-items: center; + color: #fff; + background-color: #24292e; + + @media print { + display: none; + } + + & .logo { + flex-shrink: 0; + width: 7.5rem; + height: 2rem; + margin: 0 0.6rem; + font-size: 0; + background: svg-load('icons/logo.svg', fill: #fff) no-repeat left center / contain; + + @media (max-width: 40em) { + width: 3.8rem; + margin: 0 0.2rem 0 0.5rem; + background-size: 6.8rem 1.75rem; + } + } + + & .file-input { + position: absolute !important; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + white-space: nowrap; + border: 0; + clip: rect(0, 0, 0, 0); + } + + & .file-label { + display: inline-block; + flex-shrink: 0; + width: 1.5rem; + height: 1.5rem; + margin: 0 0.8rem; + color: transparent; + background: svg-load('icons/folder.svg', fill: #ddd) no-repeat center / contain; + cursor: pointer; + + @media (max-width: 40em) { + margin: 0.6rem; + } + } + + & .url-form { + width: 100%; + } + + & .url-input { + box-sizing: border-box; + width: 100%; + margin: 0.6rem 0; + padding: 0 0.5em; + color: #fff; + font-size: 0.9rem; + line-height: 2; + background-color: hsla(0, 0%, 100%, 0.15); + border: 0; + border-radius: 0.2em; + } + + & .github-link { + display: block; + flex-shrink: 0; + width: 1.6rem; + height: 1.6rem; + margin: 0 1rem; + font-size: 0; + background: svg-load('icons/github.svg', fill: #eee) no-repeat center / contain; + + @media (max-width: 40em) { + margin: 0 0.5rem; + } + } +} + +.error { + display: table; + max-width: 28rem; + height: 6rem; + margin: 32vh auto 0 auto; + padding-left: 8.5rem; + background: svg-load('icons/alert.svg') no-repeat; + background-position: left top; + background-size: 6rem 6rem; + + @media (max-width: 40em) { + height: unset; + margin: 10vh auto 0 auto; + padding: 8rem 1rem 0 1rem; + text-align: center; + background-position: top center; + } + + & summary { + display: block; + font-size: 1.13em; + cursor: pointer; + + &::-webkit-details-marker { + display: none; + } + + &::after { + /* Expand arrow after the summary text. */ + display: inline-block; + width: 0.7em; + height: 0.7em; + margin-left: 0.5em; + background: svg-load('icons/chevron-down.svg') no-repeat center / contain; + content: ''; + } + } + + & details[open] summary::after { + /* Collapse arrow after the summary text. */ + background: svg-load('icons/chevron-up.svg') no-repeat center / contain; + } + + & details :not(summary) { + color: #666; + } + + & :first-child { + margin-top: 0; + } +} + +.fetching { + width: 12rem; + margin: 32vh auto 0 auto; + font-size: 1.13rem; + text-align: center; + + &::before { + /* Spinner */ + display: block; + width: 4rem; + height: 4rem; + margin: 0 auto 2rem auto; + border-top: 0.3rem solid #f37726; + border-right: 0.3rem solid transparent; + border-radius: 50%; + animation: rotation 1s linear infinite; + content: ""; + } +} + +.nb-notebook { + max-width: 45rem; + margin: 1rem auto 2rem auto; + padding: 3rem 6rem; + background-color: white; + box-shadow: 4px 4px 8px #cfcfcf, -4px -4px 8px #cfcfcf; + + @media screen and (max-width: 940px) { + max-width: none; + margin: 0; + padding-right: 3rem; + padding-left: 5rem; + box-shadow: none; + } + + @media screen and (max-width: 768px) { + padding: 0.1rem 5% 2rem 5%; + } + + @media print { + max-width: none; + margin: 0; + padding: 0 0 0 5rem; + box-shadow: none; + } +} + +.nb-output table { + font-size: 0.9em; +} + +@keyframes rotation { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +@page { + size: A4; + margin: 30mm 15mm 15mm 7mm; +} diff --git a/packages/ipynb2html-viewer/src/view.tsx b/packages/ipynb2html-viewer/src/view.tsx new file mode 100644 index 0000000..ed29972 --- /dev/null +++ b/packages/ipynb2html-viewer/src/view.tsx @@ -0,0 +1,78 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-use-before-define */ +import { h, Lazy, View } from 'hyperapp' +import { preventDefault, targetValue } from '@hyperapp/events' +import * as ipynb2html from 'ipynb2html' +import { $INLINE_JSON } from 'ts-transformer-inline-file' + +import * as actions from './actions' +import { State, ErrorMessage } from './types' +import { match, targetFile } from './utils' + + +const { homepage } = $INLINE_JSON<{ homepage: string }>('../package.json') +const renderNotebook = ipynb2html.createRenderer(document) + +export const App: View = (state) => ( + +
+
{ + match(state.mainView, { + ERROR: () => , + FETCHING: () => , + NOTEBOOK: () => , + BLANK: () => null, + }) + }
+ +) + +const Header: View> = ({ fileUrl }) => ( + +) + +const Notebook: View> = ({ notebook }) => ( +
+) + +const ErrorBox: View<{ error: ErrorMessage }> = ({ error }) => ( + +) + +const FetchingSpinner: View<{}> = () => ( + +) diff --git a/packages/ipynb2html-viewer/tsconfig.json b/packages/ipynb2html-viewer/tsconfig.json new file mode 100644 index 0000000..519fcf1 --- /dev/null +++ b/packages/ipynb2html-viewer/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "jsxFactory": "h", + "rootDir": "./src", + "outDir": "./lib", + "tsBuildInfoFile": "./.tsbuildinfo", + "baseUrl": ".", + }, + "include": [ + "./src", + ], + "references": [ + { "path": "../ipynb2html" }, + ], +} diff --git a/tsconfig.json b/tsconfig.json index e8ed575..1f8f8f3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,5 +4,6 @@ { "path": "./packages/ipynb2html-core" }, { "path": "./packages/ipynb2html" }, { "path": "./packages/ipynb2html-cli" }, + { "path": "./packages/ipynb2html-viewer" }, ] } diff --git a/types/@hyperapp/events.d.ts b/types/@hyperapp/events.d.ts new file mode 100644 index 0000000..631cc9a --- /dev/null +++ b/types/@hyperapp/events.d.ts @@ -0,0 +1,62 @@ +type EventArgument = Parameters>[0]; + +export declare function onMouseEnter(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onMouseLeave(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onMouseMove(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onMouseOut(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onMouseOver(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onMouseUp(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onTouchStart(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onTouchMove(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onTouchEnd(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onKeyDown(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onKeyUp(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onFocus(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; +export declare function onBlur(action: hyperappSubset.Dispatchable>): hyperappSubset.Subscription; + +export declare function onAnimationFrame(action: hyperappSubset.Dispatchable): hyperappSubset.Subscription; + +export declare function eventKey(e: Event): any; +export declare function eventDetail(e: Event): any; +export declare function targetChecked(e: Event): any; +export declare function targetValue(e: Event): any; + +export declare function eventOptions(props: { preventDefault?: boolean, stopPropagation?: boolean, action?: hyperappSubset.Dispatchable }): hyperappSubset.Effect; +export declare function preventDefault(action: hyperappSubset.Dispatchable): hyperappSubset.Action; +export declare function stopPropagation(action: hyperappSubset.Dispatchable): hyperappSubset.Action; + +export declare function dispatchCustomEvent(props: {name: string}): hyperappSubset.Action; +export declare function createOnCustomEvent(eventName: string): (action: hyperappSubset.Dispatchable) => hyperappSubset.Subscription; + +declare namespace hyperappSubset { + type AnyState = boolean | string | number | object | symbol | null | undefined; + + type PayloadCreator = ((data: DPayload) => CPayload); + + type Dispatchable = ( + State + | [State, ...Effect[]] + | ([Action, PayloadCreator]) + | ([Action, CPayload]) + | Action // (state) => ({ ... }) | (state) => ([{ ... }, effect1, ...]) + | Action // (state, data) => ({ ... }) | (state, data) => ([{ ... }, effect1, ...]) + ); + + type Dispatch = (obj: Dispatchable, data: NextPayload) => State; + + interface EffectRunner { + (dispatch: Dispatch, props: Props): void; + } + + type Effect = [EffectRunner, any] | [EffectRunner]; + + interface SubscriptionRunner { + (dispatch: Dispatch, props: Props): (() => void); + } + + type Subscription = [SubscriptionRunner, any] | [SubscriptionRunner]; + + interface Action { + (state: State, data: Payload): Dispatchable; + } +} diff --git a/types/@hyperapp/http.d.ts b/types/@hyperapp/http.d.ts new file mode 100644 index 0000000..d1261e3 --- /dev/null +++ b/types/@hyperapp/http.d.ts @@ -0,0 +1,64 @@ +export declare function request(props: RequestProps): hyperappSubset.Effect; + +type RequestProps = + JsonRequestProps | TextRequestProps | FormDataRequestProps | BlobRequestProps | ArrayBufferRequestProps; + +interface RequestPropsBase { + url: Parameters[0]; + options?: Parameters[1]; +} + +interface JsonRequestProps extends RequestPropsBase { + expect?: 'json'; + action: hyperappSubset.Dispatchable; +} +interface TextRequestProps extends RequestPropsBase { + expect: 'text'; + action: hyperappSubset.Dispatchable; +} +interface FormDataRequestProps extends RequestPropsBase { + expect: 'formData'; + action: hyperappSubset.Dispatchable; +} +interface BlobRequestProps extends RequestPropsBase { + expect: 'blob'; + action: hyperappSubset.Dispatchable; +} +interface ArrayBufferRequestProps extends RequestPropsBase { + expect: 'arrayBuffer'; + action: hyperappSubset.Dispatchable; +} + + +declare namespace hyperappSubset { + type AnyState = boolean | string | number | object | symbol | null | undefined; + + type PayloadCreator = ((data: DPayload) => CPayload); + + type Dispatchable = ( + State + | [State, ...Effect[]] + | ([Action, PayloadCreator]) + | ([Action, CPayload]) + | Action // (state) => ({ ... }) | (state) => ([{ ... }, effect1, ...]) + | Action // (state, data) => ({ ... }) | (state, data) => ([{ ... }, effect1, ...]) + ); + + type Dispatch = (obj: Dispatchable, data: NextPayload) => State; + + interface EffectRunner { + (dispatch: Dispatch, props: Props): void; + } + + type Effect = [EffectRunner, any] | [EffectRunner]; + + interface SubscriptionRunner { + (dispatch: Dispatch, props: Props): (() => void); + } + + type Subscription = [SubscriptionRunner, any] | [SubscriptionRunner]; + + interface Action { + (state: State, data: Payload): Dispatchable; + } +} diff --git a/types/@hyperapp/index.d.ts b/types/@hyperapp/index.d.ts new file mode 100644 index 0000000..5924f9c --- /dev/null +++ b/types/@hyperapp/index.d.ts @@ -0,0 +1 @@ +declare module '@hyperapp' {} diff --git a/types/hyperapp.d.ts b/types/hyperapp.d.ts new file mode 100644 index 0000000..9c54686 --- /dev/null +++ b/types/hyperapp.d.ts @@ -0,0 +1,232 @@ +// TypeScript Version: 3.0 + +export as namespace hyperapp; + +/** @namespace [VDOM] */ + +/** The VDOM representation of an Element. + * + * @memberOf [VDOM] + */ +export interface VNode { + name: unknown; // protected (internal implementation) + props: unknown; // protected (internal implementation) + children: unknown; // protected (internal implementation) + node: unknown; // protected (internal implementation) + type: unknown; // protected (internal implementation) + key: unknown; // protected (internal implementation) + lazy: unknown; // protected (internal implementation) +} + +/** + * Possibles state types (all except Array and Function) + */ +export type AnyState = boolean | string | number | object | symbol | null | undefined; + +/** + * Possibles children types + */ +export type Children = VNode | string | number | null + +/** A Component is a function that returns a custom VNode or View. + * + * @memberOf [VDOM] + */ +export interface Component { + (attributes: Attributes, children: VNode[]): VNode | null; +} + +/** The soft way to create a VNode. + * @param name An element name or a Component function + * @param attributes Any valid HTML atributes, events, styles, and meta data + * @param children The children of the VNode + * @returns A VNode tree. + * + * @memberOf [VDOM] + */ +export function h( + nodeName: Component | string, + attributes?: Attributes, + ...children: (Children | Children[])[] +): VNode + +/** @namespace [App] */ + +type PayloadCreator = ((data: DPayload) => CPayload); + +/** Usable to 1st argument of `dispatch`. Usually, This is a reference to an action to be invoked by Hyperapp, with custom payload + * + * @memberOf [App] + */ +export type Dispatchable = + | State + | [State, ...Effect[]] + | [Action, PayloadCreator] + | [Action, CPayload] + | Action // (state) => ({ ... }) | (state) => ([{ ... }, effect1, ...]) + | Action; // (state, data) => ({ ... }) | (state, data) => ([{ ... }, effect1, ...]) + +/** Usable to 1st argument of `dispatch`. make strict for `init` (initial state and default payload are always undefined) + * + * @memberOf [App] + */ +export type DispatchableOnInit = + | State + | [State, ...Effect[]] + | [ActionOnInit, CPayload] + | ActionOnInit; + +/** A definition of `dispatch`. This is passed as an argument of effect or subscription runner. + * + * @memberOf [App] + */ +export type Dispatch = (obj: Dispatchable, data: Payload) => State; + + +/** An effect runner. It is actually invoked when effect is reflected. + * + * @memberOf [App] + */ +export interface EffectRunner { + (dispatch: Dispatch, props: Props): void; +} + +/** An effect as the result of an action. + * + * @memberOf [App] + */ +export type Effect = [EffectRunner, Props] | [EffectRunner]; + +/** An subscription runner. It is actually invoked when effect is reflected. + * + * @memberOf [App] + */ +export interface SubscriptionRunner { + (dispatch: Dispatch, props: Props): (() => void); +} + +/** A reference to an subscription to be managed by Hyperapp, with optional additional parameters + * + * @memberOf [App] + */ +export type Subscription = [SubscriptionRunner, Props] | [SubscriptionRunner]; + +/** The interface for a single action implementation. + * + * @memberOf [App] + */ +export interface Action { + (state: State, data: Payload): Dispatchable; +} + +/** The interface for a single action implementation, make strict for `init` (given state are always undefined) + * + * @memberOf [App] + */ +export interface ActionOnInit { + (state: undefined, data: Payload): DispatchableOnInit; +} + +/** The view function describes the application UI as a tree of VNodes. + * @returns A VNode tree. + * @memberOf [App] + */ +export interface View { + (state: State): VNode | null; +} + +/** The possible response types for the subscription callback for an application + * + * @memberOf [App] + */ +export type SubscriptionsResult = (Subscription | Falsy)[] | Subscription | Falsy; + +type Falsy = false | '' | 0 | null | undefined; + +/** The lazy view. {@link https://github.com/jorgebucaran/hyperapp/issues/721#issuecomment-402150041} + * + * @memberOf [App] + */ +export function Lazy(props: { view: (props: Props) => VNode | null, key?: string | number | null } & Props): VNode; + +/** The set of properties that define a Hyperapp application. + * + * @memberOf [App] + */ +export interface AppProps { + init?: DispatchableOnInit; + view?: View; + node: Element; + subscriptions?: (state: State) => SubscriptionsResult; + middleware?: Middleware; +} + +/** The middleware function. + * + * @memberOf [App] + */ +export type MiddlewareFunc = (action: Dispatchable, props: unknown) => void; + +/** The middleware. + * + * @memberOf [App] + */ +export type Middleware = (func: MiddlewareFunc) => MiddlewareFunc; + +/** The app() call creates and renders a new application. + * + * @param state The state object. + * @param actions The actions object implementation. + * @param view The view function. + * @param container The DOM element where the app will be rendered to. + * @returns The actions wired to the application. + * @memberOf [App] + */ +export function app(app: AppProps): void + +/** + * The class attribute value of VNode. + * + * @memberOf [VDOM] + */ +export type ClassAttribute = ClassAttributeItem | null | undefined; + +type ClassAttributeItem = (string | { [key: string]: any } | ClassAttributeArray); + +interface ClassAttributeArray extends Array { } + +/** + * The style attribute value of VNode. + * + * @memberOf [VDOM] + */ +export type StyleAttribute = { [key: string]: any } | null | string | undefined; + +// e.g.) onchange, onupdate, oninput, ... +// +type EventKeys = keyof GlobalEventHandlers; + +type EventParameterType = Parameters>[0]; + +//
+// -> A: Dispatchable +// +type EventAttributes = Partial<{ [key in EventKeys]: Dispatchable> }>; + +export interface JSXAttribute extends EventAttributes { + key?: PropertyKey; + class?: ClassAttribute; + style?: StyleAttribute; + + [attrName: string]: any; +} + +// /** @namespace [JSX] */ +declare global { + namespace JSX { + interface Element extends VNode { } + interface IntrinsicElements { + [elemName: string]: JSXAttribute; + } + } +} diff --git a/yarn.lock b/yarn.lock index 657628d..b493f8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1013,6 +1013,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@hyperapp/events@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@hyperapp/events/-/events-0.0.4.tgz#dfeae0f0a0ad1b414034da5f7057611aa30cbfca" + integrity sha512-3X8D/ZsuLDu5GjVMhyGv4Hy16FsY1uPNln90J19MaTd22yvUyIqjhDj4J+1OK2cteFPAZPjfmf6lplJA+K+J3A== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" @@ -1205,6 +1210,27 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + "@rollup/plugin-babel@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.0.3.tgz#8d416865b0da79faf14e07c8d233abe0eac0753d" @@ -1387,6 +1413,11 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + "@types/resolve@0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -1522,6 +1553,11 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + anser@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" @@ -1646,6 +1682,11 @@ array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1696,11 +1737,21 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -1817,6 +1868,11 @@ bluebird@^3.5.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1860,7 +1916,7 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.12.0, browserslist@^4.8.3: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.3: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -1915,6 +1971,25 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1925,6 +2000,21 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0: + version "1.0.30001085" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001085.tgz#bed28bd51ff7425d33ee23e730c7f3b703711db6" + integrity sha512-x0YRFRE0pmOD90z+9Xk7jwO58p4feVNXP+U8kWV+Uo/HADyrgESlepzIkUqPgaXkpyceZU6siM1gsK7sHgplqA== + caniuse-lite@^1.0.30001219: version "1.0.30001236" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" @@ -2004,6 +2094,21 @@ chokidar@^3.0.0: optionalDependencies: fsevents "~2.1.2" +chokidar@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" @@ -2054,6 +2159,15 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + collect-v8-coverage@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" @@ -2067,7 +2181,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2086,11 +2200,27 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" @@ -2103,7 +2233,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0: 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== @@ -2168,6 +2298,16 @@ core-util-is@1.0.2: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2197,6 +2337,34 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0, css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -2205,6 +2373,92 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" +css-tree@1.0.0-alpha.39: + version "1.0.0-alpha.39" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" + integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== + dependencies: + mdn-data "2.0.6" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" + integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + csso-cli@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/csso-cli/-/csso-cli-3.0.0.tgz#a9bf3de54067c5ee471cbdb002da2b89ece9b06c" @@ -2222,6 +2476,13 @@ csso@^4.0.1: dependencies: css-tree "1.0.0-alpha.37" +csso@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" + integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== + dependencies: + css-tree "1.0.0-alpha.39" + cssom@^0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -2338,6 +2599,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +dependency-graph@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" + integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -2371,6 +2637,13 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2386,6 +2659,32 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -2393,6 +2692,28 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2430,6 +2751,16 @@ enquirer@^2.3.5: dependencies: ansi-colors "^3.2.1" +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2454,6 +2785,23 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" +es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.0" + is-regex "^1.1.0" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2810,6 +3158,18 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2820,6 +3180,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -2957,6 +3324,16 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -2994,6 +3371,11 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-stdin@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" + integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3027,6 +3409,13 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3056,6 +3445,18 @@ globalyzer@^0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== +globby@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globrex@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" @@ -3149,7 +3550,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: +has@^1.0.0, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -3161,16 +3562,41 @@ he@1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + highlight.js@^10.7.3: version "10.7.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +highlightjs@^9.16.2: + version "9.16.2" + resolved "https://registry.yarnpkg.com/highlightjs/-/highlightjs-9.16.2.tgz#07ea6cc7c93340fc440734fb7abf28558f1f0fe1" + integrity sha512-FK1vmMj8BbEipEy8DLIvp71t5UsC7n2D6En/UfM/91PCwmOpj6f2iu0Y0coRC62KSRHHC+dquM2xMULV/X7NFg== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -3183,6 +3609,18 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== +htmlparser2@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -3197,6 +3635,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +hyperapp@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hyperapp/-/hyperapp-2.0.4.tgz#0be1bdfe46b28c73677adc408ce3a73f79cfd03f" + integrity sha512-1S0KIsyB97S/hH84GkuYjH/hmpnNQ546x16o+W7g/PnszxRPudJlwwGBKKnaRVL7x+dyevvuX4XLH67FooEt4w== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3214,6 +3657,26 @@ ignore@^5.1.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -3222,6 +3685,13 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -3235,6 +3705,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3243,7 +3718,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.1, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3260,6 +3735,27 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ipynb2html-core@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ipynb2html-core/-/ipynb2html-core-0.2.0.tgz#af3c89fb13358ee90e6f50d71c40f57fb8e82eff" + integrity sha512-UxFyJaN/+rChuUT5MG8+CX6nFpEw9LYBD1MyNy7xJZG5PMr9G+cA0EdsAo7OOYOjLROIIck4VIS9+o3Isu6FjQ== + +ipynb2html@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ipynb2html/-/ipynb2html-0.2.0.tgz#9b0a6ba08c7a9d4c549faffaf13d8fcfc316ee08" + integrity sha512-WZOMF8CiXyotf7wHxvDRUOJYc3bkyDP/yjhWCrslEk0vLncdIbg8qKSaC51dOdXwrMM1Wg0t87xy8OlWuPbBag== + dependencies: + anser "^1.4.9" + highlightjs "^9.16.2" + ipynb2html-core "0.2.0" + katex "^0.11.1" + marked "^0.8.2" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -3279,6 +3775,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3296,6 +3797,11 @@ is-callable@^1.1.4, is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -3303,6 +3809,18 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3340,6 +3858,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3396,6 +3919,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -3422,6 +3950,18 @@ is-regex@^1.0.5: dependencies: has "^1.0.3" +is-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3437,6 +3977,13 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -4044,6 +4591,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4054,6 +4610,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +katex@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.11.1.tgz#df30ca40c565c9df01a466a00d53e079e84ffaa2" + integrity sha512-5oANDICCTX0NqYIyAiFCCwjQ7ERu3DQG2JFHLbYOf+fXaMoH8eg/zOq5WSYJsKMi/QebW+Eh3gSM+oss1H/bww== + dependencies: + commander "^2.19.0" + katex@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/katex/-/katex-0.13.11.tgz#66138ebf173f25ef130cd3a3ea3ea1d12a3f1362" @@ -4146,6 +4709,21 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +livereload-js@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.2.3.tgz#64beff07ce5b2a74485d1a08c2ec04ac68e021bc" + integrity sha512-dXL/WgTGI2K3oeYX/z1lngFXSKtjCB2j7n9WSSluoU6/6+N4LWNoMiCBFNgn8dh3luBn4JBajVSvM5I7Xn6SLA== + +livereload@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/livereload/-/livereload-0.9.1.tgz#65125dabdf2db4fd3f1169e953fe56e3bcc6f477" + integrity sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw== + dependencies: + chokidar "^3.3.0" + livereload-js "^3.1.0" + opts ">= 1.2.0" + ws "^6.2.1" + load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -4200,7 +4778,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.memoize@4.x: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= @@ -4210,10 +4788,22 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" lolex@^5.0.0: version "5.1.2" @@ -4286,6 +4876,11 @@ markdown-table@1.1.3: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== +marked@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" + integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== + marked@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.7.tgz#bc5b857a09071b48ce82a1f7304913a993d4b7d1" @@ -4296,6 +4891,11 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdn-data@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" + integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -4306,6 +4906,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@4.x, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -4345,6 +4950,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.43.0" +mime@>=2.0.3: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -4415,6 +5025,13 @@ mkdirp@^0.3.5: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= +mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4519,6 +5136,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + npm-normalize-package-bin@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" @@ -4553,6 +5175,13 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -4599,6 +5228,14 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -4606,7 +5243,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.1: +object.values@^1.1.0, object.values@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== @@ -4630,6 +5267,11 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +opener@1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -4654,6 +5296,11 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +"opts@>= 1.2.0": + version "1.2.7" + resolved "https://registry.yarnpkg.com/opts/-/opts-1.2.7.tgz#4de4721d592c96901dae623a438c988e9ea7779f" + integrity sha512-hwZhzGGG/GQ7igxAVFOEun2N4fWul31qE9nfBdCnZGQCB5+L7tN9xZ+94B4aUpLOJx/of3zZs5XsuubayQYQjA== + os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -4830,6 +5477,11 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -4840,7 +5492,7 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== -picomatch@^2.2.2: +picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -4850,7 +5502,7 @@ pidtree@^0.3.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -4896,6 +5548,352 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-calc@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" + integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-cli@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-7.1.1.tgz#260f9546be260b2149bf32e28d785a0d79c9aab8" + integrity sha512-bYQy5ydAQJKCMSpvaMg0ThPBeGYqhQXumjbFOmWnL4u65CYXQ16RfS6afGQpit0dGv/fNzxbdDtx8dkqOhhIbg== + dependencies: + chalk "^4.0.0" + chokidar "^3.3.0" + dependency-graph "^0.9.0" + fs-extra "^9.0.0" + get-stdin "^7.0.0" + globby "^11.0.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + postcss-reporter "^6.0.0" + pretty-hrtime "^1.0.3" + read-cache "^1.0.0" + yargs "^15.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +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" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-inline-svg@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-inline-svg/-/postcss-inline-svg-4.1.0.tgz#54e9199632242cc181af5b55f0f0691ad1020f95" + integrity sha512-0pYBJyoQ9/sJViYRc1cNOOTM7DYh0/rmASB0TBeRmWkG8YFK2tmgdkfjHkbRma1iFtBFKFHZFsHwRTDZTMKzSQ== + dependencies: + css-select "^2.0.2" + dom-serializer "^0.1.1" + htmlparser2 "^3.10.1" + postcss "^7.0.17" + postcss-value-parser "^4.0.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +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" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-nesting@^7.0.1: + 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.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +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" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reporter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" + integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== + dependencies: + chalk "^2.4.1" + lodash "^4.17.11" + log-symbols "^2.2.0" + postcss "^7.0.7" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-sort-media-queries@^1.6.24: + version "1.6.24" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-1.6.24.tgz#42cf1014e33005c52c07701540a367e7b3d6f96c" + integrity sha512-UPg6X/GzE0C1o5N41awn+UaD5lUL3c0qSh1FbZcG89zLvxnSf5Jd1XDK1qjXxQz3zgRyLzJrVhiOXl58xLuh5w== + dependencies: + postcss "^7.0.32" + sort-css-media-queries "1.5.0" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.7: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + postinstall-postinstall@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" @@ -4931,6 +5929,11 @@ pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -4972,6 +5975,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -4989,6 +5997,13 @@ react-is@^16.12.0, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -5060,6 +6075,15 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" @@ -5077,6 +6101,13 @@ readdirp@~3.3.0: dependencies: picomatch "^2.0.7" +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + realpath-native@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" @@ -5249,6 +6280,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -5295,6 +6331,21 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -5328,6 +6379,11 @@ rollup-plugin-add-git-msg@^1.1.0: resolved "https://registry.yarnpkg.com/rollup-plugin-add-git-msg/-/rollup-plugin-add-git-msg-1.1.0.tgz#064241be1bbaf6e1a99294b149ba9fe86e2554f4" integrity sha512-f714AUl4sTSkIIzy9HFbOE3JsjM7x6GaQAfCKnWUwsV7qnDzW4G7gKsSKK3JTl37b9L1mZGsRqgCUtuv+1j5AQ== +rollup-plugin-conditional@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-conditional/-/rollup-plugin-conditional-3.1.2.tgz#396f81b77d0db31dc3eeb88774ff9411f4de9f37" + integrity sha512-1QKQ8gz3MZea4mieMocJC2pua2BhAt7RF19/wURxEvjDwD5l2y/Bkipix45CvtzDC400biBqJLNFhtB+I6qnoA== + rollup-plugin-executable@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/rollup-plugin-executable/-/rollup-plugin-executable-1.6.0.tgz#ec10622751a81565d854daf0d23f59ef69b9883f" @@ -5335,6 +6391,13 @@ rollup-plugin-executable@^1.6.0: dependencies: "@babel/runtime" "^7.9.6" +rollup-plugin-livereload@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-livereload/-/rollup-plugin-livereload-1.3.0.tgz#8da90df13df6502b9d982997d6ac871092f15fdd" + integrity sha512-abyqXaB21+nFHo+vJULBqfzNx6zXABC19UyvqgDfdoxR/8pFAd041GO+GIUe8ZYC2DbuMUmioh1Lvbk14YLZgw== + dependencies: + livereload "^0.9.1" + rollup-plugin-node-externals@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-2.2.0.tgz#23946e8c0fdd0e321cc3f225d4cebc3d819d17c4" @@ -5350,6 +6413,14 @@ rollup-plugin-node-license@^0.2.0: license-checker "16.0.0" markdown-table "1.1.3" +rollup-plugin-serve@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-1.0.1.tgz#2da2a784a916c5564609c7696cd9dacdbf17f6cc" + integrity sha512-bni0pb4s1YLvn1xBmj+dH1OsLdp8gWA4zqh3yuEtT6/YHhg3nDneGU2GwMcRDQwY2tXzuI0uSeAlF1rY+ODitg== + dependencies: + mime ">=2.0.3" + opener "1" + rollup-plugin-terser@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-6.1.0.tgz#071866585aea104bfbb9dd1019ac523e63c81e45" @@ -5383,12 +6454,17 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@^5.1.0: +safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5425,6 +6501,11 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^3.1.9: version "3.1.11" resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" @@ -5513,6 +6594,13 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + sisteransi@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" @@ -5572,6 +6660,11 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sort-css-media-queries@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-1.5.0.tgz#8f605ad372caad0b81be010311882c046e738093" + integrity sha512-QofNE7CEVH1AKdhS7L9IPbV9UtyQYNXyw++8lC+xG6iOLlpzsmncZRiKbihTAESvZ8wOhwnPoesHbMrehrQyyw== + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -5756,6 +6849,11 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -5808,6 +6906,14 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +string.prototype.trimend@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" @@ -5824,6 +6930,21 @@ string.prototype.trimright@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" +string.prototype.trimstart@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -5877,6 +6998,15 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + supports-color@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" @@ -5894,6 +7024,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -5909,6 +7046,25 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -5982,6 +7138,11 @@ through@2: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + tiny-glob@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" @@ -6245,11 +7406,31 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -6275,11 +7456,26 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -6307,6 +7503,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -6450,6 +7651,13 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@^7.0.0: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" @@ -6522,7 +7730,7 @@ yargs@^13.0.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.3.1: +yargs@^15.0.2, yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== From eead007e6f8a856310409bfb569396cb5fff5d98 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 6 Feb 2020 21:30:16 +0100 Subject: [PATCH 2/9] Rename package script "build" to "build-ts" --- package.json | 5 +++-- packages/ipynb2html-cli/package.json | 2 +- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 08b587d..f07e073 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "version": "0.3.0", "private": true, "scripts": { - "build": "ttsc --build", + "build": "run-s build-ts", + "build-ts": "ttsc --build", "bundle": "wsrun --exclude-missing bundle", "clean": "rimraf coverage/ dist/ lib/ .eslintcache *.log && wsrun clean", "lint": "eslint --cache --ext .ts,.tsx,.js .", - "postinstall": "patch-package && run-s build", + "postinstall": "patch-package && run-s build-ts", "publish-all": "wsrun --serial publish", "test": "jest --detectOpenHandles --coverage --verbose", "version": "./scripts/bump-version && git add README.adoc **/package.json", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 1d8a2d6..3918d4d 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -29,7 +29,7 @@ "src" ], "scripts": { - "build": "ttsc --build", + "build-ts": "ttsc --build", "bundle": "rollup -c && ./scripts/pack-bundle", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index dd3e782..28f064d 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -24,7 +24,7 @@ "src" ], "scripts": { - "build": "ttsc --build", + "build-ts": "ttsc --build", "clean": "rimraf coverage/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", "prepublishOnly": "run-s readme2md", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index b7b1b69..b516778 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -29,7 +29,7 @@ "styles" ], "scripts": { - "build": "ttsc --build", + "build-ts": "ttsc --build", "bundle": "rollup -c", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", From b27a8d79f79afad8adf1c1bad0ca686ccea0524e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 7 Feb 2020 00:22:42 +0100 Subject: [PATCH 3/9] Restructuralize package build scripts --- package.json | 4 ++-- packages/ipynb2html-cli/package.json | 7 +++++-- packages/ipynb2html-core/package.json | 3 ++- packages/ipynb2html-viewer/package.json | 6 +++--- packages/ipynb2html/package.json | 8 +++++--- yarn.lock | 5 +++++ 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index f07e073..936d653 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,8 @@ "version": "0.3.0", "private": true, "scripts": { - "build": "run-s build-ts", + "build": "ttsc --build && wsrun --exclude-missing build-except-ts", "build-ts": "ttsc --build", - "bundle": "wsrun --exclude-missing bundle", "clean": "rimraf coverage/ dist/ lib/ .eslintcache *.log && wsrun clean", "lint": "eslint --cache --ext .ts,.tsx,.js .", "postinstall": "patch-package && run-s build-ts", @@ -44,6 +43,7 @@ "fs-extra": "^8.1.0", "jest": "^25.5.4", "jest-chain": "^1.1.5", + "mkdirp": "^1.0.4", "node-html-parser": "^1.2.19", "nodom": "^2.3.0", "npm-run-all": "^4.1.5", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 3918d4d..9bfba2f 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -29,11 +29,14 @@ "src" ], "scripts": { + "build": "run-p build-except-ts build-ts", + "build-bundle": "rollup -c", + "build-except-ts": "run-s build-bundle", "build-ts": "ttsc --build", - "bundle": "rollup -c && ./scripts/pack-bundle", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", - "prepublishOnly": "run-s readme2md", + "pack-bundle": "./scripts/pack-bundle", + "prepublishOnly": "run-s build readme2md pack-bundle", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" }, diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index 28f064d..240b226 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -24,10 +24,11 @@ "src" ], "scripts": { + "build": "run-s build-ts", "build-ts": "ttsc --build", "clean": "rimraf coverage/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", - "prepublishOnly": "run-s readme2md", + "prepublishOnly": "run-p build readme2md", "test": "jest --detectOpenHandles --coverage --verbose", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" diff --git a/packages/ipynb2html-viewer/package.json b/packages/ipynb2html-viewer/package.json index a92c4d7..8634b08 100644 --- a/packages/ipynb2html-viewer/package.json +++ b/packages/ipynb2html-viewer/package.json @@ -28,16 +28,16 @@ "index.html" ], "scripts": { - "build": "run-p build-bundle build-css", + "build": "run-s build-except-ts", "build-bundle": "rollup -c", "build-css": "run-p build-css:*", "build-css:dev": "postcss src/view.pcss -o dist/ipynb-viewer.css", "build-css:prod": "NODE_ENV=production postcss src/view.pcss -o dist/ipynb-viewer.min.css", + "build-except-ts": "run-p build-bundle build-css", "build-ts": "ttsc --build", - "bundle": "run-s build", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", - "prepublishOnly": "run-s readme2md", + "prepublishOnly": "run-p build readme2md", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch": "run-p watch-bundle watch-css", "watch-bundle": "rollup -c --watch", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index b516778..f3ac040 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -29,12 +29,14 @@ "styles" ], "scripts": { + "build": "run-p build-except-ts build-ts", + "build-bundle": "rollup -c", + "build-css": "mkdirp dist/ && csso styles/notebook.css -o dist/notebook.min.css -s dist/notebook.min.css.map", + "build-except-ts": "run-p build-bundle build-css", "build-ts": "ttsc --build", - "bundle": "rollup -c", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", - "minify-css": "csso styles/notebook.css -o dist/notebook.min.css -s dist/notebook.min.css.map", - "prepublishOnly": "run-p bundle minify-css readme2md", + "prepublishOnly": "run-p build readme2md", "test": "jest --detectOpenHandles --coverage --verbose", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" diff --git a/yarn.lock b/yarn.lock index b493f8f..4c88de6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5025,6 +5025,11 @@ mkdirp@^0.3.5: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" From 9c3002271facba0bef0b63377a2960d931a9616d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 12 Feb 2020 11:27:37 +0100 Subject: [PATCH 4/9] Viewer: Build dev and minified bundle separately This is a preparation for the upcoming commits. --- packages/ipynb2html-viewer/package.json | 4 +- packages/ipynb2html-viewer/rollup.config.js | 51 +++++++++++---------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/packages/ipynb2html-viewer/package.json b/packages/ipynb2html-viewer/package.json index 8634b08..ca7ebcd 100644 --- a/packages/ipynb2html-viewer/package.json +++ b/packages/ipynb2html-viewer/package.json @@ -29,7 +29,9 @@ ], "scripts": { "build": "run-s build-except-ts", - "build-bundle": "rollup -c", + "build-bundle": "run-p build-bundle:*", + "build-bundle:dev": "rollup -c", + "build-bundle:prod": "NODE_ENV=production rollup -c", "build-css": "run-p build-css:*", "build-css:dev": "postcss src/view.pcss -o dist/ipynb-viewer.css", "build-css:prod": "NODE_ENV=production postcss src/view.pcss -o dist/ipynb-viewer.min.css", diff --git a/packages/ipynb2html-viewer/rollup.config.js b/packages/ipynb2html-viewer/rollup.config.js index 8a05662..8f8a50a 100644 --- a/packages/ipynb2html-viewer/rollup.config.js +++ b/packages/ipynb2html-viewer/rollup.config.js @@ -13,6 +13,8 @@ import typescript from 'rollup-plugin-typescript2' import pkg from './package.json' +const isProductionBuild = process.env.NODE_ENV === 'production' +const isWatchBuild = !!process.env.ROLLUP_WATCH const extensions = ['.mjs', '.js', '.ts'] export default { @@ -58,17 +60,28 @@ export default { ], ], }), - // Add git tag, commit SHA and build date at top of the file. - addGitMsg({ - copyright: [ - pkg.author, - '* This project is licensed under the terms of the MIT license.' - ].join('\n'), - }), - // Generate table of the bundled packages at top of the file. - license({ format: 'table' }), - // Use only when running in watch mode... - conditional(process.env.ROLLUP_WATCH, () => [ + conditional(!isWatchBuild, [ + // Add git tag, commit SHA and build date at top of the file. + addGitMsg({ + copyright: [ + pkg.author, + '* This project is licensed under the terms of the MIT license.' + ].join('\n'), + }), + // Generate table of the bundled packages at top of the file. + license({ format: 'table' }), + ]), + conditional(isProductionBuild, [ + // Minify JS. + terser({ + ecma: 5, + output: { + // Preserve comment injected by addGitMsg and license. + comments: RegExp(`(?:\\$\\{${pkg.name}\\}|Bundled npm packages)`), + }, + }), + ]), + conditional(isWatchBuild, () => [ serve(), livereload(), ]), @@ -76,23 +89,13 @@ export default { external: [ 'ipynb2html', ], - output: [false, true].map(minify => ({ + output: { name: 'init', - file: `dist/ipynb-viewer${minify ? '.min.js' : '.js'}`, + file: `dist/ipynb-viewer${isProductionBuild ? '.min' : ''}.js`, format: 'umd', sourcemap: true, globals: { ipynb2html: 'ipynb2html', }, - plugins: [ - // Minify JS when building .min.js file and *not* running in watch mode. - !process.env.ROLLUP_WATCH && minify && terser({ - ecma: 5, - output: { - // Preserve comment injected by addGitMsg and license. - comments: RegExp(`(?:\\$\\{${pkg.name}\\}|Bundled npm packages)`), - }, - }), - ].filter(Boolean), - })), + }, } From ed9d86b89443d79671e88a6cd358c670d52f2da4 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 12 Feb 2020 11:47:31 +0100 Subject: [PATCH 5/9] Viewer: Run PostCSS via Rollup --- package.json | 3 +- packages/ipynb2html-viewer/package.json | 16 +- packages/ipynb2html-viewer/rollup.config.js | 16 +- packages/ipynb2html-viewer/src/view.tsx | 2 + patches/rollup-plugin-postcss+2.0.6.patch | 85 +++++ yarn.lock | 394 ++++++++++---------- 6 files changed, 312 insertions(+), 204 deletions(-) create mode 100644 patches/rollup-plugin-postcss+2.0.6.patch diff --git a/package.json b/package.json index 936d653..ed5db92 100644 --- a/package.json +++ b/package.json @@ -48,8 +48,6 @@ "nodom": "^2.3.0", "npm-run-all": "^4.1.5", "patch-package": "^6.2.2", - "postcss": "^7.0.32", - "postcss-cli": "^7.1.1", "postcss-inline-svg": "^4.1.0", "postcss-nesting": "^7.0.1", "postcss-sort-media-queries": "^1.6.24", @@ -62,6 +60,7 @@ "rollup-plugin-livereload": "^1.3.0", "rollup-plugin-node-externals": "^2.2.0", "rollup-plugin-node-license": "^0.2.0", + "rollup-plugin-postcss": "2.0.6", "rollup-plugin-serve": "^1.0.1", "rollup-plugin-terser": "^6.1.0", "rollup-plugin-typescript2": "^0.27.1", diff --git a/packages/ipynb2html-viewer/package.json b/packages/ipynb2html-viewer/package.json index ca7ebcd..7f417a9 100644 --- a/packages/ipynb2html-viewer/package.json +++ b/packages/ipynb2html-viewer/package.json @@ -28,22 +28,16 @@ "index.html" ], "scripts": { - "build": "run-s build-except-ts", - "build-bundle": "run-p build-bundle:*", - "build-bundle:dev": "rollup -c", - "build-bundle:prod": "NODE_ENV=production rollup -c", - "build-css": "run-p build-css:*", - "build-css:dev": "postcss src/view.pcss -o dist/ipynb-viewer.css", - "build-css:prod": "NODE_ENV=production postcss src/view.pcss -o dist/ipynb-viewer.min.css", - "build-except-ts": "run-p build-bundle build-css", + "build": "run-p build:*", + "build:dev": "rollup -c", + "build:prod": "NODE_ENV=production rollup -c", + "build-except-ts": "run-p build:*", "build-ts": "ttsc --build", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", "prepublishOnly": "run-p build readme2md", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", - "watch": "run-p watch-bundle watch-css", - "watch-bundle": "rollup -c --watch", - "watch-css": "postcss src/view.pcss -o dist/ipynb-viewer.css --watch", + "watch": "rollup -c --watch", "watch-ts": "tssc --build --watch" }, "dependencies": { diff --git a/packages/ipynb2html-viewer/rollup.config.js b/packages/ipynb2html-viewer/rollup.config.js index 8f8a50a..7df004a 100644 --- a/packages/ipynb2html-viewer/rollup.config.js +++ b/packages/ipynb2html-viewer/rollup.config.js @@ -4,6 +4,7 @@ import commonjs from '@rollup/plugin-commonjs' import conditional from 'rollup-plugin-conditional' import license from 'rollup-plugin-node-license' import livereload from 'rollup-plugin-livereload' +import postcss from 'rollup-plugin-postcss' import resolve from '@rollup/plugin-node-resolve' import serve from 'rollup-plugin-serve' import { terser } from 'rollup-plugin-terser' @@ -15,8 +16,10 @@ import pkg from './package.json' const isProductionBuild = process.env.NODE_ENV === 'production' const isWatchBuild = !!process.env.ROLLUP_WATCH +const destDir = './dist' const extensions = ['.mjs', '.js', '.ts'] + export default { input: 'src/index.ts', plugins: [ @@ -60,6 +63,13 @@ export default { ], ], }), + // Convert PostCSS styles to CSS. + postcss({ + autoModules: false, + extract: true, + sourceMap: true, + minimize: isProductionBuild, + }), conditional(!isWatchBuild, [ // Add git tag, commit SHA and build date at top of the file. addGitMsg({ @@ -90,9 +100,11 @@ export default { 'ipynb2html', ], output: { - name: 'init', - file: `dist/ipynb-viewer${isProductionBuild ? '.min' : ''}.js`, + dir: destDir, + entryFileNames: `ipynb-viewer${isProductionBuild ? '.min' : ''}.js`, + assetFileNames: `ipynb-viewer${isProductionBuild ? '.min' : ''}.[ext]`, format: 'umd', + name: 'init', sourcemap: true, globals: { ipynb2html: 'ipynb2html', diff --git a/packages/ipynb2html-viewer/src/view.tsx b/packages/ipynb2html-viewer/src/view.tsx index ed29972..b52fa55 100644 --- a/packages/ipynb2html-viewer/src/view.tsx +++ b/packages/ipynb2html-viewer/src/view.tsx @@ -8,6 +8,8 @@ import * as actions from './actions' import { State, ErrorMessage } from './types' import { match, targetFile } from './utils' +import './view.pcss' + const { homepage } = $INLINE_JSON<{ homepage: string }>('../package.json') const renderNotebook = ipynb2html.createRenderer(document) diff --git a/patches/rollup-plugin-postcss+2.0.6.patch b/patches/rollup-plugin-postcss+2.0.6.patch new file mode 100644 index 0000000..49804ec --- /dev/null +++ b/patches/rollup-plugin-postcss+2.0.6.patch @@ -0,0 +1,85 @@ +Ported from https://github.com/egoist/rollup-plugin-postcss/pull/226 + +diff --git a/node_modules/rollup-plugin-postcss/dist/index.js b/node_modules/rollup-plugin-postcss/dist/index.js +index 3d04b2e..01dda37 100644 +--- a/node_modules/rollup-plugin-postcss/dist/index.js ++++ b/node_modules/rollup-plugin-postcss/dist/index.js +@@ -789,15 +789,14 @@ var index = ((options = {}) => { + }, + + generateBundle(opts, bundle) { +- return _asyncToGenerator(function* () { +- if (extracted.size === 0) return; // TODO: support `[hash]` ++ var _this2 = this; + ++ return _asyncToGenerator(function* () { ++ if (extracted.size === 0) return; + const dir = opts.dir || path.dirname(opts.file); + const file = opts.file || path.join(opts.dir, Object.keys(bundle).find(fileName => bundle[fileName].isEntry)); + + const getExtracted = () => { +- const fileName = typeof postcssLoaderOptions.extract === 'string' ? normalizePath(path.relative(dir, postcssLoaderOptions.extract)) : `${path.basename(file, path.extname(file))}.css`; +- const concat = new Concat(true, fileName, '\n'); + const entries = Array.from(extracted.values()); + const modules = bundle[normalizePath(path.relative(dir, file))].modules; + +@@ -806,6 +805,32 @@ var index = ((options = {}) => { + entries.sort((a, b) => fileList.indexOf(a.id) - fileList.indexOf(b.id)); + } + ++ let referenceId; ++ ++ if (typeof postcssLoaderOptions.extract === 'string') { ++ referenceId = _this2.emitFile({ ++ type: 'asset', ++ source: '', ++ // init ++ fileName: normalizePath(path.relative(dir, postcssLoaderOptions.extract)) ++ }); ++ } else { ++ const name = `${path.basename(file, path.extname(file))}.css`; // Base hash digest on concatenation of extracted code... ++ ++ const source = entries.reduce((acc, { ++ code ++ }) => acc + code, ''); ++ referenceId = _this2.emitFile({ ++ type: 'asset', ++ source, ++ name ++ }); ++ } ++ ++ const fileName = _this2.getFileName(referenceId); ++ ++ const concat = new Concat(true, fileName, '\n'); ++ + for (var _i = 0; _i < entries.length; _i++) { + const res = entries[_i]; + const relative = normalizePath(path.relative(dir, res.id)); +@@ -872,20 +897,14 @@ var index = ((options = {}) => { + } + } + +- const codeFile = { +- fileName: codeFileName, +- isAsset: true, +- source: code +- }; +- bundle[codeFile.fileName] = codeFile; ++ bundle[codeFileName].source = code; // update + + if (map) { +- const mapFile = { +- fileName: mapFileName, +- isAsset: true, +- source: map +- }; +- bundle[mapFile.fileName] = mapFile; ++ _this2.emitFile({ ++ type: 'asset', ++ source: map, ++ fileName: mapFileName ++ }); + } + })(); + } diff --git a/yarn.lock b/yarn.lock index 4c88de6..2e5023e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1210,27 +1210,6 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - "@rollup/plugin-babel@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.0.3.tgz#8d416865b0da79faf14e07c8d233abe0eac0753d" @@ -1682,11 +1661,6 @@ array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1747,11 +1721,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -1858,6 +1827,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" @@ -2263,6 +2237,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-with-sourcemaps@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -2350,6 +2331,18 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" +css-modules-loader-core@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" + integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= + dependencies: + icss-replace-symbols "1.1.0" + postcss "6.0.1" + postcss-modules-extract-imports "1.1.0" + postcss-modules-local-by-default "1.2.0" + postcss-modules-scope "1.1.0" + postcss-modules-values "1.3.0" + css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -2365,6 +2358,15 @@ css-select@^2.0.0, css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-selector-tokenizer@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + regexpu-core "^4.6.0" + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -2449,7 +2451,7 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== -cssnano@^4.1.10: +cssnano@^4.1.10, cssnano@^4.1.8: version "4.1.10" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== @@ -2599,11 +2601,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -dependency-graph@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.9.0.tgz#11aed7e203bc8b00f48356d92db27b265c445318" - integrity sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w== - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -2637,13 +2634,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2737,6 +2727,11 @@ emoji-regex@^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@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3035,6 +3030,11 @@ estraverse@^5.1.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -3158,18 +3158,6 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== -fast-glob@^3.1.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3180,12 +3168,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== - dependencies: - reusify "^1.0.4" +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fb-watchman@^2.0.0: version "2.0.1" @@ -3324,16 +3310,6 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -3361,6 +3337,13 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +generic-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" + integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== + dependencies: + loader-utils "^1.1.0" + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -3371,11 +3354,6 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3409,13 +3387,6 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3445,18 +3416,6 @@ globalyzer@^0.1.0: resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== -globby@^11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - globrex@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" @@ -3504,6 +3463,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3647,6 +3611,11 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-replace-symbols@1.1.0, icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -3657,12 +3626,7 @@ ignore@^5.1.1: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-cwd@^2.0.0: +import-cwd@^2.0.0, import-cwd@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= @@ -4591,15 +4555,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4755,6 +4710,15 @@ load-json-file@^5.0.0: strip-bom "^3.0.0" type-fest "^0.3.0" +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -4778,6 +4742,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4793,18 +4762,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: +lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - lolex@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" @@ -4906,11 +4868,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - micromatch@4.x, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -5368,6 +5325,11 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-queue@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" + integrity sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng== + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5482,11 +5444,6 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5507,7 +5464,7 @@ pidtree@^0.3.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -5562,24 +5519,6 @@ postcss-calc@^7.0.1: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.2" -postcss-cli@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-7.1.1.tgz#260f9546be260b2149bf32e28d785a0d79c9aab8" - integrity sha512-bYQy5ydAQJKCMSpvaMg0ThPBeGYqhQXumjbFOmWnL4u65CYXQ16RfS6afGQpit0dGv/fNzxbdDtx8dkqOhhIbg== - dependencies: - chalk "^4.0.0" - chokidar "^3.3.0" - dependency-graph "^0.9.0" - fs-extra "^9.0.0" - get-stdin "^7.0.0" - globby "^11.0.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - postcss-reporter "^6.0.0" - pretty-hrtime "^1.0.3" - read-cache "^1.0.0" - yargs "^15.0.2" - postcss-colormin@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" @@ -5708,6 +5647,48 @@ postcss-minify-selectors@^4.0.2: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +postcss-modules-extract-imports@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-modules@^1.4.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.5.0.tgz#08da6ce43fcfadbc685a021fe6ed30ef929f0bcc" + integrity sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg== + dependencies: + css-modules-loader-core "^1.1.0" + generic-names "^2.0.1" + lodash.camelcase "^4.3.0" + postcss "^7.0.1" + string-hash "^1.1.1" + postcss-nesting@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" @@ -5825,16 +5806,6 @@ postcss-reduce-transforms@^4.0.2: postcss "^7.0.0" postcss-value-parser "^3.0.0" -postcss-reporter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" - integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== - dependencies: - chalk "^2.4.1" - lodash "^4.17.11" - log-symbols "^2.2.0" - postcss "^7.0.7" - postcss-selector-parser@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" @@ -5890,7 +5861,25 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.7: +postcss@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" + integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -5934,11 +5923,6 @@ pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -5949,6 +5933,11 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise.series@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" + integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= + prompts@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" @@ -6002,13 +5991,6 @@ react-is@^16.12.0, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -6278,6 +6260,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -6324,7 +6311,7 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.1 dependencies: path-parse "^1.0.6" -resolve@^1.14.2, resolve@^1.17.0: +resolve@^1.14.2, resolve@^1.17.0, resolve@^1.5.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -6336,11 +6323,6 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -6418,6 +6400,26 @@ rollup-plugin-node-license@^0.2.0: license-checker "16.0.0" markdown-table "1.1.3" +rollup-plugin-postcss@2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-2.0.6.tgz#7e1c4e299e42cca170de7b789ecdd405a154c5a6" + integrity sha512-DTfIoKoC6ljQA4MmrPVbjnumWFx9tZAylDnduIhwJy9JQsq0iiVFmHy0c4cM//h7Auhf1RGB3FLqFuyNUcnExQ== + dependencies: + chalk "^2.4.2" + concat-with-sourcemaps "^1.0.5" + cssnano "^4.1.8" + import-cwd "^2.1.0" + p-queue "^2.4.2" + pify "^3.0.0" + postcss "^7.0.14" + postcss-load-config "^2.0.0" + postcss-modules "^1.4.1" + promise.series "^0.2.0" + reserved-words "^0.1.2" + resolve "^1.5.0" + rollup-pluginutils "^2.0.1" + style-inject "^0.3.0" + rollup-plugin-serve@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rollup-plugin-serve/-/rollup-plugin-serve-1.0.1.tgz#2da2a784a916c5564609c7696cd9dacdbf17f6cc" @@ -6447,6 +6449,13 @@ rollup-plugin-typescript2@^0.27.1: resolve "1.15.1" tslib "1.11.2" +rollup-pluginutils@^2.0.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + rollup@^2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.17.1.tgz#d01a27c1b76e42efe2cd786609589f6332e81aa6" @@ -6459,11 +6468,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== - safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -6877,6 +6881,11 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + string-length@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" @@ -7003,6 +7012,11 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== +style-inject@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" + integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -7022,7 +7036,14 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -7426,11 +7447,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" @@ -7735,7 +7751,7 @@ yargs@^13.0.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.0.2, yargs@^15.3.1: +yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== From 3afc120a3b0781df9e51c8f15648cf00646fa2d9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 12 Feb 2020 22:30:59 +0100 Subject: [PATCH 6/9] Viewer: Generate index.html from template with injected asset paths --- package.json | 1 + .../ipynb2html-viewer/{index.html => index-html.js} | 6 ++++-- packages/ipynb2html-viewer/rollup.config.js | 11 ++++++++++- yarn.lock | 5 +++++ 4 files changed, 20 insertions(+), 3 deletions(-) rename packages/ipynb2html-viewer/{index.html => index-html.js} (81%) diff --git a/package.json b/package.json index ed5db92..fb9d524 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@babel/preset-env": "^7.10.3", "@rollup/plugin-babel": "^5.0.3", "@rollup/plugin-commonjs": "^13.0.0", + "@rollup/plugin-html": "^0.2.0", "@rollup/plugin-node-resolve": "^8.0.1", "@types/dedent": "^0.7.0", "@types/jest": "^24.9.1", diff --git a/packages/ipynb2html-viewer/index.html b/packages/ipynb2html-viewer/index-html.js similarity index 81% rename from packages/ipynb2html-viewer/index.html rename to packages/ipynb2html-viewer/index-html.js index 95a3968..55b44e1 100644 --- a/packages/ipynb2html-viewer/index.html +++ b/packages/ipynb2html-viewer/index-html.js @@ -1,3 +1,4 @@ +export default ({ files: { css: [css], js: [js] }, publicPath }) => `\ @@ -6,7 +7,7 @@ .ipynb viewer - + +` diff --git a/packages/ipynb2html-viewer/rollup.config.js b/packages/ipynb2html-viewer/rollup.config.js index 7df004a..db8284d 100644 --- a/packages/ipynb2html-viewer/rollup.config.js +++ b/packages/ipynb2html-viewer/rollup.config.js @@ -2,6 +2,7 @@ import addGitMsg from 'rollup-plugin-add-git-msg' import babel from '@rollup/plugin-babel' import commonjs from '@rollup/plugin-commonjs' import conditional from 'rollup-plugin-conditional' +import html from '@rollup/plugin-html' import license from 'rollup-plugin-node-license' import livereload from 'rollup-plugin-livereload' import postcss from 'rollup-plugin-postcss' @@ -11,6 +12,7 @@ import { terser } from 'rollup-plugin-terser' import ttypescript from 'ttypescript' import typescript from 'rollup-plugin-typescript2' +import indexTemplate from './index-html' import pkg from './package.json' @@ -70,6 +72,10 @@ export default { sourceMap: true, minimize: isProductionBuild, }), + // Generate index.html from the template. + html({ + template: indexTemplate, + }), conditional(!isWatchBuild, [ // Add git tag, commit SHA and build date at top of the file. addGitMsg({ @@ -91,8 +97,11 @@ export default { }, }), ]), + // Use only when running in watch mode... conditional(isWatchBuild, () => [ - serve(), + serve({ + contentBase: destDir, + }), livereload(), ]), ], diff --git a/yarn.lock b/yarn.lock index 2e5023e..6e5f813 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1231,6 +1231,11 @@ magic-string "^0.25.2" resolve "^1.11.0" +"@rollup/plugin-html@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-html/-/plugin-html-0.2.0.tgz#a01068e3e0e089a65f44c1b1988b8acd236f36e9" + integrity sha512-aT73feaTUmJIQ45K61+5pL9GE5IYgHi0SvQ+yhQfPG1HoDlPnIjk3af9IA/DxJ+8ZlWDWFcN3pik0VavWF88hw== + "@rollup/plugin-node-resolve@^8.0.1": version "8.0.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.1.tgz#364b5938808ee6b5164dea5ef7291be3f7395199" From ae9c35a367470aaf4a002e9c95e3ae2c02140014 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 13 Feb 2020 00:50:22 +0100 Subject: [PATCH 7/9] Viewer: Add support for adding content hash into asset file names --- packages/ipynb2html-viewer/package.json | 3 ++- packages/ipynb2html-viewer/rollup.config.js | 26 ++++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/ipynb2html-viewer/package.json b/packages/ipynb2html-viewer/package.json index 7f417a9..dd2e32a 100644 --- a/packages/ipynb2html-viewer/package.json +++ b/packages/ipynb2html-viewer/package.json @@ -30,8 +30,9 @@ "scripts": { "build": "run-p build:*", "build:dev": "rollup -c", - "build:prod": "NODE_ENV=production rollup -c", + "build:prod": "BUILD_FLAGS=minify rollup -c", "build-except-ts": "run-p build:*", + "build-site": "BUILD_FLAGS=minify,hash rollup -c", "build-ts": "ttsc --build", "clean": "rimraf coverage/ dist/ lib/ .eslintcache .tsbuildinfo", "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", diff --git a/packages/ipynb2html-viewer/rollup.config.js b/packages/ipynb2html-viewer/rollup.config.js index db8284d..15eaee5 100644 --- a/packages/ipynb2html-viewer/rollup.config.js +++ b/packages/ipynb2html-viewer/rollup.config.js @@ -16,9 +16,17 @@ import indexTemplate from './index-html' import pkg from './package.json' -const isProductionBuild = process.env.NODE_ENV === 'production' -const isWatchBuild = !!process.env.ROLLUP_WATCH -const destDir = './dist' +const flags = (process.env.BUILD_FLAGS || '').split(',').reduce((obj, flag) => { + obj[flag] = true + return obj +}, {}) +flags.watch = !!process.env.ROLLUP_WATCH + +const assetInfix = + flags.hash ? '.[hash]' : + flags.minify ? '.min' : + '' +const destDir = process.env.BUILD_DESTDIR || './dist' const extensions = ['.mjs', '.js', '.ts'] @@ -70,13 +78,13 @@ export default { autoModules: false, extract: true, sourceMap: true, - minimize: isProductionBuild, + minimize: !!flags.minify, }), // Generate index.html from the template. html({ template: indexTemplate, }), - conditional(!isWatchBuild, [ + conditional(!flags.watch, [ // Add git tag, commit SHA and build date at top of the file. addGitMsg({ copyright: [ @@ -87,7 +95,7 @@ export default { // Generate table of the bundled packages at top of the file. license({ format: 'table' }), ]), - conditional(isProductionBuild, [ + conditional(flags.minify, [ // Minify JS. terser({ ecma: 5, @@ -98,7 +106,7 @@ export default { }), ]), // Use only when running in watch mode... - conditional(isWatchBuild, () => [ + conditional(flags.watch, () => [ serve({ contentBase: destDir, }), @@ -110,8 +118,8 @@ export default { ], output: { dir: destDir, - entryFileNames: `ipynb-viewer${isProductionBuild ? '.min' : ''}.js`, - assetFileNames: `ipynb-viewer${isProductionBuild ? '.min' : ''}.[ext]`, + entryFileNames: `ipynb-viewer${assetInfix}.js`, + assetFileNames: `ipynb-viewer${assetInfix}.[ext]`, format: 'umd', name: 'init', sourcemap: true, From 813a55718ea605b8a4fe180cec75d66f4baa6039 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 13 Feb 2020 00:55:27 +0100 Subject: [PATCH 8/9] CI: Add job for deploying viewer to gh-pages --- .github/workflows/ci.yml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6407fe6..d47a122 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: - run: yarn test - run: yarn lint - publish: + publish-release: name: Publish to npmjs and GitHub Releases needs: [test] if: startsWith(github.ref, 'refs/tags/v') @@ -66,3 +66,26 @@ jobs: dist/*.tar.gz packages/ipynb2html-cli/dist/*.tar.gz packages/ipynb2html-cli/dist/*.zip + + deploy-viewer: + name: Build and deploy viewer to ipynb.js.org + needs: [test] + if: github.ref == 'refs/heads/master' && github.event_name == 'push' + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # fetch all history to make `git describe` work + + - run: yarn install + + - name: Build ipynb-viewer + run: BUILD_DESTDIR=$(pwd)/site yarn workspace ipynb2html-viewer build-site + + - name: Deploy to gh-pages + uses: JamesIves/github-pages-deploy-action@releases/v3 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages + FOLDER: site + CLEAN: true From 2b662a10cb9c4a473613f3420cd07957218c0156 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 8 Apr 2020 18:10:29 +0200 Subject: [PATCH 9/9] TEMP: Deploy to gh-pages from branch viewer --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d47a122..60239e7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,7 +70,7 @@ jobs: deploy-viewer: name: Build and deploy viewer to ipynb.js.org needs: [test] - if: github.ref == 'refs/heads/master' && github.event_name == 'push' + if: github.ref == 'refs/heads/viewer' && github.event_name == 'push' # TODO: replace 'viewer' with 'master' runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2